如何/在何处启用CORS(跨域资源共享)?

时间:2016-07-22 09:33:02

标签: javascript cors cross-domain

我无法使用 XMLHttpRequest() javascript 文件访问跨域资源。 我知道有几个类似的问题,我经历了其中的一些问题,但我对一些细节有点混淆。 我会提到我的确切设置和我的具体疑虑。

设定:

我在我的本地LAN网络中存在的ubuntu机器上运行的apache服务器上有我的HTML和JS文件。该应用程序是video.js的基本hls插件。 从我在同一局域网中的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。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://172.20.33.49'因此不允许访问。

(这里172.20.33.49是linux机器的IP)

所以我的疑问是:

  1. Access-Control-Allow-Origin 标头应设置在哪个服务器上的适当值(为简单起见,请说' *')为此工作:在我的本地Linux服务器或托管外部内容的服务器上,或两者兼而有之?

  2. 我是否需要在浏览器/ javascript或HTML代码中更改设置/配置/代码?

  3. 作为一般性查询,客户端可以/应该做些什么来使CORS工作,还是仅仅是服务器要求/配置?
  4. ' Access-Control-Allow-Origin ' HTTP响应中是否必须?如果不是那么它的缺失是什么意思 - 这是否意味着只能访问来自同一域的资源,或者它是否意味着所有域都可访问(相当于*)?有没有办法让客户端强制服务器添加此标头?

1 个答案:

答案 0 :(得分:2)

  

应在哪个服务器上设置Access-Control-Allow-Origin标头

托管您要使用XHR阅读的内容的服务器。错误消息确实拼写出来,它告诉您要求的资源的URL,然后说该资源上没有标题。

  

我是否需要在浏览器/ javascript或HTML代码中更改设置/配置/代码才能实现此目的?

没有。浏览器透明地处理CORS。

  

作为一般性查询,客户端是否可以/应该为CORS工作做什么,或者纯粹是服务器要求/配置?

客户端必须支持CORS。所有现代浏览器都可以。

  

' Access-Control-Allow-Origin'在HTTP响应中是强制性的吗?

没有

  

如果没有,那么它的缺失是什么意思 - 它是否意味着只能访问来自同一域的资源,或者它是否意味着所有域都可访问(等同于*)?

如果服务器没有指定Access-Control-Allow-Origin,那么它不会授予任何其他来源读取其数据的权限。

  

客户端是否可以强制服务器添加此标头?

否(虽然浏览器扩展可以拦截响应并添加标头,但这对于测试目的非常有用)。

相关问题