未在 PHP 上设置 CORS 标头
Posted
技术标签:
【中文标题】未在 PHP 上设置 CORS 标头【英文标题】:CORS headers not set on PHP 【发布时间】:2015-11-25 19:36:15 【问题描述】:我试图在 php 服务器上允许 CORS 我有以下代码
<?php
header('content-type: application/json; charset=utf-8');
header("access-control-allow-origin: *");
echo '<p>Hello World!!</p>';
?>
和一个简单的 ajax 请求来使用 jquery 获取它
我的开发工具不断收到此 CORS 错误
请求中没有“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:8080” 访问。
我还使用 curl -i 来检查响应,我看到它没有标题... 怎么了
卷曲-i
HTTP/1.1 200 OK 日期:2015 年 8 月 31 日星期一 17:25:33 GMT 内容类型: 文本/html 内容长度:97 连接:保持活动 保持活动状态:超时=30 服务器:Apache/2 X-Powered-By:PHP/5.3.29 缓存控制: 私有的,预检查=0,检查后=0,最大年龄=0 过期:0 语用: 无缓存
【问题讨论】:
@PaulCrovella 我在允许标题上没有 *,只有在允许来源上没问题,它不是重复的 检查web服务器是否移除了header。 你能详细说明吗,我很确定 您的所有标题都将被忽略。还要注意内容类型。确保确定您没有出现“标头已发送”错误情况。 【参考方案1】:Charlotte Dunois 的评论指明了方向 我在我的 .htaccess 文件中添加了以下行
Header add Access-Control-Allow-Origin "*"
【讨论】:
此外,重要的是要了解,如果 PHP 不处理来自浏览器的 OPTIONS 请求,浏览器将看不到您在 PHP 中设置的标头。因此,就像您在答案中发现的那样,您要么需要在服务器级别设置标头,要么告诉 apache 将 HTTP OPTIONS 方法请求传递给 PHP 并自己处理。【参考方案2】:我遇到了类似的问题,问题是所请求的资源位于一个目录中,该目录通过驻留在所述目录中的 .htaccess 文件应用了目录隐私。删除目录隐私允许 php 标头按预期运行。
【讨论】:
以上是关于未在 PHP 上设置 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章
使用 CURLOPT_HTTPHEADER 设置 CURL 标头会产生 CORS 问题
AWS Api Gateway 未在 204 上设置 CORS
未设置 CORS 标头 - 我可以请求图像 url,然后将其返回给自己吗?