2017-02-12 1 views
0

J'ai récemment vu un appel GET qui avait l'en-tête Transfer-Encoding défini sur Chunked. Ce que nous avons remarqué de cet appel est un délai puis un délai de 500 socket.HTTP GET avec transfert-Encoding Chunked

En creusant plus profondément, nous avons montré ce comportement des 500 provenant des serveurs web ELB et Apache. Il est à noter que si nous effectuons l'appel GET avec Transfer-Encoding comme Chunked et que nous incluons une charge utile vide, l'ELB dans notre cas permet à la requête de se dérouler comme d'habitude. Etant donné que ces serveurs web ELB et Apache s'exposent à ce comportement, ma question est d'envoyer Transfer-Encoding comme Chunked sur un appel HTTP GET est valide ou non?

Répondre

2

L'en-tête Transfer-Encoding est maintenant sous l'autorité de RFC 7230, section 3.3.1 (voir aussi le IANA Message Header Registry. Vous constaterez que cet en-tête fait partie de l'encadrement du message HTTP, il est donc valable pour les deux, les demandes et les réponses.

Gardant à GET requests may carry bodies, la réaction du serveur (s) est absolument correcte.Ce qui provoque le retard suivi par le 500 est probablement le suivant: Le serveur s'attendrait à un corps, mais ne parvient pas à en trouver un, puisque la représentation codée en morceau d'un Chaîne vide n'est pas une chaîne vide mais un zero-sized chunk En conséquence, le serveur exécute un délai d'attente de

+1

Gardez également à l'esprit que la spécification interdit toute sémantique affectée à la signification du corps de la requête sur GET. Par conséquent, beaucoup d'agents (par exemple, les mandataires) peuvent supprimer ou bloquer les demandes GET avec des corps, il est donc recommandé d'éviter cela. – Adrien

+0

@Adrien alors que c'est vrai, c'est un peu hors de la portée de cette question. Je voulais montrer que les requêtes 'GET' sont autorisées à avoir un corps * du tout * et donc que l'en-tête' Transfer-Encoding' n'est pas égaré ici. – DaSourcerer

+0

Compris, tout comme Content-Length, l'existence de l'en-tête de demande de transfert-encodage: chunked indique qu'il y a un corps, et il doit donc être complété. – Adrien