Cors 如何从不同的域调用Vapor?

Cors 如何从不同的域调用Vapor?,cors,vapor,Cors,Vapor,我只有一条简单的路线。BE和FE在不同的域中,如何从FE调用BE以获得响应?铁是可以反应的 我尝试添加此处指定的设置:没有任何运气 FE拒绝没有HTTP状态错误代码的调用。已清除浏览器中的缓存 我试图将这些线添加到路线中,但运气不佳: public func routes(_ router: Router) throws { router.grouped(CORSMiddleware()).post([Page].self, at: "/releases") { (req, page

我只有一条简单的路线。BE和FE在不同的域中,如何从FE调用BE以获得响应?铁是可以反应的

我尝试添加此处指定的设置:没有任何运气

FE拒绝没有HTTP状态错误代码的调用。已清除浏览器中的缓存

我试图将这些线添加到路线中,但运气不佳:

public func routes(_ router: Router) throws {

    router.grouped(CORSMiddleware()).post([Page].self, at: "/releases") { (req, pages) -> Future<[Page]> in
       req.response().http.headers.add(name: "Access-Control-Expose-Headers", value:"Access-Control-Allow-Origin")
        req.response().http.headers.add(name: "Access-Control-Allow-Origin", value:"*")

public func路由(uu路由器:路由器)抛出{
router.grouped(CORSMiddleware()).post([Page].self,在:“/releases”){(req,pages)->未来
req.response().http.headers.add(名称:“访问控制公开头”,值:“访问控制允许源代码”)
req.response().http.headers.add(名称:“访问控制允许源”,值:“*”)
当从
邮递员
调用BE时,它工作,而不是从FE。甚至从FE也不会命中断点

我在浏览器中看到一些错误,BE完全没有响应:

说:

如果抛出的错误立即返回到客户端,则必须在
ErrorMiddleware
之前列出
CORSMiddleware
;否则返回的HTTP错误响应将没有CORS头,浏览器无法读取

因此,您必须在
ErrorMiddleware
之前注册
CORSMiddleware
,如下所示:

var middlewares = MiddlewareConfig()
let corsConfiguration = CORSMiddleware.Configuration(
    allowedOrigin: .all,
    allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
    allowedHeaders: [.accept, .authorization, .contentType, .origin, .xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
let corsMiddleware = CORSMiddleware(configuration: corsConfiguration)
middlewares.use(corsMiddleware)
middlewares.use(FileMiddleware.self)
middlewares.use(ErrorMiddleware.self)
services.register(middlewares)
另外值得注意的是,您应该只在vapor应用程序中配置访问控制检查,或者直接在服务器上配置访问控制检查,例如在NGINX配置中。如果同时设置这两种检查,访问控制将失败。

比如:

如果抛出的错误立即返回到客户端,则必须在
ErrorMiddleware
之前列出
CORSMiddleware
;否则返回的HTTP错误响应将没有CORS头,浏览器无法读取

因此,您必须在
ErrorMiddleware
之前注册
CORSMiddleware
,如下所示:

var middlewares = MiddlewareConfig()
let corsConfiguration = CORSMiddleware.Configuration(
    allowedOrigin: .all,
    allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
    allowedHeaders: [.accept, .authorization, .contentType, .origin, .xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
let corsMiddleware = CORSMiddleware(configuration: corsConfiguration)
middlewares.use(corsMiddleware)
middlewares.use(FileMiddleware.self)
middlewares.use(ErrorMiddleware.self)
services.register(middlewares)

另外值得注意的是,您应该只在vapor应用程序中配置访问控制检查,或者直接在服务器上配置访问控制检查,例如在NGINX配置中。如果您同时设置这两个,访问控制将失败。

为什么要发布代码图片?确切地说,“没有任何运气”是什么意思(给出一个答案)?你为什么张贴代码的图片?确切地说,“没有任何运气”是什么意思?