http报文 - xiaofuzi/Continue GitHub Wiki

如果说http是因特网的信使,那么http报文就是它用来搬东西的包裹了。报文分为两类,请求报文和响应报文 。请求报文会向web服务器请求一个动作。响应报文会将请求的结果返回给客户端。

  • 报文是如何流动的
  • http报文的三个组成部分(起始行、首部和实体的主体部分)
  • 请求和响应报文之间的区别
  • 请求报文支持的各种方法
  • http状态码
  • 各种各样的http首部都是用来做什么的

报文的组成部分

  • 起始行
  • 首部
  • 数据主体

起始行

所有的http报文都以一个起始行作为开始。请求报文的起始行说明了要做些什么。响应报文的 起始行说明发生了什么。 请求报文的起始行或称为请求行,包含了一个方法和一个请求url以及http的版本。 响应报文的起始行或称为响应行包含了响应报文使用的http版本、数字状态码以及描述操作 状态的文本形式的原因短语。

方法

常用的http方法:

  • get:从服务器获取一份文档,不包含主体
  • head: 只从服务器获取文档的首部,不包含主体
  • post: 向服务器发送需要处理的数据,包含主体
  • put: 将请求的主体部分存储在服务器上,包含主体
  • trace: 对可能经过代理服务器传送到服务器上的报文进行追踪
  • options: 决定可在在服务器上执行哪些方法
  • delete: 从服务器上删除一份文档

除了以上方法,服务器可能还会实现一些自己的请求方法,是对http规范的扩展。

状态码

方法用来告诉服务器做什么,状态码则告诉客户端发生了什么。

首部

  • 通用首部 客户端和服务端都可以使用,如Date。
    • connection:客户端和服务器可以指定与请求/响应连接有关的选项。
    • MIME-Version:给出了发送端使用的MIME版本
    • Transfer-Encoding: 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式。
    • Cache-Control
    • Pragma
  • 请求首部 为服务器提供了一些额外信息,如客户端希望接收什么类型的数据。
    • 条件请求首部
      • Expect: 客户端可列出某请求所要求的服务器行为
      • If-Match: 如果实体标记与文档当前的实体标记相匹配,就获取这份文档。
      • If-Modified-Since: 除非在某个指定的日期之后资源被修改过,否则就限制这个请求。
  • 响应首部
  • 实体首部 可以用实体首部来说明实体主体部分的数据类型。
  • 扩展首部

实体的主体部分

实体即http所要传输的内容。

状态码详细说明

  • 信息性状态码

    • 100: Continue。说明收到了请求的初始部分,请客户端继续,发送了这个状态码后,服务器 在收到请求之后必须进行响应。
    • 101:Switching Protocols。 说明服务器正在根据客户端的指定,将协议切换成update首部 所列的协议。
  • 成功状态码

    • 200: ok
    • 201: Created
    • 202: Accepted。请求已被接受,但服务器还未对其执行任何动作。
    • 203: Non-Authoritative Infomation。实体首部包含的信息不是来自源端服务器,而是来自 资源的一份副本。
    • 204:No Content。响应报文中包含若干首部和一个状态行,但没有实体的主体部分。
    • 205: Reset Content。
    • 206: Partial Content。成功执行一部分请求。
  • 重定向状态码

    • 300:Mutiple Choices.
    • 301: Moved Permanently。在请求的url已被移除时使用。响应的Location首部中应该包含资源 现在所处的url.
    • 302:Found。与301状态码类似,但是客户端应该使用Location首部给出的url来临时定位资源。将来的请求还使用老的url.
    • 303:See Other。告知客户端应该用另一个url来获取资源。新的url位于响应报文的location首部。
    • 304:Not Modified。客户端可以通过所包含的请求首部,使其请求变成有条件的。
  • 客户端错误状态码

    • 400:Bad Request.用于告诉客户端它发送了一个错误的请求。
    • 401: Unauthorized.
    • 402: 未使用
    • 403: Forbidden.请求被服务器拒绝。
    • 404: Not Found.
    • 405: Method Not Allowed.
    • 406: Not Acceptable.
    • 407: Proxy Authentication Required。认证代理服务器。
    • 408: request timeout.
    • 409: Conflict
    • 410:Gone.
    • 413: Request Entity Too Large。客户端发送的实体主体部分比服务器能够或者希望处理的要大时使用。
    • 414: Request url too long
  • 服务器错误状态码

    • 500:Internval Server Error
    • 501: Not Implemented.
    • 502: Bad Gateway
    • 503: Service Unavailable
    • 504: Gateway Timeout
    • 505: http version not supported.