0%

HTTP报文格式

HTTP报文格式

请求报文

1
2
3
4
<method> <url> <version>  都由空格分隔
<headers>

<requestbody>
  • 请求行:包含请求方法、URI、HTTP版本信息 <方法> <空格> <URI> <空格> <HTTP版本>
  • 请求头 <字段名>:<字段值> 可以有零个或多个请求头,请求头是以一个空行结束的
  • 请求内容实体

请求方法

GET

GET请求被认为是安全的,不会在服务器上产生什么结果,只是获取数据

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
2
3
4
<version> <status> <reason-phrase> 都由空格分隔
<headers>

<responsebody>
  • 状态行:包含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:后跟日期,只有当页面在指定日期已更改时,客户端想要的页面如果没有新的结果可以使用,服务器会返回304
  • If-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:令客户端重新定向到的URI
  • Age : 资源创建经过时间
  • Server:HTTP服务器的安装信息
  • Proxy-Authenticate : 代理服务器对客户端的认证信息
  • Retry-After : 对再次发起请求的时机要求
  • Keep-Alive:保持连接的时间,如Keep-Alive: timeout=5,max=120
  • ETag : 是服务器当前请求的服务器资源所对应的独有字符串,不同资源间的ETag不同,当资源更新时ETag也会更新
  • Vary:代理服务器缓存的管理信息
  • WWW-Authenticate :服务器对客户端的认证信息

实体首部字段

  • Allow:资源可支持的HTTP方法(如GET、POST等)
  • Content-Type:实体主类的类型
  • Content-Encoding:实体主体适用的编码方式
  • Content-Language:实体主体的自然语言
  • Content-Length:适用于Post请求,实体主体的的字节数
  • Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
  • Content-Location :替代对应资源的URI
  • Content-MD5:实体主体的报文摘要
  • Expires:实体主体过期的日期时间
  • Last-Modified:资源的最后修改日期时间

欢迎关注我的其它发布渠道