Javascript 为什么CORS对不同的内容类型给出不同的响应
当在没有请求内容类型的情况下调用第三方域的服务器时,我得到一个CORS错误并且没有响应。但是,当使用内容类型text/plain(这是响应的真正内容类型)进行调用时,我得到了一个响应,但出现了CORS错误,因此我无法将其解析到dom。问题是,为什么会有第二次而不是第一次的回应。两者都是CORS的错误。在收到服务器的响应后,如何在第二次解析错误Javascript 为什么CORS对不同的内容类型给出不同的响应,javascript,xmlhttprequest,cors,content-type,Javascript,Xmlhttprequest,Cors,Content Type,当在没有请求内容类型的情况下调用第三方域的服务器时,我得到一个CORS错误并且没有响应。但是,当使用内容类型text/plain(这是响应的真正内容类型)进行调用时,我得到了一个响应,但出现了CORS错误,因此我无法将其解析到dom。问题是,为什么会有第二次而不是第一次的回应。两者都是CORS的错误。在收到服务器的响应后,如何在第二次解析错误 <!DOCTYPE html> <html lang="en"> <head> <meta c
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.w3schools.com/xml/ajax_info.txt', true);
xhr.setRequestHeader('content-type', undefined);
xhr.onload = function () {
console.log('Test');
};
xhr.send(null);
var contentXHR = new XMLHttpRequest();
contentXHR.open('GET', 'http://www.w3schools.com/xml/ajax_info.txt', true);
contentXHR.setRequestHeader('content-type', 'text/plain');
contentXHR.onload = function () {
console.log('Test request header');
};
contentXHR.send(null);
</script>
</head>
<body>
Check console and network tab
</body>
</html>
var xhr=new XMLHttpRequest();
xhr.open('GET','http://www.w3schools.com/xml/ajax_info.txt",对),;
xhr.setRequestHeader('content-type',未定义);
xhr.onload=函数(){
console.log('Test');
};
xhr.send(空);
var contentXHR=new XMLHttpRequest();
contentXHR.open('GET','http://www.w3schools.com/xml/ajax_info.txt",对),;
setRequestHeader('content-type','text/plain');
contentXHR.onload=函数(){
log(“测试请求头”);
};
contentXHR.send(空);
检查控制台和网络选项卡
如果未指定
内容类型
,XHR将执行CORS飞行前请求
。请注意,您的请求是OPTIONS
,而不是GET
。这就是为什么您没有从“网络”选项卡获得任何响应
根据:
如果报头字段名为,则称报头为简单报头
Accept、Accept语言或的ASCII不区分大小写匹配
内容语言,或者如果它是不区分大小写的ASCII匹配
内容类型和标题字段值媒体类型(不包括
参数)是的ASCII不区分大小写匹配项
application/x-www-form-urlencoded、多部分/表单数据或text/plain
(……)
如果资源作者想成为
能够使用非简单的方法处理跨来源请求
方法。在这种情况下,作者需要回复飞行前请求
它使用OPTIONS方法,然后需要处理实际的
使用所需方法的请求(本例中删除)并给出
适当的回应
总之,如果您的内容类型不同于
应用程序/x-www-form-urlencoded
、多部分/表单数据
、或文本/普通
,那么XHR将触发预飞行(发送选项
http动词)。我同意您的观点@jaromanda-x,网络选项卡多次出现。我注意到了。我知道这基本上是一个警告。但如果查看响应,第一个XHR请求没有来自服务器的响应,但第二个XHR请求有响应,但没有从浏览器解析。我想知道的是——我是否可以解析第二次出现的响应,如果是,如何解析。或者,如果我无法解析响应,那么如何解析CORS错误的控制台警告。我需要做任何一个。我不想在不安全模式下运行浏览器,也不想创建chrome/firefox/edge应用程序。那肯定是个失误。我不能解析响应吗?那么我如何使用JS解析CORS错误的控制台警告?我也不希望有状态代码。但这是正常的。这就是我的异步代码的发展方向。你能再检查一遍代码吗。它实际上给了我200的地位。Loadend被触发状态为200的Loadend事件被触发var contentXHR=new XMLHttpRequest();contentXHR.open('GET','http://www.w3schools.com/xml/ajax_info.txt",对),;setRequestHeader('content-type','text/plain');contentXHR.onloadend=函数(){console.log('Test request header');};contentXHR.send(空)代码>啊,这是我这边的一个重大失误。我可以在普通安全模式设置浏览器中从Javascript代码解析/捕获console CORS错误吗?@Gary您无法访问/解析此消息。您可以设置contentXHR.onerror
回调,但它会在发生正常错误时触发(包括CORS保护)。你可以检查这些问题,也许可以帮助你。很酷,谢谢。我认为这些链接很有帮助。这可能就是我要找的。