HTTP首部---referrer 知识点

Referrer介绍

Referrer网站来路;访问者进入网站任何途径。HTTP Referer是header的一部分,当浏览器向web服务器发出请求的时候,一般会带上Referer,告诉服务器用户从那个页面连接过来的,服务器藉此可以获得一些信息用语处理。

获取referrer

js中获取:var referer = document.referrer;
java后台获取:String referrer = request.getHeader(“referer”);

作用

判断网站来源,可以相应的做一些校验,比如只允许某网站的请求,那么就可以通过获取referer,加以判断即可.

注意

我原来一直以为ajax的请求的referer是当前页面的referer,后来发现是错误的
ajax请求的referer是当前页面,因为本次请求就是在当前页面发起的,
注意referer的定义.是这个请求是哪个页面发出的,referer就是哪个页面


下面这个是转载的,关于referrer policy的介绍,转自:https://caixw.io/posts/2017/referrer-policy.html

Referrer Policy 介绍

当用户在浏览器上点击一个链接时,会产生一个 HTTP 请求,用于获取新的页面内容,而在该请求的报头中,会包含一个 Referrer,用以指定该请求是从哪个页面跳转页来的,常被用于分析用户来源等信息。但是也有成为用户的一个不安全因素,比如有些网站直接将 sessionid 或是 token 放在地址栏里传递的,会原样不动地当作 Referrer 报头的内容传递给第三方网站。

所以就有了 Referrer Policy,用于过滤 Referrer 报头内容,目前是一个候选标准,不过已经有部分浏览器支持该标准。具体的可查看这里。

指令值

目前包含了以下几种指令值:

enum ReferrerPolicy {
“”,
“no-referrer”,
“no-referrer-when-downgrade”,
“same-origin”,
“origin”,
“strict-origin”,
“origin-when-cross-origin”,
“strict-origin-when-cross-origin”,
“unsafe-url”
};

空字符串

按照浏览器的默认值执行。默认值为 no-referrer-when-downgrade。部分标签可重定义此安全策略。

no-referrer

从字面意思就可以理解,不传递 Referrer 报头的值。

no-referrer-when-downgrade

当发生降级(比如从 https:// 跳转到 http:// )时,不传递 Referrer 报头。但是反过来的话不受影响。通常也会当作浏览器的默认安全策略。

原地址                           跳转地址                    Referrer
https://example.com?token=123   https://example.com/path    https://example.com?token=123
http://example.com?token=123    http://example.com/path     http://example.com?token=123
https//example.com              http://example.com/path     无(协议降级)
http://example.com?token=123    https://example.com/path    http://example.com?token=123

same-origin

同源,即当协议、域名和端口(如果有一方指定的话)都相同,才会传递 Referrer。

原地址                           跳转地址                    Referrer
https://example.com?token=123   https://example.com/path    https://example.com?token=123
http://example.com?token=123    http://example.com/path     http://example.com?token=123
https//example.com              http://example.com/path     无(协议不同)
http://example.com?token=123    https://example.com/path    无(协议不同)
http://example.com?token=123    http://example.com:88/path  无(端口不同)
https://example.com?token=123   https://caixw.io            无(域名不同)

origin

将当前页面过滤掉参数及路径部分,仅将协议、域名和端口(如果有的话)当作 Referrer。

原地址                          跳转地址                     Referrer
https://example.com?token=123   https://example.com/path    https://example.com
http://example.com?token=123    https://example.com/path    http://example.com
https://example.com?token=123   https://caixw.io            https://example.com

strict-origin

类似于 origin,但是不能降级。

原地址                           跳转地址                   Referrer
https://example.com?token=123   https://example.com/path    https://example.com
http://example.com?token=123    https://example.com/path    http://example.com
http://example.com?token=123    http://caixw.io             http://example.com
https://example.com?token=123   http://caixw.io             无

origin-when-cross-origin

跨域时(协议、域名和端口只有一个不同)和 origin 模式相同,否则 Referrer 还是传递当前页的全路径。

原地址                           跳转地址                    Referrer
https://example.com?token=123   https://example.com/path    https://example.com?token=123
http://example.com?token=123    https://example.com/path    http://example.com?token=123
http://example.com?token=123    http://caixw.io             http://example.com

strict-origin-when-cross-origin

与 origin-when-cross-origin 类似,但不能降级。

原地址                          跳转地址                     Referrer
https://example.com?token=123   https://example.com/path    https://example.com?token=123
https://example.com?token=123   https://caixw.io            https://example.com
https://example.com?token=123   http://example.com/path     无
https://example.com?token=123   http://example.com/         无

unsafe-url

任意情况下,都发送当前页的全部地址到 Referrer,最宽松和不安全的策略。

传递方式

Referrer-Policy 报头

推荐的方式,直接在 Referrer-Policy 报头中设置。

Referrer-Policy: origin;

Meta

通过指定 name 值为 referrer 的 meta 标签,也可以达到相同的效果:


content 可以是上面的指定的值,也可以是下面这几种旧的指令值,会自动作相应的转换,但不推荐这些旧的指令值:

Legacy Referrer
never no-referrer
default no-referrer-when-downgrade
always unsafe-url
origin-when-crossorigin origin-when-cross-origin

标签属性

a 和 link 标签可以通过属性 rel 指定 noreferrer,仅对当前链接有效;
a、area、link、iframe 和 img 还可以通过 referrerpolicy 指定仅针对当前链接的设置。

设置

设置Referrer Policies主要有以下几种

CSP 响应头

  CSP(Content Security Policy),是一个跟页面内容安全有关的规范。在 HTTP 中通过响应头中的 Content-Security-Policy 字段来告诉浏览器当前页面要使用何种 CSP 策略。:

Content-Security-Policy: referrer
我们还可以在 里面设置:

<meta http-equiv="Content-Security-Policy" content="referrer">

meta 标签

  通过 标签也可以指定 Referrer 策略,同样很简单:

<meta name="referrer" content="no-referrer">
我们把<meta> 放在 <head> ...</head> 之间。注意,如果出现的位置不对会被忽略。
同样,如果没有给它定义 content 属性,或者 content 属性为空,也会被忽略。
如果 content 属性不是合法的取值,浏览器会自动选择 no-referrer 这种最严格的策略。

a 标签的 referrer 属性

通过给 a 标签增加 referrer 属性也可以指定 Referrer 策略,格式如下:

<a href="https://www.iteblog.com" referrer="no-referrer">过往记忆</a>
这种方式作用的只是这一个链接。
并且,<a> 标签可用的 Referrer 策略只有三种:no-referrer、origin 以及 unsafe-url 。
另外,这样针对单个链接设置的策略优先级比 CSP 和 要高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript自执行匿名函数

格式&#xff1a;&#xff08;function(){//代码})();解释&#xff1a;这是相当优雅的代码&#xff08;如果你首次看见可能会一头雾水&#xff1a;&#xff09;&#xff09;&#xff0c;包围函数&#xff08;function(){})的第一对括号向脚本返回未命名的函数&#xff0c;随后一…

nginx使用gzip压缩文件---lz77算法---Haffman编码

为了提高页面的响应速度,可以从设置 nginx 的 gzip 和缓存这2方面入手,而为ttf,js,css等文件开启 gzip 和缓存能大大减少带宽的消耗. HTTP 的内容编码机制 Accept-Encoding 和 Content-Encoding 是 HTTP 中用来对[采用何种编码格式传输正文]进行协定的一对头部字段. 它的工作…

Javascript模块化编程

随着网站逐渐变成"互联网应用程序"&#xff0c;嵌入网页的Javascript代码越来越庞大&#xff0c;越来越复杂。 网页越来越像桌面程序&#xff0c;需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的方法&#xff0c;管理网页的业务逻辑。…

zookeeper基础整理

zookeeper简述 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件 ZooKeeper 使用 Java 所编写&#xff0c;但是支持 Java 和 C 两种编程语言。 提供的功能包括&#xf…

JS模块化编程require.js简介

一、为什么要用require.js&#xff1f; 最早的时候&#xff0c;所有Javascript代码都写在一个文件里面&#xff0c;只要加载这一个文件就够了。后来&#xff0c;代码越来越多&#xff0c;一个文件不够了&#xff0c;必须分成多个文件&#xff0c;依次加载。下面的网页代码&…

CSS position属性

目前几乎所有主流的浏览器都支持position属性&#xff08;"inherit"除外&#xff0c;"inherit"不支持所有包括IE8和之前版本IE浏览器&#xff0c;IE9、IE10还没测试过&#xff09;&#xff0c;以下是w3school对position五个值的解释&#xff1a; 其中absol…

storm的并行度的解释--- ( 看完就能理解 )

关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参照我这篇文章:storm的流分组策略 关于storm的消息可靠机制,参照我这篇文章:storm的消息可靠机…

jQuery选择器总结

jQuery 的选择器可谓之强大无比&#xff0c;这里简单地总结一下常用的元素查找方法 最基本的&#xff1a; $("#myELement") 选择id值等于myElement的元素&#xff0c;id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $("div") …

storm的流分组策略

关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参照我这篇文章:storm的流分组策略 关于storm的消息可靠机制,参照我这篇文章:storm的消息可靠机…

CSS串联和后代选择器

串联选择器&#xff1a;作用在同一个标签上复制代码代码如下:<div class”a” id "qq"><span>look at the color</span></div></p> <p>css: #qq.a{….}后代选择器&#xff1a;作用在不同标签上复制代码代码如下:<div id &quo…

storm消息可靠机制(ack)的原理和使用

关于storm的基础,参照我这篇文章:流式计算storm 关于并发和并行,参照我这篇文章:并发和并行 关于storm的并行度解释,参照我这篇文章:storm的并行度解释 关于storm的流分组策略,参照我这篇文章:storm的流分组策略 关于storm的消息可靠机制,参照我这篇文章:storm的消息可靠机…

JS--Console.log()详解

对于JavaScript程序的调试&#xff0c;相比于alert()&#xff0c;使用console.log()是一种更好的方式&#xff0c;原因在于&#xff1a;alert()函数会阻断JavaScript程序的执行&#xff0c;从而造成副作用&#xff1b;而console.log()仅在控制台中打印相关信息&#xff0c;因此…

订单单量监控v2

前段时间做了一个订单单量监控的项目,已经投入使用了,现在总结一下 前期的想法参考这篇文章 整体使用了storm实时计算框架和redis数据库,还有kafka消息队列 先上效果图,我们可以后期将数据展示出来,明显发现某天00点有单量突变的情况,明显是促销活动导致单量增加了 而后面的报…

AFNetworking 3.0迁移指南

AFNetworking是一款在OS X和iOS下都令人喜爱的网络库。为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果你的项目以前使用过这些API&#xff0c;建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本。本指南将引导您…

想法记录---实时计算的TopN的实现

TopN就是找出时间段内出现频率最高的n个 TopN的计算是个老生常谈的话题,比如微博的热搜,都是隔段时间就统计一次TopN 现在想做一个实时计算的TopN. 先说说离线计算的TopN,再说实时TopN 离线TopN 离线TopN一般出现在大数据的应用场景,使用hadoop的map reduce,网上有很多案例 …

iOS中的MVC设计模式

一、MVC概述模型&#xff0d;视图&#xff0d;控制器&#xff08;MVC&#xff09;是Xerox PARC在二十世纪八十年代为编程语言Smalltalk&#xff0d;80发明的一种软件设计模式&#xff0c;已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式&#xff0c;并且受到…

java 时间的相关转换操作

关于时间的操作,写了个util 主要用于预测的时候,时间段的确定 预测的时间段,需要明确的规定范围,由于业务的促销都是整点开始,所以我们的预测时间段,也是从整点开始 所以就要将时间分为多个整段,比如一分钟一段,那么就是2018-06-18 00:00:00 到2018-06-18 00:01:00 就是一段 那…

iOS-MVVM-模式介绍

一、MVVM概述 MVVM 到底是什么&#xff1f;我们首先看一下MVC架构&#xff1a;我们看到的是一个典型的 MVC 设置。Model 呈现数据&#xff0c;View 呈现用户界面&#xff0c;而 View Controller 调节它两者之间的交互。Cool&#xff01;稍微考虑一下&#xff0c;虽然 View 和 …

[数据库]---mysql数据库 使用binlog+canal或binlake进行数据库的复制

前言 在进行冷热分离的时候&#xff0c;需要将数据实时的复制在历史数据库中&#xff0c;我们使用的是binlogcanal的思想,将每次数据库数据的变更转换成消息发出来,然后再操作这些消息达到数据复制的 在京东,实现同样功能的组件&#xff0c;叫binlake 接下来详细说下: 1.Binl…

加密算法概念简介--MD5、SHA、DES、3DES、AES、RSA、ECC

MD5MD5即Message-Digest Algorithm 5&#xff08;信息-摘要算法5&#xff09;&#xff0c;用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一&#xff08;又译摘要算法、哈希算法&#xff09;&#xff0c;主流编程语言普遍已有MD5实现。将数据&#xff08;如汉字&…