Home » http » http header for dummies
http header for dummies

由于最近工作有个功能是要到处excel给用户下载, 所以要用到Content-Disposition, 所以想顺便把http header里面常用的几个总结一下.

HTTP的headers是HTTP requests和responses的核心部分, 它携带了包括客户端浏览器的信息和请求的页面内容以及server部分信息的内容.能够通过HTTP的HEAD方法直接拿到.

对于HTTP Request而言, 它的结构第一行称为request line, 它包括HTTP方法, 请求路径以及协议三个部分.

对于HTTP Response而言, 它的结构第一行称为status line, 它包括协议和返回码两部分.

状态码大致可分为:

具体的内容可以点击这里

其他的部分以键值对的形式存在每一行中.

HTTP Request

Host

HTTP请求必须发送给一个确定的IP地址, 但是由于大多数的服务器是可以host多个服务用同一个IP的, 所以HTTP请求必须清楚指明具体的域名.

Host: wlwang41.github.io

User-Agent

这个头可以包括以下信息:

这个可以用来判断用户使用的环境是手机还是PC, 然后呈现不同的页面.

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)

Accept-Language

这个头信息表明了用户的语言环境.

可以是多个语言环境, 用逗号隔开. 第一个语言为主要的偏好语言, q则表明了用户使用该语言的偏好(0, 1之间)

Accept-Encoding

这个头信息表示浏览器能接受的压缩格式.

大多数的现代浏览器都支持gzip压缩, 所以一般这个字段都会有gzip. 这样webserver就能返回一个压缩后的数据, 节省带宽和请求时间.

Accept-Encoding: gzip,deflate

If-Modified-Since

浏览器可以通过这个字段来判断已经被cache的文档是否被修改过, 如果没有被修改过, 那么服务器将会返回"304 Not Modified", 并且没有内容, 浏览器就会读入缓存的数据. 但是这个还是会有一次HTTP请求.

If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

以键值对的形式被服务器种在浏览器上.

Referer

表明这个文档的来源, 比如在wlwang41.github.io里面点击了一个a标签, 跳到了另一个页面, 那么新打开的页面中的header中的Referer字段就应该为wlwang41.github.io.

referer实际上是拼错了, 正确的应该是referrer.

Authorization

当一个页面需要认证的时候, 浏览器将会打开一个窗口让用户输入用户名密码, 然后浏览器将会再发一个HTTP请求, 这一次将会带上这个头部信息.

Authorization: Basic bXl1c2VyOm15cGFzcw==

这个数据是被base64编码过的.

HTTP Response

Cache-Control

浏览器的cache策略. 如:

Cache-Control: max-age=3600, public

"public"指的是任何人都可以缓存这个数据, "max-age"表明具体缓存的过期时间.

如果不希望有缓存则可以使用"no-cache"字段. 如:

Cache-Control: no-cache

Content-Type

这个字段表明返回文档的"mime-type", 浏览器将会根据这个类型来决定如何展示这个文档.比如:

Content-Type: text/html; charset=UTF-8

其他的mime-type可以点击这里.

Content-Disposition

这个字段就表明浏览器不应该解析数据还是应该弹出下载框. 比如(合适的数据类型也应该告诉浏览器):

Content-Type: application/zip
Content-Disposition: attachment; filename="download.zip"

Content-Length

文档的大小. 比如:

Content-Length: 89123

下载的时候很好用, 可以用来指定进度条的进度.

Etag

Etag也是与缓存策略相关的. 比如:

Etag: "pub1259380237;gz"

web server可以每次返回都会带上这个头信息. 它的值可以使基于最近修改时间, 文件大小或者文件的校验码的值. 浏览器将会保存这个值, 当下一次请求这个文件时, 它将被作为头的一部分发送过去:

If-None-Match: "pub1259380237;gz"

如果Etag的值匹配, 那么服务器将返回304并且没有具体的内容, 这样浏览器就能用缓存的值.

Last-Modified

这个字段表明服务器最近的修改时间, 如:

Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT

浏览器通过发送If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT来判断缓存是否过期.

Location

需要跳转的地址. 如:

HTTP/1.x 301 Moved Permanently
...
Location: http://wlwang41.github.io/
...

Content-Encoding

表明返回的数据的压缩格式, 如:

Content-Encoding: gzip

参考文章: HTTP Headers for Dummies