php - 无法让 CORS 在 CodeIgniter 和 React 应用程序之间工作

标签 php codeigniter http reactjs cors

我无法让我的 React 应用程序与我在计算机上托管的 API 进行通信。我对 CodeIgniter 不太熟悉,因此可以安全地假设这部分有错误/误解。我尝试将 header('Access-Control-Allow-Origin:*'); 添加到 application/config/rest.php 的顶部以及其他一些文件。当我发出 api 请求时,显然首先发送了飞行前 OPTIONS 请求,如下所示:

Request Headers:
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: GET
Access-Control-Request-Headers: apikey
Origin: http://localhost:3000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Response Headers:
Access-Control-Allow-Origin: *
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: close
Content-Type: text/html; charset=UTF-8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Host: localhost:8000
Pragma: no-cache
Set-Cookie: ci_session=3ba4cibif5sdgtfjjopmokt8k2fc1c1j; expires=Fri, 24-Feb-2017 19:18:05 GMT; Max-Age=7200; path=/; HttpOnly
X-Powered-By: PHP/5.5.38

OPTIONS 响应是 200。在服务器上,API 为我尝试获取的资源播种并以 200 响应(但我的应用程序看不到这个)。 React 前端看到并记录了一个 super 无用的

Error: Network Error
Stack trace:
createError@http://localhost:3000/bundle.js line 4801 > eval:15:15
handleError@http://localhost:3000/bundle.js line 4789 > eval:87:14

错误,我的应用程序甚至从未发出 GET 请求(根据 Firefox 的开发工具)。 OPTION 的响应数据完全为空。这是怎么回事?

最佳答案

原来我需要检查它是否是服务器上的预检请求,并做出适当的响应:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS") {
    die();
}

然后我可以使用 header 中的 api key 发出正常请求。

来自 https://stackoverflow.com/a/19310265/419194

关于php - 无法让 CORS 在 CodeIgniter 和 React 应用程序之间工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42445086/

相关文章:

php - PHP substr() 的 Ruby 等价物是什么?

php - 将数据发布到无表单的 URL

php - 使用 file_get_contents 从 url 获取图像

PHP 代码未在日期时间中识别 AM 和 PM

php - 如何使用文本区域从 codeigniter 向数据库插入并显示回车键或新行

android - 不允许 Asynchttpclient 'https'

sql - 数据库错误 : Duplicate Entry

MySQL 事件记录问题

HTTP接受协商算法

通过 API 的 Facebook 智能好友列表