如何解决使用 HTTP->HTTPS Apache 重定向时,Javascript `document.referrer` 消失
我将所有网站从 HTTP 重定向到 HTTPS:
<VirtualHost *:80>
ServerName example.com
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /www/example.com
SSLEngine on
...
</VirtualHost>
我注意到,从站点导航时 anothersite.com
和
-
点击指向 https://example.com 的链接,Javascript 的
document.referrer
工作并给出anothersite.com
-
点击指向 http://example.com 的链接,Javascript 的
document.referrer
为空!
在通过 Apache 使用 HTTP->HTTPS 重定向时如何防止 document.referrer
消失?
或者我应该使用另一种方法进行自动 HTTP->HTTPS 重定向以保留 referrer
?
解决方法
referrer 标头由浏览器发送,显然新请求没有携带 2 个请求前的标头。
是否发送此标头取决于浏览器,因此您只有有限的选择 - 我什至不能保证它会起作用:
通过添加使用 HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
(或类似的 - 选择您喜欢的值)到您的 https 虚拟主机。然后你仍然会错过第一个重定向的引用,但任何在一年内(63072000 秒)回来的人都会立即连接到 https。
注意:如果您在 http(仅)上提供任何内容,任何曾经看到(并尊重)HSTS 标志的浏览器都将无法使用它。
此外,还有很多情况(根据发现的漏洞,它们在历史上发生了变化),其中是否发送标头 - numerous articles 可以说明所有情况导致标题出现或消失。
检查,然后仔细检查,如果您属于可以省略的类别之一。您不能假设标题首先就在那里。
,如 this answer 中所述,在重定向后由浏览器返回 Referrer。显然,它没有。
但是,您可以像这样编写规则,如果标头中不存在引用,则可以从查询中读取引用。
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}?referrer=%{HTTP_REFERER}
请注意,用户始终可以欺骗推荐人。但是这种方法会更容易欺骗它。根据您的用例,此解决方案对您来说可能是一个安全问题。
更正
根据this answer,当用户:
从 https URL 切换到 http URL。
HTTP specs 中的其他信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。