AJAX(jQuery)到 PHP,“Access-Control-Allow-Origin”标头包含多个值“<domain>,*”,但只允许一个 [重复]

Posted

技术标签:

【中文标题】AJAX(jQuery)到 PHP,“Access-Control-Allow-Origin”标头包含多个值“<domain>,*”,但只允许一个 [重复]【英文标题】:AJAX (jQuery) to PHP, 'Access-Control-Allow-Origin' header contains multiple values '<domain>, *', but only one is allowed [duplicate] 【发布时间】:2018-10-28 21:35:07 【问题描述】:

所以我得到了这个页面,它加载了一堆数据,所以我使用了无限滚动。客户端 html 使用 jQuery 对服务器上的 php 文件执行 AJAX 请求。

该页面与服务器位于不同的域中,这就是需要 access-control-headers / allow-origin 的原因。

我没有测试它,它确实给出了以下错误:

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 X-Requested-With。

现在,当我在 PHP 文件中添加标题时,我得到了:

对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”标头包含多个值“域,*”,但只允许一个值。因此不允许原始“域”访问。

服务器端 PHP:

header('Access-Control-Allow-Origin: https://di.community');
header('Access-Control-Allow-Headers: X-Requested-With');    
$start = $_GET['start'];
echo json_encode(array_slice($tokenData, $start, 500));

客户端:

$.ajax(
    if (working == false) 
        working = true;
        type: "GET",
        url: "serverdomain/data.php?start="+start,
        processData: false,
        contentType: "application/json",
        data: '',
        success: function(r) 
            r = JSON.parse(r)
            start += 500;
            setTimeout(function() 
                working = false;
            , 100)
        ,
        error: function(r) 
            console.log("Something went wrong!");
        
    
);

我已将客户端域名编辑为“域”。我只希望该特定域能够访问,这就是我不使用 *.我已将服务器域编辑为“serverdomain”。

是的,每当用户滚动到页面底部时,这个 AJAX 就会触发,这很有效。但是由于某种原因,当我添加标头时,它认为我为 Allow-Origin 标头设置了多个值。同样,这两个错误之间的唯一区别是将以下内容添加到 php 脚本中:

header('Access-Control-Allow-Origin: https://di.community');
header('Access-Control-Allow-Headers: X-Requested-With');

如果有人能指出为什么会发生这种情况,我将不胜感激:P。

编辑:我检查了可能的重复项。这不是同一个问题,但它的最佳答案建议使用 .htaccess 来获得想要的结果,这导致我检查 .htaccess 以查看它是否与我的多值错误有关,并且确实如此。 :) 现已修复,谢谢 Nico

【问题讨论】:

【参考方案1】:

感谢 Nico Haase 的评论,我查看了具有以下几行的 .htaccess:

<FilesMatch "\.(php)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch> 

这解释了错误。删除它是不明智的,它与wordpress相关,我觉得我可能会破坏一些需要它的东西。

所以我现在所做的就是在 PHP 中设置这个:

header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');
header('Access-Control-Content-Type: application/json');

这会触发 .htaccess 中的事物添加 Allow-Origin 标头。

现在可以了!愚蠢的我没想到 .htaccess 与此有关。

【讨论】:

以上是关于AJAX(jQuery)到 PHP,“Access-Control-Allow-Origin”标头包含多个值“<domain>,*”,但只允许一个 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Jquery AJAX:请求的资源上不存在“Access-Control-Allow-Origin”标头

将 AJAX/jQuery 添加到简单的 PHP 表单

使用 AJAX + jQuery + PHP 将数据发送到 MySQL

将二进制数据从 jQuery ajax 发送到 PHP

CORS 问题 - POST 时的 Access-Control-Allow-Origin 错误(Jquery Ajax)

如何通过 AJAX 将 jquery 对象数据发送到 php?