8
votes

IIS7 - Spécification de l'en-tête de longueur de contenu dans ASP provoque une erreur "Réinitialisation de connexion"

Je suis en train de migrer une série de sites Web d'un serveur IIS5 existant vers un tout nouveau serveur Web IIS7. Une des pages tire un fichier de données à partir d'un blob de la base de données et le sert à l'utilisateur final: xxx

testez cela dans la nouvelle installation IIS7, je reçois une erreur "Réinitialisation de la connexion" dans Internet Explorer et Firefox. Le document est servi correctement si l'en-tête de longueur de contenu est supprimé (mais l'utilisateur n'obtiendra pas une barre de progression utile).

Des idées sur la manière de corriger cela; Que ce soit une option de configuration de serveur ou via le code?

edit 1: a fait un peu plus d'essai et d'erreur. Les demandes réussiront si les deux "activer la mise en mémoire tampon" et "activer le codage chund" sont faux. Si l'une ou l'autre est activée, l'erreur se produit.

edit 2: Test d'essai et d'erreur; s'avère que les fichiers texte fonctionneront bien avec le script; Seuls les fichiers binaires (images, pdfs, etc.) échoueront. Toujours complètement désemparé autrement.


0 commentaires

3 Réponses :


9
votes

Comme déjà mentionné quelque part ailleurs: http://fr.wikipedia.org/wiki/chunked_transfer_coding

Il utilise l'en-tête de réponse HTTP CODING à la place de l'en-tête de longueur de contenu, que le protocole aurait autrement exiger. Étant donné que l'en-tête de contenu n'est pas utilisé, le serveur n'a pas besoin de connaître la longueur du contenu avant qu'il ne commence à transmettre une réponse au client (généralement un navigateur Web). Les serveurs Web peuvent commencer à transmettre des réponses avec du contenu généré par dynamisme avant de connaître la taille totale de ce contenu.

dans IIS7 Ceci est activé par défaut: http://technet.microsoft.com/en-us/library/cc730855 (v = ws.10) .aspx

Pour activer le codage de transfert HTTP 1.1 Chunked pour le World Wide Web Service de publication, utilisez la syntaxe suivante:

AppCMD SET CONFIG / Section: ASP / ENBRABECHUCKEDENDENDING: TRUE | FALSE

True Active HTTP 1.1 Encodage de transfert chund HTTP 1.1 Encodage de transfert chunté. La valeur par défaut est vraie.

Nous avons eu le même problème, notre solution: Supprimer Addheader "Longueur de contenu"


2 commentaires

Après avoir migré de XP Pro vers Server 2008 R2, l'erreur s'est produite. Je devais retirer l'en-tête du contenu pour résoudre le problème.


Même problème et solution ici. Pour ce que cela vaut, vous pouvez modifier la "longueur de contenu" en "taille de contenu" et fonctionnera, bien que le client puisse ne pas reconnaître l'en-tête (maintenant obsolète).



2
votes

Il y a deux options pour le faire fonctionner:

  1. sortie L'en-tête "Taille de contenu" au lieu de "longueur de contenu". Remarque Tous les clients ne le reconnaîtront pas, mais au moins cela fonctionne. P> li>

  2. (préféré) Retour Réponse.buffer à true, vous pouvez utiliser l'en-tête "Longueur de contenu" et gérer le "Chunking" vous-même (ne taxez donc pas le tampon de mémoire ASP): P> ol>

    Le suivant fonctionne pour moi sur IIS7 et semble envoyer correctement les informations sur la taille du fichier sur le navigateur. P>

    Response.Buffer = True
    Response.ContentType = "application/pdf"
    Response.AddHeader "Content-Disposition", "attachment; filename=""yourfile.pdf"""
    
    Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Open
    objStream.Type = adTypeBinary
    objStream.LoadFromFile "yourfile.pdf"
    
    Response.AddHeader "Content-Length", objStream.Size
    
    ' Send file in chunks. '
    lByteCount = 0
    lChunkSize = 100000
    While lByteCount < objStream.Size
      If lByteCount + lChunkSize > objStream.Size Then lChunkSize = objStream.Size - lByteCount
      Response.BinaryWrite objStream.Read(lChunkSize)
      Response.Flush ' Flush the buffer every 100KBytes '
      lByteCount = lByteCount + lChunkSize
    Wend
    
    objStream.Close
    Set objStream = Nothing
    


0 commentaires

2
votes

rencontré ce même problème lors de la migration du code ASP d'un serveur Windows 2003 vers Windows 2012 avec IIS 8.5. Le correctif était d'ajuster le code ASP comme suit:

de:

réponse.Ajouter "longueur de contenu", taille

à:

réponse.Ajouter "Taille de contenu", Taille


0 commentaires