HTTP报文是在HTTP应用程序之间发送的数据块。
HTTP报文是简单的格式化数据块。分为请求报文和响应报文。每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。它们由三个部分组成:对报文进行描述的起始行、包含属性的首部块,以及可选的、包含数据的主体。
可以用抓包工具来查看报文。
请求报文
SP代表空格,CRLF代表回车换行
<method> <request-URL> <version>
<headers>
<entity-body>
方法(method)
客户端希望服务器对资源执行的动作。是一个单独的词,比如GET、HEAD或POST。
请求URL(request-URL)
命名了所请求的资源
版本(version)
报文所使用的HTTP版本
HTTP/<major>.<minor>
其中主要版本号和次要版本号都是整数。
响应报文
<version> <status> <reason-phrase>
<headers>
<entity-body>
状态码(status-code)
这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)
浏览器向服务器发出请求,服务器处理可能是成功、可能是失败、可能没有权限访问等原因,服务器会通过响应码来告诉浏览器处理结果。
“200” : OK
“302” : Found 重定向.
“400” : Bad Request 错误请求,发出错误的不符合Http协议的请求
“403” : Forbidden 禁止
“404” : Not Found 未找到。演示访问一个不存在的页面看报文
“500” : Internal Server Error 服务器内部错误。演示页面抛出异常。
“503” : Service Unavailable。一般是访问人数过多。
200段是成功;300段需要对请求做进一步的处理;400段表示客户端请求错误;500段是服务器的错误。
原因短语(reason-phrase)
数字状态的可读版本。原因短语只对人类有意义,比如说,尽管响应行HTTP/1.0 200 NOT OK和HTTP/1.0 200 OK中原因短语的含义不同,但同样都会被当成成功指示处理。
首部
首部和方法配合工作,共同决定了客户端和服务器能做什么事情。
一些常见的首部
Accept:客户端用这个首部来告诉服务器可以接受那些媒体类型。
Accept-Encoding:
客户端用这个首部来告诉服务器可以接受哪些编码方式。
Accept-Language:客户端用这个首部来告诉服务器可接受或优选哪些语言。
Connection:值为close的时候,代表响应结束之后连接会被关闭。值为keep-alive的时候,代表连接在发送后仍然保持打开状态。
Content-Encoding:可以告诉客户端,服务器对对象执行过哪些类型的编码。有了这个信息,客户端就可以对报文进行解码了。
Content-Length:说明实体主体部分的长度或尺寸。
Content-Type:说明了报文中对象的媒体类型。
Cookie:用于客户端识别和跟踪的扩展首部。
Date:给出了报文创建的日期和时间。
Expires:给出了响应失效的日期和时间。
Host:提供客户端想要访问的那台机器的因特网主机名和端口号。
Referer:在客户端请求中插入这个首部,可以使服务器知道客户端是从哪里获得其请求的URL。
Server:它为服务器提供了一种向客户端标识自己的方式。它的值就是服务器名字和一个可选的服务器注释。
User-Agent:用来标识客户端,它的值就是应用程序的名称。