您的位置:首页 > 理论基础 > 计算机网络

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

2017-04-14 10:24 1161 查看
我们平时在开发过程中经常用到前后端分离,当前端喝后台分别部署的时候则会存在跨域问题(协议,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")))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  akka-http cors跨域