简介
HTTP请求中经常看到几个与网址有关的头(header):host、origin、referer,本文将介绍这几个头的含义以及作用等。
HTTP请求示例:
概述
项 | host | origin | referrer |
作用 | 描述请求将被发送到的目的地 | 描述请求从哪个网址而来 | 当前请求页面的来源页面的地址。 (当前页面是通过此来源页面里的链接进入的) |
格式 | 域名/ip+端口号(可选) | 协议+域名+端口号(可选) | 协议+域名+查询参数(不包含锚点信息) |
使用范围 | 在任何类型请求中,request都会包含此header信息 | CORS跨域或POST请求 | 用于所有类型的请求。 |
由来 | http1.1中为解决虚拟主机问题而提出 | H5中为CORS跨域提出 | - |
host
含义
简介
请求头host指明请求将被发送到的目的地。
格式
域名或ip+端口号
如果没有给定端口号,会自动使用被请求服务的默认端口(比如请求一个HTTP的URL会自动使用80端口)。
使用范围
在任何类型请求中,request都会包含此header信息。
示例
test.com
用途
host这个header是http1.1中为解决虚拟主机问题而提出。
host这个header主要应用在虚拟主机技术上。虚拟主机(virtual hosting)即共享主机(shared web hosting),可以利用虚拟技术把一台完整的服务器分成若干个主机,因此可以在单一主机上运行多个网站或服务。
不同的域名通过 A 记录或者 CNAME 方式可以连接都同一个 IP 下,同一个 IP 也可以设置多个不同站点,那么访问不同的域名都转发到同一 IP ,怎么区分这些不同的站点呢,就是用的 Host 字段。
比如说有一台 ip 地址为 11.11.11.11 的服务器,在这台服务器上部署着淘宝、京东、拼多多的网站,并且配置了三个虚拟主机:a.com, b.com, c.com, 这三个域名都指向 11.11.11.11。 当我们访问 c.com 的网站时,看到的是拼多多的页面而不是淘宝和京东的页面,原因就是 Host 请求头决定着访问哪个虚拟主机。
origin
含义
含义
请求头origin描述请求从哪个网站而来。
格式
协议+域名+端口号
使用范围
只有下面两种情况会携带origin请求头
- 跨域请求
- 可以看到 response 有对应的 header:Access-Control-Allow-Origin
- 同域时发送post请求
示例
用途
用于 CORS: 当我们的浏览器发出跨站请求时,服务器会校验当前请求是不是来自被允许的站点。服务器就是通过 Origin 字段的值来进行判断。
referer
含义
含义
请求头referer 包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。
格式
协议+域名+端口号+路径+请求参数(注意,不包含 hash值)
referrer 存在隐私问题。比如说在请求外部网站的时候,url 的参数信息如果包含隐私,那么久暴露了。
使用范围
以下几种情况下,Referer 不会被发送:
- 直接输入网址或通过浏览器书签访问;
- 当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS);
- 使用 JavaScript 的 Location.href 或者是 Location.replace();
- 使用 html5 中 noreferrer
- 来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;
示例
用途
- 防盗链。
- 网站访问自己的图片服务器,图片服务器取到Referer来判断是不是自己的域名,如果是就继续访问,不是则拦截。
- 数据统计。
- 统计用户是从哪里链接过来访问的。