HTTP报文格式
HTTP规范[RFC 1945;RFC 26167;RFC 7540:包含了对HTTP 报文格式的定义。HTTP
报文有两种:请求报文和响应报文。
HTTP请求报文
从客户向服务器发送请求报文。
结构如图:
开始行
第一行为开始行也叫做请求行。包括三个字段:方法字段,URL字段和HTTP版本字段。CR和LF分布代表回车和换行。
HTTP请求报文的一些方法:
首部行
用来说明浏览器、服务器或报文主题的一些信息。可以有多行,下面例子有4行。
实体主体
在请求报文中一般都不用这个字段, 而在响应报文中也可能没有这个字段。
请求报文例子
在请求行使用了相对URL (即省略了主机的域名)是因为下面的首部行(第2行)给出了主机的域名。 第 3 行是告诉服务器不使用持续连接, 表示浏览器希望服务器在传送完所请求的对象后即关闭 TCP 连接。
HTTP响应报文
从服务器到客户的回答。每一个请求报文发出后, 都能收到一个响应报文。
结构如图:
状态行
响应报文的第一行就是状态行。状态行包括三项内容, 即 HTTP 的版本, 状态码, 以及解释状态码的简单短语。其他行结构和请求报文都一样。
状态码
状态码分为5大类,都是以不同的数字开头。
- 1xx表示通知信息, 如请求收到了或正在进行处理。
- 2xx 表示成功, 如接受或知道了。
- 3xx表示重定向, 如要完成请求还必须采取进一步的行动。
- 4xx 表示客户的差错, 如请求中有错误的语法或不能完成。
- 5xx表示服务器的差错, 如服务器失效无法完成请求。
常见的状态码和相关的短语包括:
- 200 0K:请求成功,信息在返回的响应报文中。
- 301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行中。客户软件将自动获取新的URL。
- 400 Bad Request: 一个通用差错代码,指示该请求不能被服务器理解。
- 404 Not Found:被请求的文档不在服务器上。
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。
响应报文举例
第三行指示服务器产生并发送该响应报文的日期和时间。
第四行指示该报文是由一台Apache Web服务器产生的,它类似于HTTP请求报文中的User-agent行。
第五行指示了对象创建或者最后修改的日期和时间。
第六行指示了被发送对象中的字节数。
第七行指示了实体体中的对象是HTML文本。