【发布时间】:2012-05-13 01:50:40
【问题描述】:
当我通过 HTML5 访问 MP3 文件时,我遇到的问题是 Firefox 没有在 HTTP 标头中发送引用者。
我正在使用来自 jPlayer.org 的播放器来播放 mp3 文件,并且我试图通过读取来自 HTTP-sniffer/FireBug/similar 的 URL 来阻止人们下载歌曲。我的方法是检查我的 .htaccess 文件中的 HTTP 标头:
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule ^play/(\S+)$ /uploads/error.mp3
RewriteRule ^play/(\S+)$ /uploads/mp3/$1.mp3
如果 HTTP-referer 未设置为 mydomain.com,则这三行告诉浏览器播放 error.mp3。否则,它会得到真正的 mp3 文件。
这在 Chrome、Internet Explorer 7/8/9、Safari(PC) 和 Opera 中运行良好。但是,在 Firefox(PC 和 Mac)和 Safari (Mac) 中,它不起作用。这似乎是因为根本没有发送 HTTP 引用。当我查看 FireBug 时,我在 Request-headers 中的任何地方都看不到Referer,所以我猜它根本没有发送?当我查看 Web 开发人员工具中的“网络”选项卡时,我可以在 Chrome 中看到它。
还有其他人熟悉这个问题吗?您知道如何阻止 MP3 文件的下载或至少使其更难下载吗?通过 PHP 传递 MP3 文件似乎不起作用,因为暂停/恢复不起作用。
【问题讨论】:
-
这是哪个 Firefox 版本?根据bugzilla.mozilla.org/show_bug.cgi?id=584480 Firefox 4 及更高版本应该发送一个引用标头。
-
这是 Firefox 版本 11。
-
我将 play/ URL 重定向到一个 PHP 文件,并将 $_SERVER 数组通过电子邮件发送给我自己进行检查。我可以确认 Chrome 发送了 HTTP_REFERER 而 Firefox 没有。我猜这个错误还没有完全修复。
-
你能指出一个显示问题的测试用例吗?我看不出这里没有推荐人怎么可能有请求,除非发生的事情比你说的要多……
标签: html firefox browser header http-headers