Skip to content

HTTP Header Referer #297

Open
Open
@yaofly2012

Description

@yaofly2012

背景

接口需要获取页面URL。但是发现接口请求头Referer字段只有域名信息,没有页面path信息。

Referer

含义

HTTP请求头字段「Referer」标记请求资源方的URL,比如:页面跳转,AJAX请求,静态资源请求等。
1.Referer可能会包含origin, path, query string, 不会包含URL 片段
2. Referer标记的是请求资源方的URL,不一定是当前页面的URL。比如一个外部CSS里加载了其他外部资源(图片/字体等),则Referer是该CSS的URL。

取值

Referer有3种值:

  1. 无值
  2. 只包含origin
  3. 包含origin, path, query string

Referer不是Referrer

HTTP请求头字段是「Referer」,但是单词拼写是错误的(正确的是Referrer)。
注意:只有这个头部名字单词错误了。

控制Referer取值

Referer包含资源请求方的URL信息,可能会涉及信息泄露问题。资源请求方可以通过一些指令控制Referer取值。

Referrer-Policy响应头

资源方的响应头Referrer-Policy可以控制该资源请求其他外部资源的请求Referer取值。

  1. 默认值strict-origin-when-cross-origin
  2. 指令存在兼容性问题,具体参考Browser compatibility
  3. 设置指令时需要考量的因素:
  • 是否跨域
  • 是否安全请求(HTTPS)

meta标签

针对HTML资源可以采用页面<meta name="referrer" content="" />作为Referrer-Policy响应头的替代方案。

HTML referrerpolicy属性

可以控制具体的外部资源的Referer取值。

参考

  1. MDN Referer
  2. MDN Referrer-Policy

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions