CR4*_*R47 13 javascript response xmlhttprequest cors
我会通过使用jQuery $.ajax
函数解决这个问题,但在这种情况下jQuery不是选项.相反,我将使用CORS请求.我觉得响应请求的网络服务器出了问题,我很难搞清楚问题所在.
这是我创建CORS请求的代码
var httpRequest = new XMLHttpRequest();
httpRequest.open('POST', url, true);
httpRequest.setRequestHeader( 'Access-Control-Allow-Origin', '*');
httpRequest.setRequestHeader( 'Content-Type', 'application/json' );
httpRequest.onerror = function(XMLHttpRequest, textStatus, errorThrown) {
console.log( 'The data failed to load :(' );
console.log(JSON.stringify(XMLHttpRequest));
};
httpRequest.onload = function() {
console.log('SUCCESS!');
}
Run Code Online (Sandbox Code Playgroud)
这是console.log错误:
XMLHttpRequest无法加载 http://test.testhost.com/testpage.请求标头字段Access-Control-Allow-Origin不允许使用Access-Control-Allow-Origin.
以下是标题信息:
> Remote Address:**.**.***.**:80 Request
> URL:http://test.testdomain.com/testpage Request
> Request Method:OPTIONS
> Status Code:200 OK
Run Code Online (Sandbox Code Playgroud)
请求标题:
OPTIONS /content-network HTTP/1.1
Host: test.testhost.com
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Request-Method: POST
Origin: http://test.testdomain.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Access-Control-Request-Headers: access-control-allow-origin, content-type
Accept: */*
Referer: http://test.testdomain.com/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Run Code Online (Sandbox Code Playgroud)
响应标题:
HTTP/1.1 200 OK
Date: Thu, 14 Aug 2014 20:17:25 GMT
Server: Apache
Last-Modified: Thu, 14 Aug 2014 20:17:25 +0000
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
ETag: "1408047445"
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Vary: Accept-Encoding
Content-Encoding: gzip
Access-Control-Allow-Headers: origin, x-requested-with, content-type
Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS
Content-Length: 6117
Connection: close
Content-Type: text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
aps*_*ers 14
您的服务器响应允许请求包含三个特定的非简单标头:
Access-Control-Allow-Headers:origin, x-requested-with, content-type
Run Code Online (Sandbox Code Playgroud)
但是您的请求有一个服务器响应不允许的标头:
Access-Control-Request-Headers:access-control-allow-origin, content-type
Run Code Online (Sandbox Code Playgroud)
Access-Control-Allow-Headers
响应头必须明确允许在CORS请求中发送的所有非简单头.Access-Control-Allow-Origin
服务器的CORS响应不允许在您的请求中发送不必要的标头.这正是" ...不允许Access-Control-Allow-Headers
"错误消息试图告诉您的内容.
请求没有理由拥有此标头:它不执行任何操作,因为Access-Control-Allow-Origin
它是响应标头,而不是请求标头.
解决方案:删除为您的请求setRequestHeader
添加Access-Control-Allow-Origin
标头的调用.
消除:
httpRequest.setRequestHeader( 'Access-Control-Allow-Origin', '*');
Run Code Online (Sandbox Code Playgroud)
...并添加:
httpRequest.withCredentials = false;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
91230 次 |
最近记录: |