【发布时间】:2015-09-25 18:25:54
【问题描述】:
我正在JAX-RS 服务器上构建一个RESTful 服务和一些将附加到它的客户端。
开始测试客户端端点的时间到了,我首先在JavaScript 上进行了尝试,因为到目前为止,我很容易使用此代码向第三方资源发出请求:
function httpGet(theUrl){
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", theUrl, false );
xmlHttp.send( null );
return xmlHttp.responseText;
}
我知道我不应该执行同步请求,但那不是主题。
在 Firefox 上,我得到的错误是:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://someurl.com/someresource/. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
这些请求在我的本地服务器和部署服务器上都不起作用。
我发现这个问题的大多数解决方案都必须通过设置标题Access-Control-Allow-Origin: * 来做一些事情。我已经尝试过了,但它对我没有用。
起初我以为是我的服务器配置有问题,但现在我认为是浏览器因为同源策略而不允许我执行请求。这个对吗?如果正确,为什么与上面完全相同的代码(没有Access-Control-Allow-Headers: *)适用于第三方服务(Google、Facebook 等)?
是否存在始终允许违反同源政策的网站白名单?
如果最后一个问题的答案是否定的,那么他们必须在其服务器端代码上进行一些特定的配置,以允许跨域通信发生。这个配置可能是什么?
【问题讨论】:
-
试试
Access-Control-Allow-Origin不是 Access-Control-Allow-Headers -
我认为这取决于服务器配置。 IE。在 php 中,您应该将标头设置为 'header("Access-Control-Allow-Origin: *");'允许 cors 请求。
-
谢谢@DavePile 这是一个错字,我试过 Access-Control-Allow-Origin 没有运气...
-
我确信那些第三方服务在后端支持 CORS。
标签: javascript rest jax-rs