什么是header
HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。对于客户端用户来说,这些信息中的大部分内容都无须亲自查看。
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
header类型
根据不同上下文,可将消息头分为:
-
Request headers: 从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
Accept:用户代理可处理的媒体类型
Accept-Charset:优先的字符集
Accept-Encoding:优先的内容编码
Accept-Language:优先的语言
Host:请求资源所在服务器
User-Agent:HTTP客户端的信息
以Accept来讲:
Accept: text/plain;q=0.3,text/html
Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用type/subtype这种形式,一次指定多种媒体类型。q代表的是权重值。
下面是一些常用的媒体类型的例子:
当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。
-
Response headers: 从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
Accept-Ranges:是否接受字节范围要求
Age:推算资源创建经过时间
Etag:资源的匹配信息
Location:令客户端重定向值指定URI
- Entity headers: 包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型。
Allow:资源可支持的HTTP方法
Content-Encoding:实体主体使用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的大小(单位:字节)
Content-Type:实体主体的媒体类型
//例子
Content-type:application/json
Content-Type:text/plain;charset=utf-8
- General headers: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。
Cache-Control:控制缓存行为
Connection:逐跳首部,链接的管理
Date:创建报文的日期
Warning:错误通知,通常会告知用户一些与缓存相关的问题的警告
如何设置header
客户端
在发送Ajax
请求(实质是一个HTTP请求)时,我们可能需要设置上述一些请求头部信息,比如content-type
、connection
、cookie
、accept-xxx
等。xhr
提供了setRequestHeader
来允许我们修改请求 header。
xhr.setRequestHeader(header, value);
方法的第一个参数 header 大小写不敏感,即可以写成
content-type
,也可以写成Content-Type
,甚至写成content-Type
;Content-Type
的默认值与具体发送的数据类型有关(详情)。setRequestHeader
必须在open()
方法之后,send()
方法之前调用,否则会抛错;
需要注意的是,安全起见,有些请求头的值只能由user agent设置:forbidden header names和forbidden response header names.
服务器端
以Node.js为例
response.writeHead(状态码,{header键值对});
response.setHeader(header键值对);