HTTP头字段(英语:HTTP header fields)是指在超文本传输协议(HTTP)的请求和响应消息中的消息头部分。它们定义了一个超文本传输协议事务中的操作参数。HTTP头部字段可以自己根据需要定义,因此可能在 Web 服务器和浏览器上发现非标准的头字段。

格式

  • 通常HTTP消息包括客户机向服务器的请求消息和服务 器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。
  • 每个头域由一个域名,冒号(:)和域值三部分组成。
  • 域名是大小写无关的
  • 域值前可以添加任何数量的空格符
  • 头域可以被扩展为 多行,在每行开始处,使用至少一个空格或制表符。

    类型

    HTTP 头字段根据实际用途被分为以下 4 种类型:

  • 通用头字段(英语:General Header Fields)

  • 请求头字段(英语:Request Header Fields)
  • 响应头字段(英语:Response Header Fields)
  • 实体头字段(英语:Entity Header Fields)

    大小限制

    标准中没有对每个协议头字段的名称和值的大小设置任何限制,也没有限制字段的个数。然而,出于实际场景及安全性的考虑,大部分的服务器、客户端和代理软件都会实施一些限制。例如,Apache 2.3服务器在默认情况下限制每个字段的大小不得超过8190字节,同时,单个请求中最多有100个头字段

    报文格式

    HTTP报文实际上是由一行行的字符串组成的,每行字符串的末尾用\r\n分隔,人类可以很方便的阅读。顺便说一句,不是所有的协议都对人类这么友好的,像thrift协议,直接甩一堆字节给你,告诉你说0x0001表示调用方法,诸如此类的,你只能对着一个十六进制的数据块一个个地去“解码”。不可能像HTTP协议这样,直接将字符编码,人类可以直接读懂。
    举个简单的请求报文和响应报文的格式的例子:

HTTP headers - 图1

实际上,请求报文也是可以有body(主体)部分的。请求报文是由请求行(request line)、请求头部(header)、空行、请求数据四个部分组成。唯一要注意的一点就是,请求报文即使body部分是空的,请求头部后的回车换行符也是必须要有的。

HTTP headers - 图2

响应报文的格式和请求报文的格式类似:

HTTP headers - 图3

请求报文、响应报文的起始行和响应头部里的字段都是文本化、结构化的。而请求body却可以包含任意二进制数据(如图片、视频、软件等),当然也可以包含文本。
有些首部是通用的,有些则是请求或者响应报文才会有的。

HTTP headers - 图4image.gif
HTTP headers - 图6image.gif
HTTP headers - 图8image.gif