HTTP Header

HTTP Header是关于正在发送的消息的可选元信息。这些信息还可能包含有关发送者的特定详细信息。

请求和响应都可以包含HTTP Header。

一个HTTP Header可以包含多个键值对。每个键和值之间用冒号:分割。每对都独立成行。

下面是一个典型的浏览器发送的请求头:

1
2
3
4
5
connection=keep-alive
accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp ....
user-agent:Mozilla/5.0 (Windows NT 6.3; WOW64) ...
accept-encoding:gzip, deflate, sdch
accept-language:en-US,en;q=0.8

下面是一个典型的服务器返回的响应头:

1
2
3
4
Content-Length:492
Content-Type:text/html;charset=ISO-8859-1
Date:Wed, 17 Feb 2016 19:57:04 GMT
Server:Apache-Coyote/1.1

常用的标准请求头

Accept

客户端可以接受的媒体类型,如:Accept: text/html

Accept-Charset

客户端可接受的字符集。如:Accept-Charset: utf-8

Accept-Encoding

客户端可接受的编码列表(将消息转换为编码形式)。如:Accept-Encoding: gzip, deflate

Accept-Language

客户端可接受的语言列表。如:Accept-Language: en-US,en;q=0.8

Connection

Connection字段允许发送者指定该特定连接所需的选项。当我们使用“Connection: keep-alive”发出请求时,对服务器的后续请求将使用相同的TCP连接。这称为HTTP持久连接或长连接。Apache httpd 2.2及以上版本的默认连接超时为5秒。“Connection: close”表示一旦发出请求,服务器就需要关闭连接。因此,对于每个请求,将建立新的TCP连接。如:Connection: keep-alive

User-Agent

这包含提供有关系统和发出请求的浏览器/应用程序的特定详细信息的标记。

如:user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3704.3 Safari/537.36

From

发出请求的用户的电子邮件地址。如:user@example.com

Authorization

HTTP身份验证的身份验证凭据。如:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

If-Modified-Since

如果这个字段指定的时间内,未修改请求内容,服务器将返回304(未修改)的响应,而不返回任何消息体。如:If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

常用的标准响应头

Cache-Control

此标头指示浏览器是否可以缓存资源。包含如下一些值:

"no-cache", "max-age=<number of seconds>", "no-store", "must-revalidate" ", "only-if-cached"。如:Cache-Control: max-age=3600

Content-Encoding

响应体的编码类型。如:Content-Encoding: gzip

Content-Length

响应体的长度,以字节为单位。如:Content-Length: 348

Content-Type

响应体的MIME类型。如:Content-Type:text/html;charset=ISO-8859-1

Content-Location

它可用于为响应中包含的实体提供资源位置,当它可以从备用位置访问时,与请求的资源的URI分开。当请求的资源具有多个可用表示时,也可以使用它。如:多语言。如:Content-Location: /data.json

Date

响应被发送的日期时间。如:Date:Wed, 17 Feb 2016 19:57:04 GMT

Last-Modified

请求资产最后一次修改的时间。如:Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

Location

用于重定向,或者在创建新资源时使用。如:Location: http://www.example.com/newPage.html

Pragma

可能包含特定实现的字段。例如,’no-cache’ 用于 HTTP/1.0 实现以防止客户端上的缓存。

如:Pragma: no-cache

Retry-After

如果实体暂时不可用,则此指令会告知客户端稍后再试。

如:Retry-After: 120 又如 Retry-After: Fri, 07 Nov 2014 23:59:59 GMT

Server

服务器的名称以及其他详细信息。如:Server:Apache-Coyote/1.1

Set-Cookie

服务器发送Set-Cookie标头以在用户的系统上创建cookie。

如:Set-Cookie: UserID=joe; last-visited=2016-02-14

Allow

Allow头字段列出Request-URI标识的资源支持的方法集。如:Allow: GET, HEAD

WWW-Authenticate

如果HTTP请求缺少凭据,服务器可以回复401(未授权)状态代码和WWW-Authenticate头字段。

WWW-Authenticate头字段指示适用于目标资源的认证方案和参数。

如:WW-Authenticate: Basic realm="Some value"

其中 realm 值用于对资源进行分组。该组中的所有页面将共享相同的身份验证凭据。

在HTTP请求中发送自定义标头

HTTP请求还可以包括自定义标头。

这不可能使用HTML超链接或通过提交。

我们可以使用Ajax的XMLHttpRequest对象来设置自定义标头。

1
xmlhttp.setRequestHeader("myCustomHeader", headerValue);

或者我们也可以使用JQuery:

1
2
3
4
5
6
7
$.ajax({
....
beforeSend: function(xhr){
xhr.setRequestHeader("myCustomHeader", headerValue);
}
..
});

或者使用任意的 http client。例如在Java中,我们可以使用java.net.HttpURLConnection发送标准或者自定义的请求头:

1
2
3
4
URL obj = new URL(theUrl);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
//adding header
con.setRequestProperty("myCustomHeader", headerValue);
0%