2017-02-24 26 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")}")