HTTP 报文是 HTTP 应用程序之间传递的格式化数据块,分为请求报文和响应报文两类,两者的基本结构相同。
HTTP 报文由起始行、首部、主体(可选)三个部分组成。其中,起始行和首部均以一个行终止序列(即空行,可写作CRLF,包括一个回车符、一个换行符)作为结束符。主体是可选的数据块,可以包含文本、二进制数据或者为空。
起始行
所有 HTTP 报文都已起始行作为开始,请求报文和响应报文的起始行的语法有所不同。
请求报文起始行:
又称为请求行,告诉服务器要做什么。
语法:
<method><request-URL><version> 如:GET www.google.com HTTP/1.0
方法(method):常用的有
① GET:从服务器上获取资源
② POST:向服务器发送需要处理(更新)的数据
③ PUT:将请求主体存储于(写入)服务器上的指定路径(请求的 URL)
④ DELETE:请求服务器删除资源,但无法保证被执行,因为服务器可以在不通知客户端的情况下撤销请求
⑤ HEAD:从服务器获取资源首部,必须确保与 GET 请求返回的首部完全相同
⑥ OPTIONS:确定服务器可以执行的方法;使客户端不同实际访问资源就能判断访问资源的最优方法。
⑦ TRACE:对可能经过代理服务器的报文进行跟踪
其中 GET 和 HEAD 方法被认为是安全的,因为这两种请求不会在服务器上产生什么结果。
响应报文起始行:
又称为响应行,告诉客户端发生了什么。
语法:
<version><status><reason-phrase> 如:HTTP/1.0 200 OK
状态码(status-code):数字状态码,便于程序进行差错处理;每个状态码第一位数字都用于描述状态的一般类型。其中
100-199:表示信息提示,100-101 已被定义
100 Continue 表示服务器收到了请求的初始部分,请客户端继续。一般当客户端需要发送一个大实体或判断服务器能否处理实体时,可以在首部添加 Expect: 100 Continue。如果客户端不需要发送实体,就不应该发送该首部字段。
200-299:表示成功,200-206 已被定义
200 OK 请求成功,主题包含所请求的资源。
300-399:表示资源被移走,300-305、307 已被定义
301 Moved Permanently 永久重定向;
302 Found 临时重定向(HTTP/1.0);
303 See Other 临时重定向(HTTP/1.1);
304 Not Modified 所请求资源未被修改,使用缓存资源;
307 Temporary Rederect 与 301 类似(HTTP/1.1);
400-499:表示客户端请求出错,400-415 已被定义
401 Unauthorized 客户端在获取资源的访问权之前,对自己进行认证;
403 Forbidden 请求被服务器拒绝,通常在服务器不想说明拒绝原因时使用;
404 Not Found 请求的资源不存在;
405 Method Not Allowed 请求中带有所请求 URL 不支持的方法;
406 Not Acceptable 服务器不存在客户端可接受的与请求 URL 匹配的资源;
500-599:表示服务器出错,500-505 已被定义
500 Internal Server Error 服务器发生错误;
501 Not Implemented 请求超出服务器的能力范围(如使用服务器不支持的请求方法);
503 Service Unavalable 服务器暂时无法为请求提供服务,但将来可以;
504 Gateway Timeout 响应超时,来自网关或代理;
505 HTTP Version Not Supproted 请求使用了服务器无法或不愿支持的协议版本;
原因短语(reason-phrase):以文本形式描述操作状态;便于人们理解,因此只对人类有意义(一般程序只检查状态码)
首部
为报文添加一些附件信息;本质上是一些名/值对列表。首部分为:
通用首部:
缓存首部:Cache-Control、Pragma
请求首部:
Accept首部:Accept、Accept-Charset、Accept-Encoding、Accept-Language、TR
条件首部:Expect、If-Match、If-Modified-Since、If-Unmodified-Since、If-Match、If-None-Match
安全首部:Authorization、Cookie、Cookie2
代理首部:Max-forward、Proxy-Authorization、Proxy-Connection
响应首部:
信息性首部:Age、public...
安全首部:Proxy-Authenticate、Set-Cookie、Set-Cookie2
实体首部:
信息性首部:Allow、Location
内容首部:Content-Type、Content-length、Content-Language
缓存首部:ETag、Expires、Last-Modified
扩展首部。
主体
HTTP 要传输的内容,可以为图片、视频、HTML 文档、软件应用程序等。
参考:HTTP 权威指南