2016-01-08 14 views
1

我编写了一个web应用程序,该应用程序从本地文件系统提供给浏览器。我试图让使用jQuery的Ajax方法的HTTP GET请求到另一个域:Javascript CORS被阻止但仍显示数据包捕获中的数据

$.ajax({ 
    type: 'GET', 
    url: "http://alerts.weather.gov/cap/us.php?x=0", 
    dataType: "text", 
    data: null, 
    success: function(data){ 
     var x = data; 
    }, 
    error: function(data, err) { 
     var x = err; 
    } 
}); 

在开发者控制台,我得到了错误,“Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://alerts.weather.gov/cap/us.php?x=0. (Reason: CORS header 'Access-Control-Allow-Origin' missing).

现在我明白这意味着什么,和这个错误的目的。

下面是一个非常奇怪的部分:当我用Wireshark捕获网络流量时,我可以看到远程服务器实际上提供了我请求的内容。

CORS的工作方式是什么?它完全取决于客户端从服务器接收数据,然后拒绝使用它?我还没有找到CORS执行的明确解释;我期望它是一个服务器端错误,而不是客户端错误。

知道我的浏览器正在获取我请求的数据但不让我使用它,这是令人沮丧的。有没有解决方法?

+1

解决方法将构成严重的安全漏洞。 – Pointy

+0

这就是为什么某些类型的失败的xdomain ajax请求仍然在第三方站点日志上留下日志条目的原因; (非飞行前)ajax基本上只写入第三方URL,但很多编码人员并没有意识到遥控器得到它,因为浏览器覆盖了一个错误... – dandavis

回答

1

CORS依赖于浏览器和服务器。浏览器应该阻止内容;服务器应该尊重OPTIONS谓词并返回适当的CORS响应。

+2

浏览器无法知道不管标题是否在那里。某些类型的请求未经过飞行前测试,因此那些将返回客户端系统的所有数据和浏览器(除非它被严重破坏)会注意到丢失的标题并丢弃其他所有内容。 – Pointy