在http协议中有这两个字段,之前一直隐隐约约的觉得是,一种标记请求来源的方法(的确是),但是更细致的对这两个字段的比较却没有一个清楚的认识。

referrer

到底是referer还是referrer,没人能说得清,不过拼写上,后者是正确的,我们不做评论,下面都用referrer表示。

假设我们当前处于A网站下的某个页面:http://www.exampleA.com/some_page_of_a.html下,该页面中有个链接是链到了B网站的某个页面:http://www.exampleB.com/some_page_of_b.html,那么当点击那个链接(或者其他方法),向B网站发起请求时,HTTP请求头中将包含如下字段:referrer:http://www.exampleA.com/some_page_of_a.html

这个算法是这样:

  • 在发起请求前,调用window.localtion获取window.location.href获取当前地址栏中的请求地址
  • 将该地址附加到referrer域中。

OK,那为什么要有这个域呢?参考了这里写链接内容发现了有两个可能的用处

  1. 防止盗链,盗链的解释,请参考百度百科,当一个请求到达服务器,特别是CDN服务器的时候,CDN服务器可以根据该字段来判断来源站点是否是合作伙伴,或者是可信任的,然后再决定是否将资源返回给它
  2. 防止恶意请求,比如说只允许外部网站访问我的静态资源,对于动态资源,不允许从外部网站访问,这样在一定程度上可以避免CSRF攻击。当然了,依赖客户端的请求是很不可靠的,因为这个可以轻轻松松伪造。
  3. 100 401

但是referrer存在很多问题,比如说我在请求外部网站的时候,携带着url的很多参数信息,而这些信息实际上是隐私的,但是外部网站都可以看到这些数据。这可能就会产生很多问题了。

origin

和referrer很相似,就是将当前URI的请求参数剥离,仅剩下<\schema,host,port>三元组,当且仅当三元组都相等时,才说这两个域属于同一个域,不过这个对origin这个header并没有影响,因为标准的浏览器,会在每次请求中都带上origin,至少在跨域操作时肯定携带。

从上面可以看出,其实referrer所能满足的要求,origin全部都能达到,事实上,origin的提出,本身就是在HTML5中跨域操作所引入的。

其具体流程是,当一个链接或者XMLHttpRequest去请求跨域操作,浏览器事实上的确向目标服务器发起了连接请求,并且携带这origin。

当服务器返回时,浏览器将检查response中是否包含Access-Control-Allow-Origin字段,当缺少这个字段时,浏览器将abort,abort的意思是不显示,不产生事件,就好像没有请求过,甚至在network区域里面都看不到。

当存在这个header时,浏览器将检查当前请求所在域是否在这个access-control-allow-origin所允许的域内,如果是,继续下去,如果不存在,abort!100

转:彻底搞清referrer和origin的更多相关文章

  1. HTTP之referrer

    我们知道,在页面引入图片.JS 等资源,或者从一个页面跳到另一个页面,都会产生新的 HTTP 请求,浏览器一般都会给这些请求头加上表示来源的 Referrer 字段.Referrer 在分析用户来源时 ...

  2. HTTP的Referrer和Referrer Policy设置

    Referrer referrer是HTTP请求header的报文头,用于指明当前流量的来源参考页面.通过这个信息,我们可以知道访客是怎么来到当前页面的.这对于Web Analytics非常重要,可以 ...

  3. Meta referrer标签的,可以防止CSRF的攻击

    Meta referrer标签的简要介绍 在某些情况下,出于一些原因,网站想要控制页面发送给 server 的 referer 信息的情况下,可以使用这一 referer metadata 参数. 参 ...

  4. Meta referrer标签的简要介绍

    在某些情况下,出于一些原因,网站想要控制页面发送给 server 的 referer 信息的情况下,可以使用这一 referer metadata 参数. 参数 referer 的 metedata ...

  5. HTTP系列之Referer和Referrer policy简介

    目录 @ 1.前言摘要 在csdn网站随便抓个链接来看看: Referer参数: referrer policy是unsafe url的,ok,下面介绍一下Referer和referrer polic ...

  6. HTTP Referrer和Referrer Policy 设置

    referrer是HTTP请求header的报文头,用于指明当前流量的来源参考页面.通过这个信息,我们可以知道访客是怎么来到当前页面的.这对于Web Analytics非常重要,可以用于分析不同渠道流 ...

  7. http协议 头部字段 referrer

    学习笔记,非原创,抄自:https://www.cnblogs.com/amyzhu/p/9716493.html:https://blog.csdn.net/java_zhangshuai/arti ...

  8. 比较各大挪动门户网站淘宝、京东、网易、新浪、腾讯meta标签的异同

    首先先展示一下各个网站的有关meta标签的代码: 网易 <meta charset="UTF-8"> <meta content="width=devi ...

  9. 大型网站的 HTTPS 实践(四)——协议层以外的实践

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt390 1 前言 网上介绍 https 的文章并不多,更鲜有分享在大型互联网站 ...

随机推荐

  1. 4个强大的Linux服务器监控工具[转]

    本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量分开来显示. 一些命令可以显示单个进程所使用的带 ...

  2. Axure的中继器如何实现两个列表之间的交互

    Axure RP 8安装包+注册码+中文语言包下载地址如下: 链接: https://pan.baidu.com/s/1nwRnCUl 密码: yy36 将中文语言包下的lang文件夹直接放在安装Ax ...

  3. CentOS6.9编译安装nginx1.4.7

    1.系统安装开发包组和zlib-devel,关闭iptables [root@bogon ~]# yum groupinstall -y "Development Tools" [ ...

  4. 使用Z3破解简单的XOR加密

    使用Z3破解简单的XOR加密 翻译:无名侠 原文地址: https://yurichev.com/blog/XOR_Z3/ 如果我们有一段用简单XOR加密过的文本,怎么寻找密钥呢?密钥的长度可能很长, ...

  5. BZOJ 3670: [Noi2014]动物园 [KMP]

    求这玩意: 对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i] 对1,000,000,007取模的结果 n≤5,L≤1,00 ...

  6. 基于Appium1.6.X的WebDriverAgent编译、安装

    转自:http://www.cnblogs.com/baconLiu/p/6861431.html tips:WebDriverAgent是Appium1.6.3以后版本新添加的模块,为了让appiu ...

  7. typeof面试题解答

    面试题 alert(typeof null); // object alert(typeof undefined); // undefined alert(typeof NaN); // number ...

  8. CNN网络架构演进:从LeNet到DenseNet

    卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF ...

  9. SpringMVC之Http标准的头部信息

  10. 监督学习:随机梯度下降算法(sgd)和批梯度下降算法(bgd)

    线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就 ...