Javascript Can';t发送CORS查询:以“回复”;否';访问控制允许原点';标题“;
我有一个简单的表单,它只包含一个需要解析的Javascript Can';t发送CORS查询:以“回复”;否';访问控制允许原点';标题“;,javascript,php,ajax,Javascript,Php,Ajax,我有一个简单的表单,它只包含一个需要解析的type=file输入 我有一个位于不同服务器上的php处理程序。我有以下标题: header("Access-Control-Allow-Origin: *"); header("Content-Type: application/x-www-form-urlencoded;charset=UTF-8;"); 下面是我的ajax查询: new Promise((resolve, reject) => { let xhr
type=file
输入
我有一个位于不同服务器上的php
处理程序。我有以下标题:
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/x-www-form-urlencoded;charset=UTF-8;");
下面是我的ajax查询:
new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost/ajax.php', true);
xhr.setRequestHeader("Content-type", "multipart/form-data");
let post = 'ajaxquery=psScript&config=' + JSON.stringify({
path_to_include: 'include.php'
});
xhr.send(post);
xhr.addEventListener('load', () => {
resolve(JSON.parse(xhr.response));
})
xhr.addEventListener('error', () => {
reject();
});
}).then((response) => {
console.dir(response);
});
如标题中所述,它以请求的资源上不存在“Access Control Allow Origin”头作为响应。。但如果我改变这一点:
xhr.setRequestHeader("Content-type", "multipart/form-data");
为此:
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
数据将被发送。但这样,我想,我无法将文件发送到服务器
对我来说,这似乎是一种奇怪的行为。我该如何解决这个问题以及为什么会发生这种情况?在php服务器中,您将头设置为
头(“内容类型:application/x-www-form-urlencoded;charset=UTF-8;”代码>因此,如果尝试将内容类型设置为多部分/表单数据
,它将不允许
您需要在服务器中设置此标头值
header("Access-Control-Allow-Origin: *");
header("Content-Type: multipart/form-data;charset=UTF-8;");
补充如下:
Header set Access-Control-Allow-Origin "*"
到我的.htaccess
文件。这似乎解决了问题。查看有关CORS的信息。基本上,您需要从PHP服务器发送accesscontrolalloworigin
头。它是在浏览器级别强制执行的,因此目前没有办法绕过限制。目前没有办法
。。。不可能,也永远不会,能够绕过CORS将是一件非常糟糕的事情<代码>限制
-CORS不是一项限制,它实际上与验尸前的限制相反。问题可能是飞行前的选项
请求根本没有得到处理,或者如果正在处理,则处理正确handled@JamesHay我不明白。据说简单的请求可能由POST
查询和多部分/表单数据的内容类型组成,与我的示例中相同。它不必预先飞行,而且据我所知,在我的处理程序中应该只有访问控制允许原点
。@Oscar这不适用于大多数XHR请求,因为它们需要“预先飞行”(您可以在链接中阅读该部分)。如果您的AJAX请求正在发送任何附加头,可能是,或者不是标准允许的内容类型或HTTP方法,它将首先发送一个OPTIONS
请求,该请求必须使用allow-origin头进行回复。性能相同。它不应该是响应数据的内容类型吗?是的,但它是作为头发送的,但是如果服务器不允许作为头发送,那么您将得到一个错误