2017-02-24 54 views
1

我无法让我的React应用程序与我在计算机上托管的API进行通信。我不太熟悉CodeIgniter,因此假设在这一部分存在错误/误解是安全的。我已经尝试将header('Access-Control-Allow-Origin:*');添加到application/config/rest.php的顶部以及其他一些文件。当我做一个API请求,飞行前OPTIONS请求显然是首先发送,它看起来像:CORS无法在CodeIgniter和React应用程序之间工作

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 

响应中为200,在服务器上,该API种子我试图获取资源和回应200(但我的应用程序没有看到这一点)。该反应前端看到并记录超无益

Error: Network Error 
Stack trace: 
[email protected]://localhost:3000/bundle.js line 4801 > eval:15:15 
[email protected]://localhost:3000/bundle.js line 4789 > eval:87:14 

错误,我的应用程序甚至从来没有做(根据Firefox的开发工具)的GET请求。 OPTION的响应数据是完全空的。这里发生了什么?

回答

1

原来我需要检查,如果它是在服务器上的预检要求,并做出适当的反应:

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(); 
} 

然后我可以用我的头中的API密钥正常请求。

from https://stackoverflow.com/a/19310265/419194

相关问题