HTTP报文格式
请求报文
1 | <method> <url> <version> 都由空格分隔 |
- 请求行:包含请求方法、URI、HTTP版本信息
<方法> <空格> <URI> <空格> <HTTP版本>
- 请求头
<字段名>:<字段值>
可以有零个或多个请求头,请求头是以一个空行结束的 - 请求内容实体
请求方法
GET
GET请求被认为是安全的,不会在服务器上产生什么结果,只是获取数据
HEAD
HEAD与GET类似,但是服务器在响应中只返回响应头,不会返回响应体,其有如下作用
- 在不获取资源的情况下了解资源的情况
- 通过查看响应中的状态码,查看某个对象是否存在
- 通过查看响应头,查看资源是否被修改了
PUT
PUT方法会向服务器写入文档
POST
POST通常用来支持表单提交
TRACE
TRACE会在目的服务器端发起一个环回诊断,服务器会返回一条TRACE响应,并在响应体中携带收到的原始请求报文,这样客户端就可以查看在中间的HTTP应用程序组成的请求响应链上原始报文是否被修改过
OPTIONS
OPTIONS可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法
DELETE
DELETE删除服务器指定的资源
GET和POST的区别
一般用的多的还是GET和POST请求,这两者有什么区别呢?
- GET请求是将请求参数拼接在URL后,并使用?分隔URL和参数,参数之间使用&相连;POST则是将数据放在请求体中
- GET请求提交的数据最多只能是1024字节(这个是因为浏览器限制了URL长度的限制);而POST请求没有限制
响应报文
1 | <version> <status> <reason-phrase> 都由空格分隔 |
- 状态行:包含HTTP版本、状态码、状态码的原因短语
<HTTP版本> <空格> <状态码> <空格> <响应短语>
- 响应头
<字段名>:<字段值>
- 响应内容实体
http首部
分为四种类型,通用首部字段(请求和响应报文中都会使用的首部)、请求首部字段、响应首部字段、实体首部字段(针对请求报文和响应报文的实体部分使用的首部,补充了资源内容的更新时间等与实体有关的信息)
通用首部字段
Date
:创建报文时间Connection
:连接的管理,是否可以处理接收HTTP连接,keep-Alive表示使用了长连接比起短连接,长连接更节省资源。长连接只在首次创建时或者链路断连重连时才创建链路,链路创建成功后通过业务消息和心跳维系链路,实现多消息复用同一个链路节省资源
Cache-Control
:缓存的控制,private缓存是私有的,仅向特定用户提供相应的缓存信息;public是公有的,可向任意方提供相应的缓存信息。除此之外还有其他参数,有以下几个选项- no-cache : 如果是客户端,说明客户端不会接收缓存过的响应,要请求最新的内容;如果是服务端,则表示服务器不能对相应的资源进行缓存
- no-store : 不缓存请求或响应的任何内容
- max-age : 该参数后跟相应的秒数,在请求头中表示如果缓存时间没有超过这个值就从缓存中取;在响应头中表示资源在缓存中缓存的最大时间。max-age=10
- only-if-cached : 表示客户端仅请求缓存服务器上的内容,如果缓存服务器没有,则返回504
- no-transform : 无论请求还是响应,都不能在传输过程中改变报文体的媒体类型
Transfer-Encoding
:报文主体的传输编码方式Via
: 用于追踪请求和响应报文的传输路径,报文经过代理或者网关时会在Via字段中添加该服务器的信息,然后在进行转发Pragma
:报文指令Trailer
:报文末端的首部一览Upgrade
: 升级为其他协议Warning
:错误通知
请求首部字段
Accept
:可处理的媒体类型Accept-Charset
:可接收的字符集Accept-Encoding
:可接受的内容编码Accept-Language
:可接受的自然语言Authorization
:用于访问受密码保护的网页时别自己的身份Expect
: 期待服务器的特性行为From
: 用户的电子邮箱地址Host
:请求资源所在服务器If-Modified-Since
:后跟日期,只有当页面在指定日期已更改时,客户端想要的页面如果没有新的结果可以使用,服务器会返回304If-Unmodified-Since
:只有早于指定日期,才会成功If-Match
If-None-Match
: 后跟字符串,与字符串进行匹配的是ETag,If-Match的请求是如果后方的字符串与ETag相等则服务器进行请求,否则不进行处理Referer
: 所指向的web页面的url,请求中URI的原始获取方User-Agent
: 会将请求方的浏览器和用户代理名称等信息发送到服务端,用于识别不同的浏览器Max-Forwards
:最大传输逐跳数Proxy-Authorization
:代理服务器要求客户端的认证信息Range
: 实体的字节范围请求TE
: 传输编码的优先级
响应首部字段
Accept-Ranges
:可接受的字节范围Location
:令客户端重新定向到的URIAge
: 资源创建经过时间Server
:HTTP服务器的安装信息Proxy-Authenticate
: 代理服务器对客户端的认证信息Retry-After
: 对再次发起请求的时机要求Keep-Alive
:保持连接的时间,如Keep-Alive: timeout=5,max=120ETag
: 是服务器当前请求的服务器资源所对应的独有字符串,不同资源间的ETag不同,当资源更新时ETag也会更新Vary
:代理服务器缓存的管理信息WWW-Authenticate
:服务器对客户端的认证信息
实体首部字段
Allow
:资源可支持的HTTP方法(如GET、POST等)Content-Type
:实体主类的类型Content-Encoding
:实体主体适用的编码方式Content-Language
:实体主体的自然语言Content-Length
:适用于Post请求,实体主体的的字节数Content-Range
:实体主体的位置范围,一般用于发出部分请求时使用Content-Location
:替代对应资源的URIContent-MD5
:实体主体的报文摘要Expires
:实体主体过期的日期时间Last-Modified
:资源的最后修改日期时间