Stavo tentando di implementare il supporto CORS su un server Spray (versione 1.1-20131011 in cui le intestazioni cors sono già supportate).Le intestazioni di risposta CORS non funzionano in Spray quando richiesto dal browser
Attualmente, il codice del server è simile al seguente:
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)
)
}
ed è usato come questo
defaultCORSHeaders {
options {
complete {
StatusCodes.OK
}
} ~
post {
path("path") {
//response
}
}
Le risposte sia per POST e opzioni metodi sono come previsto quando si utilizza ricciolo. Tuttavia dal browser, ottengo che Origin non è consentito da Access-Control-Allow-Origin (Chrome) o Error 415 Tipo di supporto non supportato (Firefox) e sembra che la richiesta POST non sia nemmeno stata inviata.
Il codice jQuery che richiede è semplicemente la seguente:
$(document).ready(function() {
$.post(url,
{
'params': "params",
},
function (data) {
//handle response
}
);
});
Ho letto le specifiche CORS e tutte le risorse che ho trovato, ha tentato ogni possibile combinazione di intestazioni Access-Control-Allow- (con e senza Access-Control-Allow-Credentials, contenuto diverso di Access-Control-Allow-Headers e Access-Control-Allow-Methods, Access-Control-Allow-Origin impostato su * o la singola Origin ecc.). Ho anche provato a eseguire lo script da disco (Origine null), webserver (Origin localhost: 8888) e server remoto (URL standard di origine), perché alcuni browser apparentemente bloccano richieste con origine locale, ma sempre lo stesso risultato negativo.
Qualsiasi aiuto su come ottenere questo funzionamento sarebbe molto apprezzato.
risolto ancora? – Phil