allowedOrigins在akka http服务器上不起作用

时间:2017-02-24 11:09:38

标签: scala xmlhttprequest cors akka-http

我在localhost上设置了一个端口8091的akka​​ http服务器。我使用XMLHttpRequest POST从客户端向它发送数据,但它显示警告我的跨源请求被阻止,因为“Access-Control-Allow-原点“标题不存在。所以,我添加了CORS支持。我的代码如下:

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.Route
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.headers.HttpOriginRange.*
import ch.megard.akka.http.cors.CorsDirectives._
import ch.megard.akka.http.cors.CorsSettings
import scala.concurrent.Future

object Collector{

  def main(args: Array[String]): Unit = {
   implicit val system = ActorSystem("collector")
   implicit val materializer = ActorMaterializer()
   implicit val defaultDispatcher = system.dispatcher
   val settings = CorsSettings.defaultSettings.copy(allowedOrigins = *)
   val routes: Route = cors(settings) {
     path("event") {
       post {
          parameters('uuid.as[String], 'url.as[String]) { (uuid, url) =>
        complete {
          Future {
            println("Data is received")
            println("UUID is : " + uuid + " & URL is : " + url)
            System.currentTimeMillis().toString
          }
         }
       }
     }
    }
  }
  Http().bindAndHandle(routes, "localhost", 8091)
  println("server started at 8091")
 }
}

但我的请求仍被阻止,我也无法在服务器上看到任何数据。如果我通过curl命令从终端发送POST请求,它正在工作。 在网络选项卡中,它显示404状态。我无法理解为什么会出现这种行为。 请指导我在这里做什么。提前致谢。

1 个答案:

答案 0 :(得分:0)

我通过改变发送XMLHttpRequest的方式解决了我的问题。 现在我的代码看起来像:

val xhr = new dom.XMLHttpRequest()
val url="http://localhost:8090/event?&uuid="+dom.window.localStorage.getItem("uuid")+"&url="+dom.window.localStorage.getItem("url") 
xhr.open("POST",url )
xhr.send()

而不是 -

val xhr = new dom.XMLHttpRequest()
val url="http://localhost:8090/event
xhr.open("POST",url ) 
xhr.send(s"uuid=${dom.window.localStorage.getItem("uuid")}&url=${dom.window.localStorage.getItem("url")}")