首页 > 解决方案 > 尽管设置了 PHP 标头和 .htaccess 文件,但我收到了 CORS 错误

问题描述

我在安全地允许 CORS 方面取得了很多成功,但我尝试过使用另一个页面,但它不起作用。我希望有人能告诉我我错过了什么。我知道 * 是不安全的,但我正在尝试将站点名称作为变量消除。

.htaccess 文件

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

和我的 php 文件的顶部:

// Allow from any origin just for testing...
if (isset($_SERVER['HTTP_ORIGIN'])) {
    // in production, no *, but using my real domain
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");         

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

}

使用 ajax 请求访问 php 文件时,我收到:CORS 策略已阻止从源“ https://samesitename.com ”访问“ https://sitename.000webhostapp.com/ ”处的 XMLHttpRequest:无“访问权限” -Control-Allow-Origin' 标头存在于请求的资源上。

它在邮递员中工作。这是标题信息:

Date →Mon, 29 Apr 2019 18:50:03 GMT
Content-Type →text/html; charset=UTF-8
Transfer-Encoding →chunked
Connection →keep-alive
Access-Control-Allow-Origin →*
Access-Control-Allow-Headers →origin, x-requested-with, content-type
Access-Control-Allow-Methods →PUT, GET, POST, DELETE, OPTIONS
Server →awex
X-Xss-Protection →1; mode=block
X-Content-Type-Options →nosniff
X-Request-ID →18341eb6e5c7e5f483d8dd3a3a492b9c
Content-Encoding →gzip

更大的故事是我将主站点托管在不支持 PHP 的 firebase 上,因此我将 php 文件放在 000webhostapp.com 上作为解决方法。

标签: php.htaccesscors

解决方案


如果有人遇到类似问题的帖子,我的解决方案是仔细检查网址!!!

我发帖说我正在检查

https://sitename.000webhostapp.com/ 

当我应该参考

https://sitename.000webhostapp.com/php/mail.php

感谢@Phil 和@emix 强迫我检查细节。


推荐阅读