1、什么是 HTTP 请求头/响应头

  1. 请求头

当你使用http(https)协议请求一个网站的时候,你的浏览器会向对方的服务器发送一个http请求,这个请求同样包含三个部分

  • 请求方法 请求路径(URL) 请求协议版本
    • 说一下http请求头响应头_缓存

       

       

  • 报文主体
  • (POST/GET)参数

说一下http请求头响应头_服务器_02这里是一个请求头的示例

这些讯息里面包含了你的请求方法,你请求的目的地,你的语言,以及你的浏览器的各种信息,这样对方的服务器就能靠着辨识这些讯息来辨识你的浏览器

2. 响应头

当你向对方发送请求后,对方会回应你浏览器的请求,返回两个部分:响应头,Body

  • 注:Body就是返回给你的主体,比如说请求网站返回的html

响应头讯息里包含了服务器的响应讯息,如http版本,压缩方式,响应文件类型,文件编码等

说一下http请求头响应头_响应头_03响应头示例

2、HTTP 请求头/响应头的详细介绍

请求头

Accept: text/html,p_w_picpath/*    浏览器通过这个头,告诉服务器它所支持的数据类型
Accept-Charset: 浏览器通过这个头,告诉服务器它采用的字符集
Accept-Encoding:浏览器通过这个头,告诉服务器,它所支持的压缩格式
Accept-Language:浏览器通过这个头,告诉服务器,它所采用的语言
Host:浏览器通过这个头,告诉服务器,我想访问服务器哪台主机
If-Modified-Since:浏览器通过这个头,告诉服务器,它缓存数据时间是多少。
Referer:浏览器通过这个头,告诉服务器,我是从哪个网页点过来的(防盗链)
User-Agent: 浏览器通过这个头,告诉服务器,当前浏览器操作系统的信息,以及浏览器的版本号
Connection : 表示是否需要持久连接。如果web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点, web服务器需要在返回给客户端HTTP头信息中发送一个Content-Length(返回信息正文的长度)头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然 后在正式写出内容之前计算它的大小。

Connec-Length : 请求头的长度。

Connect-Type : 显示此HTTP请求提交的内容类型。一般只有post提交时才需要设置该属性。

有关Content-Type属性值可以如下两种编码类型:

1. “application/x-www-form-urlencoded”: 表单数据向服务器提交时所采用的编码类型,默认的缺省值就是“application/x-www-form-urlencoded”。
然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。

2. “multipart/form-data”: 在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。

当提交为单单数据时,可以使用“application/x-www-form-urlencoded”;当提交的是文件时,就需要使用“multipart/form-data”编码类型。

在Content-Type属性当中还是指定提交内容的charset字符编码。一般不进行设置,它只是告诉web服务器post提交的数据采用的何种字符编码。

cookie : 浏览器端cookie。

Hose : 客户端地址

Origin : 目标地址

x-Requested-With : 是否为同步请求 ,如果为XMLHttpRequest,则为 Ajax 异步请求。如果为null则为传统同步请求

  

响应头

Location:这个头通常配合302状态码使用,它用于告诉浏览器你去找谁。
Server:告诉浏览器,服务器的类型
Content-Encoding: 服务器通过这个头,告诉浏览器,回送的数据采用的压缩格式。
Content-Length: 80  
Content-Language: zh-cn  
Content-Type:这个头用于告诉浏览器,回送数据的类型
Last-Modified:这个头用于告诉浏览器,数据的最后修改时间
Refresh: :这个头用于控制浏览器定时刷新
Content-Disposition: 用于通知浏览器,以下载方式打开回送的数据
Transfer-Encoding: 用于通知浏览器,数据是以分块形式回送的
ETag: 缓存相头的头
Expires: 用于说明网页的失效时间,如果该值为一个<0的值,则服务器是通知浏览器不要缓存
Cache-Control: no-cache  通知浏览器不要缓存
Refresh: 1;url=http://www.it315.org    隔多少秒以后,让当前页面去访问哪个地址(例如网页登陆成功后,跳回原来的界面,就是用的这个头)
Content-Disposition: attachment;filename=aaa.zip   和下载相关,通知浏览器以附件的形式下载服务器发送过去的数据
Transfer-Encoding: chunked  数据传输模式
Set-Cookie:SS=Q0=5Lb_nQ; path=/search     和cookie相关的头
ETag: W/"83794-1208174400000"       和cookie相关的头
Expires: -1        通知浏览器是否缓存当前资源:如果这个头的值是一个以毫秒为单位值,则通知浏览器缓存资源到指定的时间点;如果值是0或-1,则通知浏览器禁止缓存
Cache-Control: no-cache   通知浏览器是否缓存资源
Pragma: no-cache         -- 通知浏览器是否缓存资源
Connection: close/Keep-Alive   是否继续保持连接
Date: Tue, 11 Jul 2000 18:23:51 GMT    当前响应的时间

 参考:http://tools.jb51.net/table/http_header

3、HTTP请求头/响应头可以拿来干什么

能干的事情很多,下面就简单列出几个

  • 声明你的文件类型,使用的文件编码
  • 提交POST参数(没错,POST的参数在Header里面)
  • 识别用户使用的语言,以显示不同的页面
  • 通过UA判断用户在使用什么浏览器打开你的网站,比如qq,微信等自带浏览器都通过UA判断出来

拓展

1.http响应报文里的 Via 和 X-cache 有什么区别?

via是http协议里面的一个header,记录了一次http请求所经过的代理和网关,经过1个代理服务器,就添加一个代理服务器的信息,经过2个就添加2个。

x-cache是squid代理的自定义header,用来记录缓存的命中与否(Squid 是 Linux/Unix 平台下最为流行的高性能免费应用层代理服务器)