Usando grunt-connect-proxy com HTTPS

Olá, está tendo problemas com o grunt-connect-proxy para destino HTTPS?

No seu Gruntfile, na configuração do proxy, tente adicionar a opção protocol como está no exemplo a seguir. Atente-se aos dois-pontos que seguem o https, eles fazem a diferença.

{
  context: '/api',
  host: 'mybackend.com',
  port: 443,
  https: true,
  rewrite: {
    '^/api': '/backend/api'
  },
  protocol: 'https:'
}

Este macete funciona pelo menos no grunt-connect-proxy versão 0.2.0, e  no http-proxy versão 1.11.3 — responsável pela implementação do proxy.

A questão é que internamente, o http-proxy utiliza esta opção para definir em qual protocolo deve se comunicar. Isso pode ser constatado no seguinte arquivo do módulo: lib/http-proxy/passes/web-incomming.js. Segue recorte iniciado na linha 108:

var proxyReq = (options.target.protocol === 'https:' ? https : http).request(
    common.setupOutgoing(options.ssl || {}, options, req)
);

Assim, o problema não está na URL e/ou porta utilizada na chamada, mas sim no protocolo. Para debugar melhor o problema, e checar se o request está sendo feito sem criptografia, o interessado pode utilizar o Wireshark.

Até.

Esta entrada foi publicada em Bugs, NodeJS e marcada com a tag , , , . Adicione o link permanente aos seus favoritos.