天天看点

[HTTP协议]HTTP报文入门

HTTP协议:

1.无连接:每次只处理一个请求,服务器处理完一个http请求后自动断开链接
        2.无状态:每次请求都是独立的,不会保留前后请求的数据.如果需要前后请求的数据必须重新传递
        3.灵活:可以传输任意类型的数据, 传输的类型由contentType指定    
           

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

TCP短连接长连接都由客户端发起,而TCP长连接的保活功能主要为服务器应用提供。如果客户端已经消失而连接未断开,则会使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,此时服务器将永远等待客户端的数据。保活功能就是试图在服务端器端检测到这种半开放的连接。也因为短连接、长连接的实现在HTTP之外,与HTTP无关,从HTTP自身来看,HTTP依然是无连接的。  
           

HTTP报文:

[HTTP协议]HTTP报文入门
[HTTP协议]HTTP报文入门

在这个浏览器发出的请求报文里,第一行“GET / HTTP/1.1”就是请求行,而后面的“Host”“Connection”等等都属于 header,报文的最后是一个空白行结束,没有 body。

请求行:

了解了 HTTP 报文的基本结构后,我们来看看请求报文里的起始行也就是请求行(request line),它简要地描述了客户端想要如何操作服务器端的资源。

请求行由三部分构成:

请求方法:是一个动词,如 GET/POST,表示对资源的操作;
      请求目标:通常是一个 URI,标记了请求方法要操作的资源;
      版本号:表示报文使用的 HTTP 协议版本。
           

这三个部分通常使用空格(space)来分隔,最后要用 CRLF 换行表示结束。

[HTTP协议]HTTP报文入门
GET / HTTP/1.1
           

状态行:

看完了请求行,我们再看响应报文里的起始行,在这里它不叫“响应行”,而是叫“状态行”(status line),意思是服务器响应的状态。

比起请求行来说,状态行要简单一些,同样也是由三部分构成:

版本号:表示报文使用的 HTTP 协议版本;
 状态码:一个三位数,用代码的形式表示处理的结果,比如 200 是成功,500 是服务器错误;
 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因。   
           
[HTTP协议]HTTP报文入门
HTTP/1.1 200 OK
HTTP/1.1 400 Not Found
           

头部字段:

请求行或状态行再加上头部字段集合就构成了 HTTP 报文里完整的请求头或响应头,这里有两个示意图,可以看一下。

[HTTP协议]HTTP报文入门
[HTTP协议]HTTP报文入门