以下是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。但也许我可以向不同的方向扩展这个问题。
我使用Fiddler在http://google.com上发送GET。 请求中没有Origin头。实际上,根本没有指定标题。 请求已成功完成。如何在不编写JS代码并执行它的情况下测试站点是否支持CORS?我如何使用Fiddler测试相同的东西?
编辑#2
我发现site可以快速回答我的问题。 我仍然想知道为什么它不能通过Fiddler工作。
答案 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