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

1 篇文章 0 订阅

我们平时在开发过程中经常用到前后端分离,当前端喝后台分别部署的时候则会存在跨域问题(协议,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")))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值