Pourquoi apache ne renvoie-t-il pas l'en-tête Location du script cgi au client?

0

J'ai une application Web CGI existante qui fonctionnait normalement, mais dont le comportement a changé.

L'un des programmes cgi (sous certaines conditions) retourne un en-tête Location pour provoquer une redirection.

L'en-tête Location n'atteint jamais le navigateur Web. Au lieu de cela, Apache semble renvoyer le contenu de la page vers laquelle l'en-tête Location redirige.

Malheureusement, cette page contient du javascript qui utilise la chaîne de requête à l'intérieur de l'en-tête Location - mais avec ce nouveau comportement, la chaîne de requête est vide, car le navigateur pense toujours que l'emplacement est le script cgi d'origine.

Pourquoi ce comportement a-t-il changé et que puis-je faire pour l'empêcher?

Nikki Locke
la source
Apparemment , la clé est de savoir si une URL absolue est spécifiée dans l'en- Locationtête.
Daniel B
Aha! Je n'ai jamais su cela. Si vous faites de votre commentaire une réponse, je l'accepterai avec joie.
Nikki Locke

Réponses:

1

Selon cette réponse , CGI spécifie deux types de redirections différents: interne et externe.

Les redirections internes (invisibles pour le navigateur) sont utilisées lorsque vous spécifiez une URL sans schéma ni hôte (comme otherpage.htmlou /index.html) dans l'en- Locationtête.

Les redirections externes (effectuées par le navigateur) ne sont utilisées que lorsque vous spécifiez une URL absolue (c'est-à-dire http://www.example.com/some/other/page). Les URL absolues doivent commencer par le schéma (c'est-à-dire http).

La RFC 3875 contient la documentation pertinente:

Le champ d'en-tête Location permet d'indiquer au serveur que le script renvoie une référence à un document plutôt qu'à un document réel (voir les sections 6.2.3 et 6.2.4). Il s’agit soit d’un URI absolu (éventuellement avec un identifiant de fragment), indiquant que le client doit récupérer le document référencé, soit d’un chemin d’URI local (éventuellement avec une chaîne de requête), indiquant que le serveur doit extraire le document référencé et le renvoyer. au client comme réponse.

Daniel B
la source