2017-02-24 107 views
0

我已经在本地主机上设置了一个AKK HTTP服务器,端口为8091.我使用XMLHttpRequest POST从客户端向它发送数据,但它显示警告说我的跨源请求被阻止,因为“Access-Control-Allow-Origin”标题不存在。所以,我添加了CORS支持。我的代码看起来像:allowedOrigins不工作在AKK HTTP服务器

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状态。我无法理解它为什么会显示这种行为。 请指导我在这里做什么。提前致谢。

回答

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")}")