HTTP 协议入门

参考地址:
1http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651551170&idx=1&sn=03cf3211a4f0f1cede3e482f48f934d0&scene=0#rd

2http://www.ruanyifeng.com/blog/2016/08/http.html

1、 HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包的传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。


2、 HTTP/1.0 请求的例子

GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*

第一行是请求命令,必须在尾部添加协议版本(HTTP/1.0)。后面是多行头信息,描述客户端情况。


3、HTTP/1.0 回应格式

HTTP/1.0 200 OK 
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello World</body>
</html>

a、回应的格式是 头信息 + 一个空行(\r\n) + 数据

b、第一行是 协议版本 + 状态码 + 状态描述


4、 HTTP/1.0 的缺点

a、HTTP/1.0 版主要的缺点是,每个TCP连接只能发送一次请求,连接就关闭了,如果需要请求其他资源,就必须新键一个连接。

b、 TCP 需要与服务器进行三次握手,并且开始时发送速率较慢。所以性能较差。

c、HTTP/1.0 解决办法: 有些浏览器,用了一个非标准的Connection字段。请求时发送 Connection: keep-alive 要求服务器不关闭TCP 连接,以便其他请求复用。服务器响应的时候 也发送Connection: keep-alive,这样就建立了可复用的TCP连接,知道客户端后服务器端主动关闭连接。


5、HTTP/1.1 持久连接

a、HTTP/1.1 中引用持久连接,默认不关闭TCP连接,可以被多个请求复用,不需要申明 Connection: keep-alive

b、当客户端或服务器端发现对方一段时间没有活动,就主动关闭连接。(不规范)

c、客户端在最后一个请求时发送 Connection: close 明确要求服务器关闭TCP 连接。

d、同一个域名,大多浏览器允许同时建立6个持久连接


6、 HTTP/1.1 管道机制

在同一个TCP连接里面,客户端可以同时发送多个请求


7、 Content-Length 字段,申明背刺回应数据长度

a、 在 HTTP/1.0 中 Content-Length 不是必须的,因为浏览器发现服务器关闭TCP 连接,就表明收到的数据包已经全了

b、在HTTP/1.1 中可以不使用 Content-Length ,而使用分块传输编码。只要请求或者回应的头信息有 Transfer-Encoding 字段,就表明回应将有数量未定的数据块组成。


8、HTTP/1.1 的缺点 HTTP/1.1 允许复用TCP连接,但是同一个TCP连接里面,所有的通信都是按次序进行的,服务器只有处理玩一个回应,才会进行下个回应,如果前面的回应特别慢,后面就会有很多请求排队等着,这就叫做“队头赌塞”;


9、HTTP/2

a、 2015年 HTTP/2发布,因为不在继续发布子版本,所以不叫 HTTP/2.0

b、 二进制协议。

HTTP/1.1 版本的头信息肯定是文本(ASCII编码),数据可以是文本,也可以是二进制。 HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧

c、HTTP/2 复用TCP 连接,在一个连接里,客户端和浏览器都可以同时发送多个请求和回应,而且不用按照顺序一一对应,这就可以避免“对头堵塞”。这样双向的、实时的通信,就叫做多工。

d、 HTTP/2 数据流 HTTP/2 将每个请求或回应的所有数据包,称为一个数据流。每个数据流都有独一无二的编码。数据包发送的时候都必须标记数据流ID,用来区分他属于那个数据流。另外还规定,客户端发出的数据流,ID 一律为奇数,服务器发出的,ID 为偶数。


Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注