我托管的网站上有许多不同的域名。
我们可以调用托管网站example.com和网址转发的域名 - example-x.com,example-y.com,example-z.com
访问经过网址转发的域时,会将跨域请求返回到主机站点example.com。
我目前正在向json文件发出ajax GET请求并收到以下错误;
否'访问控制 - 允许 - 来源'标题出现在请求的上 资源。起源' http://example-x.com'因此是不允许的 访问。
即使预检OPTIONS返回状态200并且GET方法返回状态200.
选项;
我在主机htaccess上设置了以下CORs标头;
# <IfModule mod_headers.c>
SetEnvIfNoCase Origin "https?://(www\.)?(example-x\.com|example-y\.com|example-z\.com)(:\d+)?$" ACAO=$0
Header set Access-Control-Allow-Origin %{ACAO}e env=ACAO
Header set Access-Control-Allow-Methods "GET, PUT, POST, DELETE, OPTIONS"
Header set Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range"
Header set Access-Control-Allow-Credentials true
# </IfModule>
我使用以下ajax请求调用GET;
var createCORSRequest = function(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
xhr.open(method, url, true);
} else if (typeof XDomainRequest !== "undefined") {
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
};
var url = 'http://example.com/data.json';
var xhr = createCORSRequest('GET', url);
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
xhr.setRequestHeader('Accept', 'application/json, text/javascript');
xhr.onload = function() { console.log('success');};
xhr.onerror = function() { console.log('error'); };
xhr.send();
编辑
从ajax请求中删除setRequestHeader("Content-Type", "application/json; charset=UTF-8")
已删除了预检要求,但CORs错误仍然存在,下面的屏幕截图显示了GET的请求/响应,我的猜测是没有设置正确的htaccess标头RequestURL - http://example.com/cms/wp-content/uploads/2017/04/preloader_data.json
答案 0 :(得分:1)
您正尝试通过results <- test.df %>%
mutate(a = test.vec[[paste0(sentence, '_a')]])
请求检索json。这应该是simple request,并且不需要预检请求。
如果您查看来自MDN的预检请求的要求,您可以看到GET
,Content-Type
或application/x-www-form-urlencoded
以外的设置multipart/form-data
将导致此预检请求
如果您从the RFC查看text/plain
,“包含有效负载正文的消息” “应该”。但是您的获取请求没有有效负载。因此,从ajax调用中删除该标头。
答案 1 :(得分:-3)
在客户的请求中,您没有设置正确的标头:
xhr.setRequestHeader('Accept', 'application/json, text/javascript');
xhr.setRequestHeader('Access-Control-Allow-Headers', '*');
否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。起源&#39; http://example-x.com&#39;因此不允许访问。 - &GT; xhr.setRequestHeader(&#39; Access-Control-Allow-Headers&#39;,&#39; *&#39;);
我认为我们不能比本教程更好地回答: https://www.html5rocks.com/en/tutorials/cors/
本网站提供有关如何设置服务器以允许CORS的信息: https://enable-cors.org/server.html