O roteamento de solicitação de aplicativo do IIS altera 206 conteúdo parcial para 200

3

Eu configurei um servidor proxy reverso em um serviço de nuvem azul usando as regras de reconfiguração do IIS e o módulo de Roteiro de Solicitação de Aplicativo (de acordo com as instruções aqui . Tudo está funcionando bem, exceto para chamadas para os nós de extremidade que criei para fazer download de arquivos mp4. pode servir conteúdo parcial quando o pedido contém o cabeçalho do intervalo.O problema que estou tendo é que quando eu acertar o servidor diretamente, ele responde corretamente com 206 (conteúdo parcial) eo intervalo correto de bytes, mas às vezes quando eu bater o endpoints através do servidor proxy, ele responde com um 200, e todo o conteúdo do arquivo, o que provoca erros na reprodução de vídeo no Chrome.

Exemplo: Ao atingir o servidor diretamente com uma solicitação como esta:

GET server.domain.com/api/adFile/fileName Com cabeçalho: intervalo: bytes = 168-3922822

Eu recebo corretamente uma resposta 206. Aqui estão alguns dos cabeçalhos relevantes na resposta:

  • Cache-Control: no-cache
  • Pragma: no-cache
  • Comprimento do conteúdo: 3922655
  • Tipo de conteúdo: video / mp4
  • Conteúdo-MD5: f1 + K8OT8TEjvtlPU5iUY8a ==
  • Intervalo de conteúdo: bytes 168-3922822 / 3922823
  • Expira em: -1
  • Última modificação: Ter, 16 fev 2016 15:46:46 GMT
  • ETag: "0x8D336E86040C217"
  • Servidor: Microsoft-IIS / 8.0
  • X-AspNet-Version: 4.0.30319
  • X-Powered-By: ASP.NET

Ao atingir o servidor através do proxy reverso, com um pedido como este:

GET proxy.domain.com/api/adFile/fileName Com cabeçalho: intervalo: bytes = 168-3922822

Eu recebo incorretamente um código de status 200 e o conteúdo completo do arquivo. aqui estão os cabeçalhos relevantes dessa resposta:

  • Cache-Control: no-cache
  • Pragma: no-cache
  • Comprimento do conteúdo: 3922823
  • Tipo de conteúdo: video / mp4
  • Conteúdo-MD5: f1 + K8OT8TEjvtlPU5iUY8a ==
  • Expira: -1 Última modificação: Ter, 16 Fev 2016 15:46:46 GMT
  • ETag: "0x8D336E86040C217"
  • Servidor: Microsoft-IIS / 8.5
  • X-AspNet-Version: 4.0.30319
  • X-Powered-By: ASP.NET
  • X-Powered-By: ARR / 3.0
  • X-Powered-By: ASP.NET

Existe alguma maneira que eu possa modificar o comportamento do proxy para coincidir com o comportamento do servidor principal (ou seja, retornar apenas o conteúdo parcial solicitado)? Parece que ele pode estar armazenando em cache o conteúdo do arquivo e atendendo a todos eles quando o intervalo de bytes solicitado está próximo do tamanho total do arquivo.

    
por cortez 17.02.2016 / 20:57

1 resposta

0

Acontece que a correção para esse problema não envolveu a modificação do servidor proxy reverso. Meu serviço de destino estava faltando um cabeçalho de resposta que é necessário quando um terminal é capaz de fornecer conteúdo parcial: o cabeçalho Accept-Ranges. Eu modifiquei meu ponto de extremidade para incluir Accept-Ranges: bytes como cabeçalho de resposta, o que permite que os clientes saibam que o endpoint é capaz de fornecer conteúdo parcial. Esse cabeçalho de resposta é incluído, independentemente de o conteúdo parcial ou o conteúdo completo estar sendo solicitado. O fato de que este cabeçalho estava faltando deve ter sido jogando fora do servidor proxy, fazendo-o pensar que precisava retornar o arquivo inteiro. Em qualquer caso, a correção foi simples e agora meu servidor proxy está manipulando pedidos por conteúdo parcial!

    
por 27.07.2017 / 21:47