Php 当响应代码为';时,飞行前请求失败CORS(没有HTTP请求OK状态);硬编码

Php 当响应代码为';时,飞行前请求失败CORS(没有HTTP请求OK状态);硬编码,php,cors,backend,Php,Cors,Backend,我使用的是一个简单的PHP后端和角度前端。我和CORS有麻烦。我已经设置了正确的头球,仍然面对科尔斯的阻挡。我尝试了很多东西,并注意到以下几点 因为我期望有很多PHP文件,所以我希望在响应中保持一致。因此,我创建了一个名为httpHelper.PHP的PHP文件,并添加了一个函数,用于设置标题、响应状态代码并返回响应 下面是httpHelper.php <?php function json_response($code = 200, $message = null) { hea

我使用的是一个简单的PHP后端和角度前端。我和CORS有麻烦。我已经设置了正确的头球,仍然面对科尔斯的阻挡。我尝试了很多东西,并注意到以下几点

因为我期望有很多PHP文件,所以我希望在响应中保持一致。因此,我创建了一个名为httpHelper.PHP的PHP文件,并添加了一个函数,用于设置标题、响应状态代码并返回响应

下面是httpHelper.php

<?php

function json_response($code = 200, $message = null)
{
    header_remove();
    http_response_code($code);
    header('Content-Type: application/json');
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
    
    return "{ \"detail\":". $message."}";
}
我面对的是CORS块

访问位于的XMLHttpRequest 'http://localhost:8080/checkFeedbackStatus.php"从源头上说, 'http://localhost:4200'已被CORS策略阻止:响应 飞行前请求未通过访问控制检查:它没有 HTTP ok状态

但是当同一个httpHelper.php使用恒定状态代码编码时,我没有问题

<?php

function json_response($code = 200, $message = null)
{
    header_remove();
    http_response_code(200);
    header('Content-Type: application/json');
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
    
    return "{ \"detail\":". $message."}";
}

除非您使用实际域,否则它将不起作用,因为它当前是针对CORS头的。
也许有几种方法可以让它发挥作用,但我只知道其中的两种

  • 在Xampp中使用代理
  • 使用Ngrok,这将为您提供公共域,以便在本地主机上进行环回
  • 如果您使用的是xampp,则可以编辑httpd.conf并在文件末尾添加代理,然后重新启动apache服务

    ProxyPass /checkStatus http://localhost:8080/checkFeedbackStatus.php
    ProxyPassReverse /checkStatus http://localhost:8080/checkFeedbackStatus.php
    
    对于Ngrok,您可以阅读文档 设置ngrok后,您可以使用任何端口将ngrok用作公共域

    ngrok http 8080
    

    请求类型不是POST,而是OPTIONS,因为错误告诉您这是飞行前请求。它还告诉你ti“没有ok状态”,所以首先要做的是找出它有什么样的状态。解决禁止错误的方式与解决内部服务器错误的方式大不相同。查看浏览器开发工具的“网络”选项卡。@Quentin是的,这就是问题所在。我正在发送405响应代码,用于除post之外的所有请求方法。其中包括选项。我不知道飞行前是选择型的。谢谢。
    ngrok http 8080