akka-http使用CORS(跨域资源共享)实现跨域请求

    xiaoxiao2021-04-16  30

    我们平时在开发过程中经常用到前后端分离,当前端喝后台分别部署的时候则会存在跨域问题(协议,ip,端口中任一个不同),常用的方法有使用jsonp跨域(只支持get请求),或者使用nginx反向代理等。这里介绍cors(跨域资源共享)方法。

    简介

    跨源资源共享标准通过新增一系列 HTTP 头,让服务器能声明哪些来源可以通过浏览器访问该服务器上的资源。另外,对那些会对服务器数据造成破坏性影响的 HTTP 请求方法(特别是 GET 以外的 HTTP 方法,或者搭配某些MIME类型的POST请求),标准强烈要求浏览器必须先以 OPTIONS 请求方式发送一个预请求(preflight request),从而获知服务器端对跨源请求所支持 HTTP 方法。在确认服务器允许该跨源请求的情况下,以实际的 HTTP 请求方法发送那个真正的请求。服务器端也可以通知客户端,是不是需要随同请求一起发送信用信息(包括 Cookies 和 HTTP 认证相关数据)

    CORS在akka-http中的使用

    服务器在接收请求之后会在响应头中添加如下信息

    Access-Control-Allow-Origin: http://wangchunze.top Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: X-PINGOTHER Access-Control-Max-Age: 1728000

    其中通过Access-Control-Allow-Origin指定接收跨域的地址,Access-Control-Allow-Methods表明服务器可以接受POST, GET和OPTIONS的请求方法,Access-Control-Allow-Headers表示服务器可接受自定义头X-PINGOTHER,Access-Control-Max-Age代表有效时间。

    具体实现如下:

    在build.sbt中添加依赖, github地址:https://github.com/lomigmegard/akka-http-cors

    libraryDependencies += "ch.megard" %% "akka-http-cors" % "0.2.1"

    代码中

    import ch.megard.akka.http.cors.scaladsl.CorsDirectives._ import ch.megard.akka.http.cors.scaladsl.settings.CorsSettings trait OrderService{ private val settings = CorsSettings.defaultSettings.copy( allowedOrigins = HttpOriginRange.* ) val createOrder = (path("create") & post & pathEndOrSingleSlash&cors(settings)){ complete("") } }

    指定特定网址的话

    private val settings = CorsSettings.defaultSettings.copy( allowedOrigins = HttpOriginRange(HttpOrigin("http://example.com")))
    转载请注明原文地址: https://ju.6miu.com/read-672586.html

    最新回复(0)