referrer,referrer和referee

http://www.itjxue.com  2023-01-21 02:19  来源:未知  点击次数: 

meta标签之referrer

meta name="referrer" content=“no-referrer”

referrer是用于追踪用户是从哪个页面跳转过来,js中使用document.referrer来得到值,一般用户做移动端back按钮,如用户通过别人发送时候链接进入页面时,可以隐藏back按钮。

referrer有五种属性

No Referrer (永远不做记录)

No Referrer When Downgrade(浏览器默认,当降级时候不记录,从https跳转到http)

Origin Only(只记录 协议+ host)

Origin When Cross-origin(仅在发生跨域访问时记录 协议+host)

Unsafe URL(永远记录)

参考链接: Referrer Policy 介绍 ?和? document.referrer的用法详解

referrer和referee有什么区别?

综述:前者是推荐人,介绍人,提到某人的人。

重点词汇:referee

英[ref?'ri:]

释义:

n.裁判员;调解人;介绍人

vi.仲裁;担任裁判

vt.为…当裁判;调停

[复数:referees;第三人称单数:referees;现在分词:refereeing;过去式:refereed;过去分词:refereed]

短语:

assistant referee助理裁判员;助理裁判;边裁;即旁证

词语使用变化:referrer

v.(动词)

1、refer的基本意思是“提及”,指直接地、有意地、明确地提到某事。含有说话人有资格对某事作出判断的意味。refer也可作“查阅”解,指顺便地查阅或对问题的某一点翻查权威资料,还可作“归于”解。

2、refer无论作不及物动词还是及物动词一般都须与介词to搭配。refer to表示“查阅,参考”“提到,提及”“对…而言,适用于”;refer…to则表示“把…提交给…”“把…归功于…”“把…称作…”。

nginx 错误日志中的referrer 什么用处

referrer用于标识用户从哪个页面发起的请求,但由于是客户端发送,服务器无条件信任,所以该值可以伪造

正常情况下浏览器发送的referrer是不会错误,但可以通过非浏览器的方式访问,如通过curl命令等,所以referrer仅供参考,不可完全信任

一般用于统计

解决图片报错403

解决办法:

meta name="referrer" content="no-referrer" /

原理:

请求图片的时候发送了一个http请求,这个http请求体的header中有个referrer字段,用来表示发起http请求的源地址信息。这个referrer信息是可以省略但不能修改,就是你可以设置是否携带上这个referrer信息,不能定制referrer里面的值。服务器在拿到这个referrer值后进行处理,通过referrer值判断请求是否来自本站,若不是则返回403或者重定向返回其他信息,从而实现图片或者其他资料的盗取。问题出现403 就是因为请求的是别人服务器上的资源,默认的把自己referrer信息带过去了,被对方服务器拦截了,出现403的报错。在前端可以通过meta标签来设置referrer policy(来源策略),就是把referrer设置成no-referrer,这样发送请求的时候就不会带上referrer信息,对方的服务器就无法拦截了。添加这个meta标签后,图片显示正常了。

referer 是什么意思?

n. 推荐人,上线;介绍人?(其正确英语拼法是referrer,由于早期HTTP规范的拼写错误,为了保持向后兼容而将错就错)

网络意义:

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

HTTP 协议中有一个用来表示页面或资源来源的请求头,由 Philip Hallam-Baker 于上世纪 90 年代提出来,他当时把这个请求头叫做?Referer,并最终写进了 RFC1945,也就是 HTTP/1.0 协议:

The Referer request-header field allows the client to specify, for the server's benefit, the address (URI) of the resource from which the Request-URI was obtained.?via

有趣的是,当时这个单词被他拼错了,正确的拼写应该是?Referrer。但是这个错误被发现之前,已经被大量使用,如果要改过来需要所有服务端、客户端的一致配合,还有大量的代码需要排查修改。于是,HTTP 的标准制定者们决定将错就错,不改了。下面这段描述来自于 RFC2616,也就是著名的 HTTP/1.1 协议:

The Referer[sic] request-header field allows the client to specify, for the server's benefit, the address (URI) of the resource from which the Request-URI was obtained (the "referrer", although the header field is misspelled.)?via

可以看到,相比 HTTP/1.0,HTTP/1.1 除了加上了对这个错误的说明之外,没有其他变化。另外,那个[sic]?是拉丁文里「原文如此」的意思。很多其他标准在表述 HTTP 中的?Referer?请求头时,都会加上[sic],避免引起读者误解。

由此可见,HTTP 标准制定者奉行实用主义,能用就行。由于 HTTP 协议继续拼错,浏览器当然只好按错的来,服务端收到的也是拼错的,所以大部分 Web Server、服务端语言或框架,都跟着拼错。举几个例子:

Nginx:ngx_http_referer_module - used to block access to a site for requests with invalid values in the “Referer” header field;

PHP:$_SERVER['HTTP_REFERER'] - The address of the page (if any) which referred the user agent to the current page;

Django:HttpRequest.META.HTTP_REFERER – The referring page, if any;

ThinkJS:Controller.referer() - 获取 referer;

JavaScript 中的 Referrer

这里说的 JavaScript,都是针对宿主为浏览器的场景,获取到的 referrer 属性都是由浏览器提供的。这一次,浏览器们比较齐心,都采用了正确的拼写方式,没有让这个错误在 JavaScript 中延续。

例如 DOM Level 2 里定义的?document.referrer:

Returns the URI [IETF RFC 2396] of the page that linked to this page. The value is an empty string if the user navigated to the page directly (not through a link, but, for example, via a bookmark).?via

最新的 Fetch API 中的 Request 接口,也有一个名为?referrer?的属性:

The referrer attribute's getter must return the empty string if request's referrer is no referrer, "about:client" if request's referrer is client and request's referrer, serialized, otherwise.?via

更多关于 Fetch API 的介绍可以查看月影大大翻译的这篇文章:这个API很“迷人”——(新的Fetch API)。

其他标准中的 Referrer

其他标准,例如?Referrer Policy,也采用了正确的写法,并且明确表示不会兼容错误的拼写,例如在?Delivery via CSP?这一节写着:

Note: The directive name does not share the HTTP header’s misspelling.

结论

HTTP 请求中的?Referer?是一个典型的拼写错误,历史悠久,可以预见还会一直错下去。也许以后Referer?会变成一个专有名词也说不定。所以,一般涉及到读取 HTTP 请求头的场景,我们需要用Referer?这种错误拼写;除此之外一般都要用?Referrer?这种正确的拼写。

(责任编辑:IT教学网)

更多

相关windows文章