加载google.com时,Javascript报告CORS错误

时间:2014-07-08 10:28:24

标签: javascript cors fiddler

以下是Javascript代码片段:

            var requ = "http://google.com";
            var xmlhttp;

            xmlhttp = new XMLHttpRequest();

            xmlhttp.onreadystatechange = function()
            {
                // BREAKPOINT A
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
                {
                    // never gets into this block
                }

            };
            xmlhttp.open("GET", requ, true);
            xmlhttp.send();

代码执行恰好通过 BREAKPOINT A 2次。

第一次:xmlhttp.readyState == 1; xmlhttp.status == 0;

第二次:xmlhttp.readyState == 4; xmlhttp.status == 0;

Chrome控制台报告:

XMLHttpRequest cannot load http://google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:50261' is therefore not allowed access. 

有什么问题?为什么我无法获得成功的回复?

编辑#1

所以,问题是google.com不支持CORS。但也许我可以向不同的方向扩展这个问题。

我使用Fiddlerhttp://google.com上发送GET。 请求中没有Origin头。实际上,根本没有指定标题。 请求已成功完成。如何在不编写JS代码并执行它的情况下测试站点是否支持CORS?我如何使用Fiddler测试相同的东西?

编辑#2

我发现site可以快速回答我的问题。 我仍然想知道为什么它不能通过Fiddler工作。

1 个答案:

答案 0 :(得分:4)

readyState表示您的请求状态。 readyState基本上等于"建立连接"和readyState"请求已完成"。

您的请求从1跳到4,因为您收到Same Origin Policy错误。如果你做了正确的请求,将包括状态2和3(2:收到标题,3:接收响应主体)。

您的Cross Origin请求到达readyState 4,但实际上从不保持200状态。

了解更多信息:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest