网络协议

1.1 http与https的基本概念

1.1.1 什么是http协议

    HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准 
(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减 
少。 
    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协 
议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方 
法.

HTTP协议一般用于B/S架构()。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
img08.jpg

1.1.2 什么是https协议

    HTTPS(HyperText Transfer Protocol over Secure Socket Layer):是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP+SSL/TLS,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 

    SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。

    TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。

1.1.3 http与https的区别

简单来说,HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安 全。区别主要如下: 

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 

3、http和https使用的是完全不同的连接方式,用的默认端口也不一样,前者是80,后者是443。 

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证 的网络协议,比http协议安全。

1.2 http请求的组成

img01.jpg
img02.jpg

请求行

请求的第一行是“方法URI协议/版本”例如:GET/sample.jsp HTTP/1.1 
以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。

消息报头

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正 文的长度等。例如:
Accept:image/gif.image/jpeg.*/*(请求的图片内容格式) 
Accept-Language:zh-cn(zh-CN 是表示中文,fr-FR 是表示法语。 这是RFC1766定义的语言表示方 式)
Connection:Keep-Alive(又称持久连接、连接重用,Keep-Alive功能使客户端到服务器端的连接持续 有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。) 
Host:localhost(主机名字) 
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)(客户端身份信息)
Accept-Encoding:gzip,deflate( 以压缩格式接收请求数据)

请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正 文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234 
在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多 的内容。

请求方法

img03.jpg

1.3 http响应格式

img04.png
img05.jpg

状态行

HTTP-1.1 Status-Code Reason-Phrase CRLF•其中,HTTP-Version表示服务器HTTP协议的版本;
Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
例如:HTTP/1.1 200 OK

消息报头

服务器传递给客户端用于说明服务器的一些信息,以及将来继续访问该资源时的策略。
Location:Location响应报头域用于重定向接受者到一个新的位置。
Server:Server响应报头域包含了 服务器用来处理请求的软件信息。•WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在 401(未授权的)响应消息中下面是WWW-Authenticate响应报头域的一个,例子:WWW-Authenticate: Basic realm="Basic Auth Test!“
Content-Encoding:Content-Encoding实体报头域被使用作媒 体类型的修饰符.
Content-Language:Content-Language实体报头域描述了资源所用的自然语言。 
Content-Length: Content-Length实体报头域用于指明正文的长度.
Content-Type:Content- Type实体报头域用语指明发送给接收者的实体正文的媒体类型。
Last-Modified:Last-Modified实体报 头域用于指示资源最后的修改日期及时间。
Expires: Expires实体报头域给出响应过期的日期和时间。 Expires实体报头域使用的日期和时间必须是RFC 1123中的日期格式,例如:•Expires: Thu, 15 Sep 2005 16:00:00 GMT

响应正文

是服务端返回给客户端的HTML文本内容,或者其他格式的数据,比如:视频流、图片或者音频数据。 
如果请求的是HTML页面,那么返回的就是HTML代码。如果是JS就是JS代码。

响应状态码

img06.jpg

1.4 HTTP/2.0,1.1,1.0的区别

img07.jpg

1.4.1 HTTP1.0和HTTP1.1的区别

    HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:
  1. 缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  2. 带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  3. 错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  4. Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  5. 长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

1.4.2 HTTP2.0和HTTP1.X相比的新特性

  • 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
  • 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
  • header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
  • 服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。

你可能感兴趣的:(网络协议)