allowedOrigins 在 akka http 服务器中不起作用
allowedOrigins not working in akka http server
我在本地主机上设置了一个端口为 8091 的 akka http 服务器。我正在使用 XMLHttpRequest POST 从客户端向它发送数据,但它显示警告我的 cross-origin 请求被阻止因为 "Access-Control-Allow-Origin" header 不存在。因此,我为其添加了 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 状态。我无法理解为什么它会表现出这种行为。
请指导我在这里做什么。提前致谢。
我通过更改发送 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")}")
我在本地主机上设置了一个端口为 8091 的 akka http 服务器。我正在使用 XMLHttpRequest POST 从客户端向它发送数据,但它显示警告我的 cross-origin 请求被阻止因为 "Access-Control-Allow-Origin" header 不存在。因此,我为其添加了 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 状态。我无法理解为什么它会表现出这种行为。 请指导我在这里做什么。提前致谢。
我通过更改发送 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")}")