API 服务器的 React 代理问题
React proxy issue with the API server
我是react项目部署的新手。 API 服务器是 Laravel 项目,托管在 Siteground 上。
我确信 APIs 是 Postman 的作品。 React 项目在 localhost:3000
上运行。为了使用 API 获取一些数据,我将 proxy: "http://api server domain"
添加到 package.json
.
当我要获取数据时它总是说"Not allowed method"。
所以我在本地主机上托管了 API 服务器。在这种情况下,我将 proxy: "http://localhost:8000
添加到 package.json 中,效果很好。
我该如何解决这个问题?
您似乎遇到了 CORS(Cross-Origin 资源共享)问题。
根据 MDN,CORS 是一种机制,它使用额外的 HTTP headers 告诉浏览器为一个来源的 Web 应用程序 运行 提供从不同来源访问选定资源的权限。 Web 应用程序在请求来源(域、协议或端口)与其自身不同的资源时执行 cross-origin HTTP 请求。
cross-origin 请求示例:front-end JavaScript 代码来自 https://domain-a.com uses XMLHttpRequest to make a request for https://domain-b.com/data.json。
出于安全原因,浏览器限制 cross-origin 从脚本发起的 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循 same-origin 策略。这意味着使用这些 APIs 的 Web 应用程序只能从加载应用程序的同一来源请求资源,除非来自其他来源的响应包含正确的 CORS headers。
更多技术细节HERE。
求解:
您需要在 API 服务上启用 CORS。
如果您无权配置 Apache,您仍然可以从 PHP 脚本发送 header。这是将以下内容添加到您的 PHP 脚本的情况:
<?php header("Access-Control-Allow-Origin: *");
以下 link 显示如何:How to enable CORS on PHP
由于您正在使用 Laravel,使用中间件可能是解决 CORS 情况的好方法。
CORS Middleware for Laravel 应该能帮到你。
我是react项目部署的新手。 API 服务器是 Laravel 项目,托管在 Siteground 上。
我确信 APIs 是 Postman 的作品。 React 项目在 localhost:3000
上运行。为了使用 API 获取一些数据,我将 proxy: "http://api server domain"
添加到 package.json
.
当我要获取数据时它总是说"Not allowed method"。
所以我在本地主机上托管了 API 服务器。在这种情况下,我将 proxy: "http://localhost:8000
添加到 package.json 中,效果很好。
我该如何解决这个问题?
您似乎遇到了 CORS(Cross-Origin 资源共享)问题。
根据 MDN,CORS 是一种机制,它使用额外的 HTTP headers 告诉浏览器为一个来源的 Web 应用程序 运行 提供从不同来源访问选定资源的权限。 Web 应用程序在请求来源(域、协议或端口)与其自身不同的资源时执行 cross-origin HTTP 请求。
cross-origin 请求示例:front-end JavaScript 代码来自 https://domain-a.com uses XMLHttpRequest to make a request for https://domain-b.com/data.json。
出于安全原因,浏览器限制 cross-origin 从脚本发起的 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循 same-origin 策略。这意味着使用这些 APIs 的 Web 应用程序只能从加载应用程序的同一来源请求资源,除非来自其他来源的响应包含正确的 CORS headers。
更多技术细节HERE。
求解:
您需要在 API 服务上启用 CORS。
如果您无权配置 Apache,您仍然可以从 PHP 脚本发送 header。这是将以下内容添加到您的 PHP 脚本的情况:
<?php header("Access-Control-Allow-Origin: *");
以下 link 显示如何:How to enable CORS on PHP
由于您正在使用 Laravel,使用中间件可能是解决 CORS 情况的好方法。
CORS Middleware for Laravel 应该能帮到你。