jquery - 当浏览器请求时,CORS 响应 header 在 Spray 中不起作用

标签 jquery scala cors spray http-options-method

我试图在 Spray 服务器上实现 CORS 支持(版本 1.1-20131011,其中已经支持 cors header )。

目前,服务器代码如下所示:

trait DefaultCORSDirectives { this: Directives =>
  def defaultCORSHeaders = respondWithHeaders(
      `Access-Control-Allow-Origin`(AllOrigins),
      `Access-Control-Allow-Methods`(HttpMethods.GET, HttpMethods.POST, HttpMethods.OPTIONS, HttpMethods.DELETE,
      HttpMethods.CONNECT, HttpMethods.DELETE, HttpMethods.HEAD, HttpMethods.PATCH, HttpMethods.PUT, HttpMethods.TRACE),
      `Access-Control-Allow-Headers`("Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Accept-Language, Host," +
    " Referer, User-Agent, Overwrite, Destination, Depth, X-Token, X-File-Size, If-Modified-Since, X-File-Name, Cache-Control"),
      `Access-Control-Allow-Credentials`(true),
      `Access-Control-Max-Age`(3600)
    )
}

并且像这样使用

  defaultCORSHeaders {
      options {
        complete {
          StatusCodes.OK
        }
      } ~
      post {
        path("path") {
          //response
      }
   }

使用curl 时,POST 和OPTIONS 方法的响应均符合预期。但是,从浏览器中,我得到 Access-Control-Allow-Origin (Chrome) 不允许 Origin 或错误 415 不支持的媒体类型 (Firefox),并且似乎根本没有发送 POST 请求。

请求的jQuery代码如下:

$(document).ready(function () {
        $.post(url,
            {
               'params': "params",
            },
            function (data) {
                //handle response
            }
    );
});

我已经阅读了 CORS 规范和我能找到的所有资源,尝试了 Access-Control-Allow- header 的任何可能组合(有和没有 Access-Control-Allow-Credentials、Access-Control-Allow 的不同内容) - header 和 Access-Control-Allow-Methods、Access-Control-Allow-Origin 设置为 * 或单个 Origin 等)。我还尝试从磁盘(Origin null)、网络服务器(Origin localhost:8888)和远程服务器(Origin standard url)运行脚本,因为某些浏览器显然会阻止来自本地的请求,但总是相同的负面结果。

任何有关如何使其正常工作的帮助将不胜感激。

最佳答案

我没有使用指令,但我尝试了 rawheader 并且它有效。

代码如下:

 path("ping"){
   get{
     respondWithMediaType(`application/json`){
       respondWithHeader(RawHeader("Access-Control-Allow-Origin","*")){
         complete{
           jsonPrefix + """{"result": "PONG"}"""
         }
       }
     }
   }
 }

关于jquery - 当浏览器请求时,CORS 响应 header 在 Spray 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23396790/

相关文章:

node.js - 使用node上传图片到Heroku并获取其url

javascript - jQuery 工具提示定位问题

javascript - Zebra Dialog - 获取输入文本框值

javascript - Telerik RadListBox 项目列表如何隐藏字符长度并显示工具提示?

scala - "Closures"是如何如此强大的抽象,以至于使用它来实现对象系统和基本控制结构?

java - Intellij 无法运行 Scala 代码

Firebase 存储不会启用 CORS

javascript - 如何仅在事件簿中的第一张幻灯片后显示后退按钮

parsing - 并行计算/解析列表元素(链接)

javascript - 如何使用 AJAX 加载外部 javascript 文件并知道加载失败?