Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t发送CORS查询:以“回复”;否';访问控制允许原点';标题“;_Javascript_Php_Ajax - Fatal编程技术网

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头进行回复。性能相同。它不应该是响应数据的内容类型吗?是的,但它是作为头发送的,但是如果服务器不允许作为头发送,那么您将得到一个错误