HTTP权威指南 第3章 HTTP报文
报文流:HTTP报文是在HTTP应用程序之间发送的数据块,在客户端、服务器和代理之间流动。
HTTP报文包含三个部分:
- 起始行
- 首部字段
- 主体
起始行和首部就是由行分隔的ASCII文本,每行以一个回车符和一个换行符作为结束。
主体中可以包含文本或二进制数据,也可以为空。
报文格式:
请求报文:
<方法><请求URL><版本>
<首部>
<实体主体>
响应报文:
<版本><状态码><原因短语>
<首部>
<实体主体>
起始行:请求报文的起始行说明了要做些什么,响应报文的起始行说明发生了什么。
方法:作为请求报文的起始行开始,用来告知服务器要做些什么。
- GET:请求服务器发送某个资源
- HEAD:与GET类似,但响应中只返回首部
- PUT:向服务器写入文档
- POST:向表单输入数据
- TRACE:由服务器返回一条响应携带收到的请求报文,用于查看原始报文是否被修改
- OPTIONS:请求服务器告知其支持的功能
- DELETE:删除指定资源
- 扩展方法:没有在HTTP/1.1规范中定义的方法,如:COPY,LOCK等
状态码:状态码分为五大类:
- 100~199:信息性状态码
- 100 Continue:已收到请求的初始部分,请客户端继续
- 101 Switching Protocaols:正在切换指定的协议
- 200~299:成功状态码
- 200 OK:已返回请求的资源
- 201 Created:已创建请求的对象
- 202 Accepted:已接收请求但还未执行动作
- 203 Non-Authoritative Information:实体首部包含的信息不是来自于源端服务器而是来自资源的一份副本
- 204 No Content:响应中包含首部和状态行但没有主体部分
- 205 Reset Content:告知浏览器清除页面内所有HTML表单元素
- 206 Partial Content:成功执行了部分或范围请求
- 300~399:重定向状态码
- 300 Multiple Choices:客户端请求一个指向多个资源的URL时返回
- 301 Moved Permanently:请求的URL已被移除使用,响应的Location首部包含资源现在所处URL
- 302 Found:同301,但将来的请求仍应使用旧的URL
- 303 See Other:告知客户端应该用另一个URL获取资源
- 304 Not Modified:最近资源未被修改
- 305 Use Proxy:必须通过代理访问资源
- 306 未使用
- 307 Temporary Redirect:同302
- 400~499:客户端错误状态码
- 400 Bad Request:告知客户端发送了错误的请求
- 401 Unauthorized:请求客户端对自己进行认证
- 402 Payment Required:未使用,保留
- 403 Forbidden:请求被服务器拒绝
- 404 Not Found:无法找到请求的URL
- 405 Method Not Allowed:请求中含有所请求的URL不支持的方法
- 406 Not Acceptable:服务器没有与客户端可接受的URL相匹配的资源
- 407 Proxy Authentication:同401,但用于要求对资源进行认证的代理服务器
- 408 Request Timeout:客户端完成请求所花的时间过长
- 409 Conflict:请求可能在资源上引发冲突
- 410 Gone:同404,但曾经拥有资源
- 411 Length Required:要求再请求报文中包含Content-Length首部
- 412 Precondition Failed:客户端发起的条件请求失败
- 413 Request Entity Too Large:客户端发送的实体主体部分比服务器希望处理的更大
- 414 Request URI Too Long:请求的URL比服务器希望处理的更长
- 415 Unsupported Media Type:服务器无法理解或支持客户端发送的实体的内容类型
- 416 Requested Range Not Satisfiable:请求报文中请求的指定资源的范围无效
- 417 Expectation Failed:请求中包含的期望服务器无法满足
- 500~599:服务器错误状态码
- 500 Internal Server Error:服务器遇到了妨碍它提供服务的错误
- 501 Not Implemented:客户端的请求超出服务器的能力范围
- 502 Bad Gateway:代理或网关服务器从请求响应链的下一条链路上收到了伪响应
- 503 Service Unavailable:服务器现在无法为请求提供服务
- 504 Gateway Timeout:同408,但来自网关或代理
- 505 HTTP Version Not Supported:服务器收到了不支持的协议版本的请求
首部:首部分为五大类:
- 通用首部,客户端和服务器都能使用,如:Date: Tue, 3 Oct 1974 02:16:00 GMT
- 请求首部,请求报文特有,如:Accept: */*
- 响应首部,响应报文特有,如:Server: Tiki-Hut/1.0
- 实体首部,用于应对实体主体部分,如:Content-Type: test/html; charset=iso-latin-1
- 扩展首部,非标准首部,由应用程序开发者创建