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 将数据发送到 MySQL
CORS 问题 - POST 时的 Access-Control-Allow-Origin 错误(Jquery Ajax)