Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

BOGUE : Set-cookie est ignorée dans CGI lorsque combinée avec emplacement

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 176113
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Nous vous recommandons de tous les utilisateurs d'effectuer la mise à niveau à Microsoft Internet Information Services (IIS) version 7.0 s'exécutant sur Microsoft Windows Server 2008. IIS 7.0 augmente considérablement la sécurité de l'infrastructure Web. Pour plus d'informations sur les questions liées à la sécurité IIS, reportez-vous au site Web de Microsoft à l'adresse suivante :Pour plus d'informations sur IIS 7.0, reportez-vous au site Web de Microsoft à l'adresse suivante :
Symptômes
Lorsqu'une application CGI envoie un en-tête Set-Cookie avec réponse «302 déplacé Object» et en-tête Location, Internet Information Server (IIS) ignore l'en-tête de cookie.
Résolution
Ce comportement est une violation de la spécification CGI, les États, "les en-têtes ne sont pas des directives de serveur sont envoyés directement au client. Actuellement, cette spécification définit trois directives serveur..."

Pour résoudre ce problème, assurez-vous que le nom de fichier de l'EXE commence par «nph-» et créer manuellement tous les en-têtes HTTP dans votre programme. «nph-» indique au serveur que le programme CGI doit être exécuté en mode en-têtes non analysée. CGI comporte deux modes. En mode normal (analysées en-têtes), vous devez envoyer à une des directives CGI vers une sortie standard (type de contenu, emplacement ou état). CGI met en forme une ligne de réponse HTTP valide en fonction de la directive que vous avez envoyé. Pour vous mettre en forme d'autres en-têtes HTTP standard et il doit inclure les en-têtes que vous avez spécifié.

L'autre mode concerne le mode en-tête non analysée. Dans ce mode CGI ne définit pas les en-têtes lui-même. Le programme CGI doit formater une réponse HTTP complet, y compris la ligne de réponse et tous les en-têtes. Le serveur ne pas ajouter ou modifier des en-têtes pour vous dans ce mode.

La convention est qu'un programme CGI dont le nom commence par «nph-» est exécuté en mode en-tête non analysée ; dans le cas contraire, programmes CGI sont exécutés en mode en-tête analysée.
Statut
Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés au début de cet article.
Plus d'informations

Procédure pour reproduire le problème

Compiler ce programme CGI en tant qu'une application Console Win32 et placez-le dans un dossier sur votre serveur IIS où elle peut être exécutée :
#include <stdio.h>int main(){  printf("Location: %s\r\n", "http://www.yahoo.com");  printf("Set-Cookie: Name1=Value1; path=/;    expires=Fri, 22 May 1998 21:00:00 GMT\r\n\r\n");  return 0;}				

Appeler le programme CGI à partir de votre navigateur et observez sa sortie (via le Moniteur réseau, par exemple). Il sera semblable à ceci :
HTTP/1.0 302 Object movedLocation: http://www.yahoo.comServer: Microsoft-IIS/2.0Content-Type: text/htmlContent-Length: 145<head><title>Document moved</title></head><body><h1>Object Moved</h1>This document may be found<a HREF="http://www.yahoo.com">here</a></body>				

Notez que l'en-tête Set-cookie n'a pas été envoyé par IIS. Si vous disposez des avertissements de cookie activées dans votre navigateur, aucun avertissement ne s'affiche.

Pour autoriser un cookie à fixer dans une réponse 302, utilisez un code similaire à suivantes et préfixe «nph-» au nom du fichier exécutable :
#include <stdio.h>int main(){  printf("HTTP/1.0 302 Redirect\r\n");  printf("Location: %s\r\n", "http://www.yahoo.com");  printf("Set-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00   GMT\r\n\r\n");  return 0;}				

La sortie est semblable à celui-ci. Notez que le cookie est maintenant envoyé et pas d'en-tête sont ajoutées par le serveur.
HTTP/1.0 302 RedirectLocation: http://www.yahoo.comSet-Cookie: Name=Value; path=/; expires=Fri, 22 May 1998 21:00:00 GMT				
Références
(c) 1997 Microsoft Corporation, tous droits réservés. Contribution Leon Braginski, Microsoft Corporation

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 176113 - Dernière mise à jour : 12/05/2015 08:09:17 - Révision : 5.0

Microsoft Internet Information Server 3.0, Microsoft Internet Information Server 4.0, Microsoft Internet Information Services 5.0

  • kbnosurvey kbarchive kbmt kbbug kbnofix KB176113 KbMtfr
Commentaires