本地蒸气项目的预检请求(选项)失败
Preflight requests (OPTIONS) failing for local vapor project
我使用 Vapor 框架创建了一个用 Swift 编写的基本后端。我在我的机器上本地 运行 它,所以可以在 http://localhost:8080
.
到达它
对于我正在从事的项目,我也在构建前端,它是使用 ReactJS 构建的,可以在 http://localhost:3000
.
访问
在 Postman 中调用我的后端时,使用以下信息,请求工作正常并且在数据库中创建了用户:
方法
POST/用户
Headers
Content-Type: application/json
接受:application/json
Body
{
email: "email@example.com
password: "12345"
}
现在,当从本地前端使用相同的 body 和 headers 调用相同的方法时,我的请求立即失败,没有任何响应:
当我检查响应时,我发现所有 body 和 headers 都已正确发送,但没有响应。
我在谷歌上搜索了一下,意识到 Postman(及类似的)的行为与浏览器不同,我应该检查该方法是否适用于 OPTIONS
,而不是 POST
。我再次调用了该方法:OPTIONS /user
,它在 Postman 中也失败了:
唯一的区别是,在 Postman 中,我收到的回复是 "Result not found",如您在屏幕截图中所见。
我想,这可能与 API 调用的 url 中的 localhost
有关,因为前端也在本地主机上 运行。所以我使用 ngrok 转发我的端口 8080(后端),然后调用 *.ngrok.io
url,而不是 localhost:8080
。运气不好。
我还尝试使用我机器的网络 IP 地址,而不是 localhost
。仍然没有运气。
我该怎么办?
如果您按如下方式配置后端的 CORS 设置,它应该可以工作:
蒸汽 4
let corsConfiguration = CORSMiddleware.Configuration(
allowedOrigin: .all,
allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
allowedHeaders: [.accept, .authorization, .contentType, .origin, .xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
app.middleware.use(CORSMiddleware(configuration: corsConfiguration))
蒸汽 3
let corsConfiguration = CORSMiddleware.Configuration(
allowedOrigin: .all,
allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
allowedHeaders: [.accept, .authorization, .contentType, .origin, .xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
middlewares.use(CORSMiddleware(configuration: corsConfiguration))
services.register(middlewares)
我使用 Vapor 框架创建了一个用 Swift 编写的基本后端。我在我的机器上本地 运行 它,所以可以在 http://localhost:8080
.
到达它
对于我正在从事的项目,我也在构建前端,它是使用 ReactJS 构建的,可以在 http://localhost:3000
.
在 Postman 中调用我的后端时,使用以下信息,请求工作正常并且在数据库中创建了用户:
方法
POST/用户
Headers
Content-Type: application/json
接受:application/json
Body
{
email: "email@example.com
password: "12345"
}
现在,当从本地前端使用相同的 body 和 headers 调用相同的方法时,我的请求立即失败,没有任何响应:
当我检查响应时,我发现所有 body 和 headers 都已正确发送,但没有响应。
我在谷歌上搜索了一下,意识到 Postman(及类似的)的行为与浏览器不同,我应该检查该方法是否适用于 OPTIONS
,而不是 POST
。我再次调用了该方法:OPTIONS /user
,它在 Postman 中也失败了:
唯一的区别是,在 Postman 中,我收到的回复是 "Result not found",如您在屏幕截图中所见。
我想,这可能与 API 调用的 url 中的 localhost
有关,因为前端也在本地主机上 运行。所以我使用 ngrok 转发我的端口 8080(后端),然后调用 *.ngrok.io
url,而不是 localhost:8080
。运气不好。
我还尝试使用我机器的网络 IP 地址,而不是 localhost
。仍然没有运气。
我该怎么办?
如果您按如下方式配置后端的 CORS 设置,它应该可以工作:
蒸汽 4
let corsConfiguration = CORSMiddleware.Configuration(
allowedOrigin: .all,
allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
allowedHeaders: [.accept, .authorization, .contentType, .origin, .xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
app.middleware.use(CORSMiddleware(configuration: corsConfiguration))
蒸汽 3
let corsConfiguration = CORSMiddleware.Configuration(
allowedOrigin: .all,
allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
allowedHeaders: [.accept, .authorization, .contentType, .origin, .xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
middlewares.use(CORSMiddleware(configuration: corsConfiguration))
services.register(middlewares)