sexta-feira, 16 de dezembro de 2016

Testando Ajax requests em seu endereço local com Google Chrome

Daí você faz o seu site muito louco, cheio de coisa, vai testar no Google Chrome e pá, não funciona.
Failed to load resource: the server responded with a status of 500 (Internal Server Error)"The anti-forgery token could not be decrypted. If this application is hosted by a Web Farm or cluster, ensure that all machines are running the same version of ASP.NET Web Pages and that the <machineKey> configuration specifies explicit encryption and validation keys. AutoGenerate cannot be used in a cluster."


Dá uns erros de acesso não autorizado (401) e você desconfia que é a Same Origin Policy, então o que você faz Habilita o CORS no seu server, altera o web.config, ou as configurações do IIS e permite os cross origin requests.

 <httpProtocol>
      <customHeaders>
    

     <add name="Access-Control-Allow-Origin" value="*" />
     <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
     <add name="Access-Control-Allow-Credentials" value="True" />    
    
      </customHeaders>
    </httpProtocol>

Mas não funciona.

E pior, você testa no IE e funciona, no Edge e funciona. Aí você pensa: "No IE funciona porque o IE é uma merda, não é seguro. Tenho que fazer direito, e vai funcionar!!".

Aí você testa no Firefox e funciona, testa naquele browser mais esquisito que veio num CD que sua vó comprou no Carrefour e funciona. Você percebeu que o problema é só com o chrome????

Aí você fuça em mais uma dezena de foruns e tópicos na internet até perceber que você fez tudo certinho, o problema é o Chrome. Existe um bug reportado no Chrome desde 2010 E AINDA NÃO RESOLVIDO onde o browser do Google simplesmente bloqueia toda e qualquer requisição ajax para localhost, chumbado no código, simplesmente porque é localhost.

Para resolver esse problema você pode acessar seu site (que você está desenvolvendo e testando localmente) pelo endereço 127.0.0.1 [:porta opcional se for diferente de 80] (que é para onde localhost deveria resolver).

Você também pode usar o domínio lvh.me  [:porta opcional se for diferente de 80] que também resolve para o mesmo IP de loopback e todos os subdomínios dele são resolvidos para o mesmo IP.

Aprendi isso enquanto configurava o DotNetNuke 9 (dnn9) no meu IIS Local. O dnn9 tem um menu de configuração e administração lateral (diferente do menu superior do dnn8) que é montado e aberto via requisições ajax. Pelo IE funcionava, pelo chrome dava uns erros esquisitos, como mencionado acima.

Fikdik.

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)