Comment est-ce que je peux placer l'encodage de transfert à morcelé, explicitement ou implicitement, dans une réponse d'ASP.NET?
Puis-je simplement mettre le Transfer-Encoding
en-tête?
Va appeler Response.Flush()
à un certain point, la cause que cela se produise implicitement?
MODIFIER
Non, je Ne peux pas appeler Response.Headers.Add("Transfer-Encoding","anything");
ça en jette.
toutes les autres suggestions?
Liés à:
source d'informationauteur Cheeso | 2010-04-07
Vous devez vous connecter pour publier un commentaire.
TL;DR: en Précisant le contenu de longueur est le meilleur moyen d'obtenir un rapide premier octet; vous serez à même de permettre de segmentation en TCP au lieu de HTTP. Si vous ne connaissez pas la longueur du contenu, réglage
context.Response.BufferOutput
àfalse
enverra sortie comme il est écrit de la le flux de sortie en utilisant un codage de transfert.Pourquoi voulez-vous définir
Transfer-Encoding: chunked
? Chunked transferts sont essentiellement un travail autour pour permettre l'envoi de documents dont le contenu-durée n'est pas connue à l'avance. ASP.NET cependant, par défaut, les tampons de l'ensemble de la production et donc ne connaître l'ensemble de la longueur du contenu.Bien sûr, HTTP est posé au-dessus de TCP, et derrière la scène, le protocole TCP est "chunking", de toute façon, en fendant même d'un monolithique de la réponse HTTP en paquets - ce qui signifie que si vous spécifiez la longueur du contenu à l'avant et de désactiver la sortie de mise en mémoire tampon, vous obtiendrez le meilleur temps de latence sans nécessitant HTTP-niveau de segmentation. Ainsi, vous n'avez pas besoin de niveau HTTP chunking de fournir un rapide premier octet quand vous savez que la longueur du contenu.
Bien que je ne suis pas un expert sur HTTP, j'ai mis en place un simple serveur de flux multimédia à la recherche de soutien, la compression dynamique, la mise en cache etc. et j'ai une assez bonne compréhension de la pertinence d'un rapide premier octet - et de segmentation est généralement une option inférieure si vous connaissez le contenu de la longueur qui est presque certainement pourquoi ASP.NET ne vous permettront pas de régler manuellement - il n'est tout simplement pas nécessaire.
Toutefois, si vous ne pas connaître le contenu HTTP longueur avant de la transmission et de la mise en mémoire tampon est trop cher, vous pouvez désactiver le tampon de sortie et sans doute que le serveur va utiliser un encodage de transfert en bloc par nécessité.
Lors de l'utilisation du serveur encodage de transfert en bloc? Je viens de tester, et en effet, si
context.Response.BufferOutput
est fixé àfalse
et quand la longueur du contenu n'est pas défini, la réponse est mémorisé en bloc; une telle réponse est de 1 à 2% de plus dans mon établissement entièrement non-scientifique de test rapide de 1.7 MO content-encoding: gzip document xml. Depuis gzip s'appuie sur le contexte afin de réduire la redondance, j'avais attendu le rapport de compression de souffrir encore plus, mais il semble que la segmentation n'est pas nécessairement de réduire considérablement le taux de compression.Si vous regardez le code de la structure dans le réflecteur, il semble que le codage de transfert est en effet mis automatiquement en cas de besoin - c'est à dire si la mémoire tampon est éteint ET pas de la longueur du contenu est connu, ET la réponse à une requête HTTP/1.1, encodage de transfert en bloc est utilisé. Cependant, si le serveur IIS7 et c'est un travailleur de la demande (?le mode intégré?), les branches de code d'une méthode native - probablement avec le même comportement, mais je ne peux pas vérifier.
Il semble que vous devez configurer IIS pour cela. IIS 6 a une propriété AspEnableChunkedEncoding dans la métabase et vous pouvez voir l'IIS 7 mappages pour cela sur MSDN à l' http://msdn.microsoft.com/en-us/library/aa965021(SV.90).aspx.
Cela vous permettra de définir TRANSFER-ENCODING: chunked dans votre en-tête. J'espère que cette aide.
Même si vous définissez la valeur false et laissez vide la longueur du contenu, vous devez vous assurer que vous avez désactivé le "Contenu Dynamique Compression" pour IIS7 pour faire un travail sur la réponse. Aussi, navigateur client doit avoir au moins HTTP 1.1 .. Chunked mode ne fonctionne pas pour le protocole HTTP 1.0
Réponse.Tampon = False
Ce sera mis en en-Tête HTTP "Transfert-Encoding:Chuckeg" et d'envoyer la réponse à chaque callled réponse.écrire