我试图在 Spray 服务器上实现 CORS 支持(版本 1.1-20131011,其中已经支持 cors 标头)。
目前,服务器代码如下所示:
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 方法的响应都符合预期。但是,从浏览器中,我得到 Origin is not allowed by Access-Control-Allow-Origin (Chrome) 或 Error 415 Unsupported Media Type (Firefox),而且似乎根本没有发送 POST 请求。
请求jQuery代码如下:
$(document).ready(function () {
$.post(url,
{
'params': "params",
},
function (data) {
//handle response
}
);
});
我已经阅读了 CORS 规范和我能找到的所有资源,尝试了 Access-Control-Allow-headers 的任何可能组合(有和没有 Access-Control-Allow-Credentials、Access-Control-Allow-Headers 的不同内容和Access-Control-Allow-Methods、Access-Control-Allow-Origin 设置为 * 或单个 Origin 等)。我还尝试从磁盘(Origin null)、网络服务器(Origin localhost:8888)和远程服务器(Origin 标准 url)运行脚本,因为某些浏览器显然会阻止来自本地的请求,但总是相同的负面结果。
任何帮助如何使这项工作将不胜感激。