与API服务器反应代理问题

时间:2020-04-22 17:12:41

标签: php reactjs laravel proxy

我是React项目部署的新手。该API服务器是Laravel项目,它托管在Siteground中。

我确信API是Postman的作品。反应项目在localhost:3000上运行。为了使用API​​提取一些数据,我将proxy: "http://api server domain"添加到了package.json中。

当我要获取数据时,它总是显示“不允许的方法”。

因此,我已将API服务器托管在本地主机上。在这种情况下,我已经将proxy: "http://localhost:8000添加到package.json中,它可以正常工作。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您似乎遇到了 CORS (跨源资源共享)问题。

根据MDN,CORS是一种机制,它使用附加的HTTP标头来告知浏览器以使Web应用程序在一个来源运行,并从另一个来源访问选定的资源。当Web应用程序请求其来源(域,协议或端口)不同的资源时,它将执行跨域HTTP请求。

一个跨域请求的示例:https://domain-a.com提供的前端JavaScript代码使用XMLHttpRequest来向https://domain-b.com/data.json发出请求。

出于安全原因,浏览器限制了从脚本启动的跨域HTTP请求。例如,XMLHttpRequest和Fetch API遵循同源策略。这意味着使用这些API的Web应用程序只能从加载该应用程序的相同来源请求资源,除非来自其他来源的响应包括正确的CORS标头。

更多技术细节HERE

解决:

您需要在API服务上启用CORS。

如果您无权配置Apache,则仍然可以从PHP脚本发送标头。在您的PHP脚本中添加以下内容是一种情况:

 <?php header("Access-Control-Allow-Origin: *");

以下链接显示了如何:How to enable CORS on PHP

由于您使用的是Laravel,使用中间件可能是解决CORS情况的好方法。

CORS Middleware for Laravel应该可以为您提供帮助。