组成

HTTP报文由三部分组成:

  1. 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况
  2. 报文头:起始行后面有零个或多个字段。每个字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔,首部以一个空行结束
  3. 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体是要发送给服务器的数据;响应主体是要返回给客户端的数据。起始行和报文都是文本且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频)。当然,主体中也可以包含文本。

请求报文

一个请求报文起始行的例子:

1
GET /dir/index.html HTTP/1.1
  • GET:这里指明请求方法是GET,还有其它方法比如POST、DELETE、HEAD、OPTIONS、PUT、TRACE
  • /dir/index.html:这里指明URL,它和报文头的Host属性组成完整的请求URL
  • HTTP/1.1:这里指明协议名称及版本号

报文头里有很多的字段,具几个常见的例子:

  • Host:请求的服务器地址,比如www.google.com
  • Accept: 指明客户端可以接受的数据类型,比如text/html
  • Cookie:携带的Cookie信息
  • Cache-Control:对缓存进行控制,指明一个请求希望响应返回的内容在客户端要被缓存多久或是否缓存

还有非常多的字段,可以查阅文档,例如 [HTTP MDN][1]

最后举一个请求主体的例子:

1
name=ning&age=24

这里的请求主体就是我们提交的表单里的数据。

响应报文

一个响应报文起始行的例子:

1
HTTP/1.1 200 OK

跟请求报文比,响应报文的起始行里多了一个状态码来告诉客户端本次请求的处理结果。以下是状态码的类型:

状态码类型

例如:

200 OK

303 See Other

304 Not Modified

404 Not Found

500 Internal Server Error

关于响应报文头里面的各种字段,可以查阅文档 HTTP MDN

总结

这些就是关于HTTP报文的基本知识点,其实内容最多地方是报文头里各种字段的用法,比如很多字段是用来做浏览器缓存控制的。因为涉及字段的内容太多了,更具体的字段用法可以查阅文档 HTTP MDN