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协议这样,直接将字符编码,人类可以直接读懂。
举个简单的请求报文和响应报文的格式的例子:
实际上,请求报文也是可以有body(主体)部分的。请求报文是由请求行(request line)、请求头部(header)、空行、请求数据
四个部分组成。唯一要注意的一点就是,请求报文即使body部分是空的,请求头部后的回车换行
符也是必须要有的。
响应报文的格式和请求报文的格式类似:
请求报文、响应报文的起始行和响应头部里的字段都是文本化、结构化的。而请求body却可以包含任意二进制数据(如图片、视频、软件等),当然也可以包含文本。
有些首部是通用的,有些则是请求或者响应报文才会有的。