我无法从我的javascript文件使用XMLHttpRequest()访问跨域资源。 我知道有几个类似的问题,我经历了其中的一些问题,但对于某些细节我有点困惑。 我会提到我的确切设置和我的具体疑惑。如何/在哪里启用CORS(跨源资源共享)?
设置:
我有我的HTML和JS文件出现在我的本地局域网网络中的Ubuntu的机器上运行的Apache服务器上。该应用程序基本上是hs插件video.js。 从我的Windows PC在同一本地局域网中,我打开hls播放器的index.html文件。只要我选择的视频内容这是目前在Linux机器上,如预期正常工作,但给它一个外部内容(例如http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8),它失败并给出错误:
的XMLHttpRequest无法加载http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8。请求的资源上没有“Access-Control-Allow-Origin”标题。因此'Origin'http://172.20.33.49'不允许访问。
(这里172.20.33.49是Linux机器的IP)
所以我的疑问是:
在哪台服务器应该在访问控制允许来源头是设置为适当的值(为简单起见,可以说'*')以使其工作:在我的本地linux服务器或托管外部内容的服务器上,还是两者兼有?
是否有任何设置/配置/代码的变化,我需要在我的浏览器/ JavaScript或HTML代码做这个工作?
- 作为一般查询,客户端是否可以/应该为CORS工作或者纯粹是服务器需求/配置?
- '访问控制 - 允许来源'在HTTP响应中是强制性的吗?如果不是,那么它的缺席意味着什么 - 这是否意味着只有来自同一个域的资源可以访问,或者是否意味着所有的域都可访问(相当于*)?有任何客户端可以强制服务器添加此标头的方式吗?
感谢您的详细回复。 因此,如果我理解正确,在这种特定情况下,我无法播放外部内容(除了安装拦截和修改响应的浏览器插件外),因为我无法控制外部服务器? 稍有不同的是,这是大多数服务器不允许从其他域访问的常见/典型行为。我的意思是这似乎严重限制访问任何JavaScript代码? –
是的,这是正常的。严格限制访问JavaScript是一件好事。您不希望您访问过的任何网站能够向您发送Gmail请求并阅读您的电子邮件?或者你的网上银行?跨原产地请求要求数据供应商主动表示它是安全和可取的。 – Quentin