Em nosso projeto atual, estamos usando o Spray para desenvolver uma API RESTful. Precisávamos habilitar o suporte CORS para nosso javascript e não consegui encontrar uma maneira fácil de fazer isso. O que eu queria era:
Uma diretiva que pode ser usada no nível mais alto de minhas rotas que ativa o suporte CORS para todas as rotas contidas nela. Que significa:
- Responda às solicitações OPTIONS com os cabeçalhos corretos apenas para os caminhos registrados (ou seja, OPTIONS / algo-que-não-existe deve resultar em um 404, não um 405
- Adicione o cabeçalho Access-Control-Allow-Origin a cada solicitação
Depois de pesquisar um pouco, descobri que o spray tem um suporte muito bom para algo assim.
Para a primeira parte, responder a OPÇÕES, é tão fácil quanto olhar a resposta, ver se ela será rejeitada e, se a causa da rejeição for ‘MethodNotSupported’, isso significa que há uma rota em algum lugar dentro de seu CORS diretiva que responderia a este uri com um método diferente. Ou seja, se a solicitação era uma opção, temos que responder OK, pois é uma solicitação de comprovação. Podemos até construir a lista de métodos permitidos para Access-Control-Allow-Methods a partir da lista de rejeições.
Para a segunda parte, tudo o que precisamos fazer é adicionar o cabeçalho à resposta.
Você pode encontrar o código aqui: https://gist.github.com/joseraya/176821d856b43b1cfe19