quinta-feira, 23 de outubro de 2014

Tudo o que você precisa saber sobre CORS

Primeiro de tudo, a documentação: http://www.w3.org/TR/cors/
Segundo, como configurar no IIS 7: http://i-liger.com/article/cross-domain-http-request
Como configurar cors no IIS 6: http://enable-cors.org/server_iis6.html
É importante salientar que essa configuração também é possível via web.config. Como o web.config é hierárquico, hereditário e combinatório, então você pode colocar um web.config adicional pequenininho com cabeçalhos só para permitir CORS nas páginas de um diretório, em vez da aplicação inteira.
Se a configuração não for para a aplicação inteira nem para uma pasta inteira temos que colcoar cabeçalhos http na página. Os cabeçalhos são:
  • Access-Control-Allow-Origin -> indica quais domínios podem fazer um request no seu, colocando * permite todos os domínios.
  • Access-Control-Allow-Methods -> indica quais métodos são permitidos o cliente consultar no seu domínio. Não adianta colocar só post ou get, pois o client pode mandar uma requisição head para saber encoding e contenttype antes, ou uma requisição options, para saber mais configurações (é o browser / javascript que manda esses métodos), portanto, permita GET, POST, PUT, DELETE, HEAD, DEBUG, OPTIONS
  • Access-Control-Allow-Headers -> indica quais headers o client pode solicitar, configurar Content-Type, Accept
  • Access-Control-Max-Age -> indica quantos segundos um request já atendido deveria ser mantido em cache. Muita gente coloca 1728000, mas eu acho isso muito tempo. 72000 (20 horas) é um número muito mais aceitável, considerando que mesmo um conteúdo estático como o de um e-learning pode mudar de um dia para o outro.
Um exemplo de web.config para um único diretório é:

    
        
            
                
                
                
                                                               
            
        
    


Também é possível fazer isso em uma única página, colocando, como primeiro código a ser executado no page_load, o código
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, HEAD, DEBUG, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "72000");
As configurações no IIS valem para todas as páginas, enquanto que as configurações via web.config são para um diretório e o código acima para uma única página. Todos eles representam a mesma configuração.
Mais informações e exemplos: http://encosia.com/using-cors-to-access-asp-net-services-across-domains/

Nenhum comentário:

Postar um comentário

Postagens populares

Marcadores

delphi (60) C# (31) poo (21) Lazarus (19) Site aos Pedaços (15) sql (13) Reflexões (10) .Net (9) Humor (9) javascript (9) ASp.Net (8) api (8) Básico (6) Programação (6) ms sql server (5) Web (4) banco de dados (4) HTML (3) PHP (3) Python (3) design patterns (3) jQuery (3) livros (3) metaprogramação (3) Ajax (2) Debug (2) Dicas Básicas Windows (2) Pascal (2) games (2) linguagem (2) música (2) singleton (2) tecnologia (2) Anime (1) Api do Windows (1) Assembly (1) Eventos (1) Experts (1) GNU (1) Inglês (1) JSON (1) SO (1) datas (1) developers (1) dicas (1) easter egg (1) firebird (1) interfaces (1) introspecção (1) memo (1) oracle (1) reflexão (1)