5 votes

La demande de routage de l'application IIS change le contenu partiel 206 en 200

J'ai configuré un serveur proxy inverse dans un service azur en utilisant des règles de réécriture IIS et le module Application Request Routing (selon les instructions). aquí . Tout fonctionne bien, sauf les appels vers les points de terminaison que j'ai créés pour télécharger des fichiers mp4. Ces points finaux peuvent servir un contenu partiel lorsque la requête contient l'en-tête Range. Le problème que j'ai est que lorsque j'appelle le serveur directement, il répond correctement avec 206 (contenu partiel) et la plage correcte d'octets, mais parfois, lorsque j'appelle les points finaux par le biais du serveur proxy, il répond avec un 200, et le contenu complet du fichier, ce qui provoque des erreurs dans la lecture vidéo dans Chrome.

Ejemplo: En frappant le serveur directement avec une requête comme celle-ci :

GET server.domain.com/api/adFile/fileName Avec en-tête : Plage : bytes=168-3922822

Je reçois correctement une réponse de 206. Voici quelques-uns des en-têtes pertinents de la réponse :

  • Cache-Control : no-cache
  • Pragma : no-cache
  • Content-Length : 3922655
  • Content-Type : video/mp4
  • Content-MD5 : f1+K8OT8TEjvtlPU5iUY8a==
  • Content-Range : bytes 168-3922822/3922823
  • Expire : -1
  • Modifié en dernier lieu : Tue, 16 Feb 2016 15:46:46 GMT
  • ETag : "0x8D336E86040C217"
  • Serveur : Microsoft-IIS/8.0
  • X-AspNet-Version : 4.0.30319
  • X-Powered-By : ASP.NET

Lorsque l'on frappe le serveur à travers le proxy inverse, avec une requête comme celle-ci :

GET proxy.domain.com/api/adFile/fileName Avec en-tête : Plage : bytes=168-3922822

Je reçois à tort un code d'état 200 et le contenu complet du fichier. Voici les en-têtes pertinents de cette réponse :

  • Cache-Control : no-cache
  • Pragma : no-cache
  • Content-Length : 3922823
  • Content-Type : video/mp4
  • Content-MD5 : f1+K8OT8TEjvtlPU5iUY8a==
  • Expire : -1 Last-Modified : Tue, 16 Feb 2016 15:46:46 GMT
  • ETag : "0x8D336E86040C217"
  • Serveur : 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-t-il un moyen de modifier le comportement du proxy pour qu'il corresponde à celui du serveur principal (c'est-à-dire renvoyer uniquement le contenu partiel demandé) ? Il semble qu'il mette en cache le contenu du fichier et le serve en totalité lorsque la plage d'octets demandée est proche de la taille totale du fichier.

1voto

cortez Points 51

Il s'avère que la solution à ce problème n'implique pas de modifier le serveur proxy inverse. Il manquait à mon service de destination un en-tête de réponse qui est nécessaire lorsqu'un point d'extrémité est capable de servir un contenu partiel : l'en-tête Accept-Ranges. J'ai modifié mon point de terminaison pour inclure Accept-Ranges : bytes comme en-tête de réponse, ce qui permet aux clients de savoir que le point d'accès est capable de servir un contenu partiel. Cet en-tête de réponse est inclus, que le contenu demandé soit partiel ou complet. L'absence de cet en-tête a dû perturber le serveur mandataire en lui faisant croire qu'il devait renvoyer le fichier entier. Quoi qu'il en soit, la correction était simple et maintenant mon serveur mandataire est heureux de traiter les demandes de contenu partiel !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X