这是我阅读《HTTP权威指南》的总结和思考中,一系列文章的一篇,目录在这里
组成
HTTP报文分为两种:请求报文(request message)和响应报文(response message)
每一个报文都有三部分组成:
- 起始行(start line)
- 首部(header),键值对,每一对占一行,最后由一个空行结束(无论有无body部分)
- 主体(body)
|
|
起始行
方法(Method)
方法包含GET, HEAD(这2个被认为是安全方法,即不对服务器产生副作用。同时也是HTTP1.1必须实现的两个方法), PUT, POST, TRACE, OPTIONS, DELETE以及扩展方法
GET
用于请求服务器中的某个资源,HTTP/1.1中强制要求实现的方法
HEAD
与GET方法类似,返回一个只有首部没有主体的响应报文,首部应该与GET返回的一致。HTTP/1.1强制要求实现
主要用于: 判断资源类型Content-Type
、大小Context-Length
等
PUT
PUT命令让服务器在<request-URL>
指定的路径创建/更新报文实体的内容,通常操作前需要密码认证
服务器如果操作成功,将返回 201 Created
POST
用于向服务器发送数据,与PUT的不同在于PUT是直接在服务器的文件上存储数据。
POST也被用来发送表单数据
TRACE
一个报文可能经过防火墙、代理、网关或其他应用,TRACE允许客户端查看最终服务器收到的报文,检查是否有修改/损坏
服务器在TRACE响应报文的主体部分携带了他收到的请求,客户端可以对比响应主体中的报文来和自己发出的报文对比
OPTIONS
查询服务器支持的方法(Method), 返回在Header里,例如 Allow: GET, POST, PUT
。
在跨域CORS中具有应用
DELETE
删除指定URL处的资源,但是服务器有可能并没有删除该资源(依然返回200 OK)
扩展方法
HTTP允许扩展方法,即规范中没有写,开发者自定义的方法
状态码
信息性状态码(100-101)
如果客户端要向服务器发送一个大的实体前,发送一个带有头Expect: 100 Continue
的报文,在收到100或者一定时间以后直接发送实体
成功状态码(200-206)
不同的响应状态码对应不同请求方法(PUT,GET)的回应
重定向状态码(300-307)
对于一个移走的资源,返回30x(如301永久移走),可以附带一个可选的Location:URL
头部,浏览器将自动再发送一个到该URL的请求,在使用者未注意到的情况下转入新位置
客户端可以发送一个特殊的If-Modified-Since: Date
首部,如果未更改过,浏览器返回304,客户端直接使用本地副本
客户端错误代码(400-417)
请求出现错误,比如请求一个不存在的URL(404),权限不足,格式错误的报文等
服务器错误码(500-505)
服务器自身出现了错误,比如某个子元素,网关资源出错等
首部
通用首部
提供了基本信息和缓存控制策略,请求和响应都可以使用
请求首部
包括客户端信息类首部,Accept首部,条件请求首部,安全请求首部(包括Cookie)与代理请求首部
响应首部
包括响应信息(时间,服务器版本)首部,协商首部,安全响应首部(Cookie)
实体首部
信息首部(Allow和Location等),内容首部(Content-Type,Length等),缓存首部(ETag、Expires、Last-Modified)