.NET Core versus Chrome 54 - Invalid request line

Com o recente lançamento de uma nova versão do .NET Core, a 1.1 (https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-net-core-1-1/), fui correndo atualizar um projeto que estou trabalhando para poder experimentar as novas funcionalidades.

Este é um projeto que expõe várias API (WebAPI), e por isso eu uso a ferramenta Postman (https://www.getpostman.com/), dentro do Chrome, para simular as requisições.

Entretanto, ao atualizar o projeto e suas respectivas bibliotecas e colocá-lo para rodar, ao acessá-lo tanto pelo Chrome (ele tem uma página inicial, não é só API) quanto pelo Postman, o erro abaixo começou a aparecer.

info: Microsoft.AspNetCore.Server.Kestrel[17] Connection id "0HL0J500CHGCA" bad request data: "Invalid request line: <0x16><0x03><0x01><0x00><0xB9><0x01><0x00><0x00><0xB5><0x03><0x03><0xD0><0x95>yq6<0x92><0xCA>6v<0xA9><0x0A>" Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException: Invalid request line: <0x16><0x03><0x01><0x00><0xB9><0x01><0x00><0x00><0xB5><0x03><0x03><0xD0><0x95>yq6<0x92><0xCA>6v<0xA9><0x0A>

Muito frustrante. Tentei até voltar a versão do .NET Core para 1.0. As chamadas continuaram dando erro, só que desta vez a mensagem era diferente.

Microsoft.AspNetCore.Server.Kestrel: Information: Connection id "0HL0J555RROF" bad request data: "Malformed request: MethodIncomplete"
Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException: Malformed request: MethodIncomplete

No Chrome, a mensagem era ERR_SSL_PROTOCOL_ERROR. Achei estranho pois a URL que eu acesso é http://localhost:5000/, sem SSL. Ao monitorar a chamada pelas ferramentas de desenvolvimento do Chrome, percebi que estava sendo retornado um código 307, pedindo para que a requisição fosse redirecionada para usar HTTPS.

Ferramenta de monitoração de rede do Chrome mostrando requisição 307 mandando o browser ir para url com https


Perdi boa parte do meu final de noite procurando uma forma de resolver, e acabei desistindo. Hoje, encontrei um bug aberto no Github do projeto do Kestrel: https://github.com/aspnet/KestrelHttpServer/issues/1217

Era exatamente o mesmo problema que eu tive! Em resumo, o problema é com a última versão do Chrome, a 54, pois eu conseguia trabalhar com a versão 53 sem problemas neste projeto com o .NET Core 1.0.

A solução para o problema é simples: ao invés de utilizar o endereço no localhost, se eu fizer a chamada apontando para o IP 127.0.0.1, tudo funciona normalmente!

Com isso, pude voltar a trabalhar tranquilo no projeto e fazer os testes. Quem estiver com esse mesmo sintoma, sugiro tentar mudar o endereço.

Obs. No mesmo bug no Github, é sugerido remover a entrada "localhost" das configurações do Chrome em "chrome://net-internals/#hsts", mas como trocar o endereço já funcionou para mim, eu nem fui atrás disso.

Abraços!

Comentários

Postagens mais visitadas deste blog

Trocando configurações padrão do Live TIM

Uma proposta de Clean Architecure com Modelo de Atores

Testes automatizados em sistemas autenticados com certificados digitais, usando Selenium e PhantomJS