146 votes

Fragment d’URL et les 302 redirections

Il est bien connu que le fragment d'URL (la partie après le #) n'est pas envoyé au serveur. Je me demande bien comment les fragments de travail lorsqu'un serveur de redirection (via code HTTP 302 et Location: - tête) est impliqué.

Ma question est vraiment deux fois:

R: Si l'URL d'origine avait un fragment (/original.php#foo), et une redirection est faite à l' /new.php, le fragment de la partie de l'URL d'origine tout simplement se perdre? Ou faut-il parfois appliquées à la nouvelle adresse? La nouvelle URL jamais être /new.php#foo dans ce cas?

B: quelle que soit l'URL d'origine, si le serveur redirige vers une URL avec un fragment (/new.php#foo), le fragment d'obtenir "honoré"? Ou le serveur n'ont pas vraiment d'interférer avec le fragment à tous - et le navigateur donc l'ignorer en allant simplement à l' /new.php?

145voto

ax. Points 22269

Mise À Jour 2014-Jun-27:

RFC 7231, Protocole de Transfert Hypertexte (HTTP/1.1): la Sémantique et le Contenu, a été publiée en tant que NORME PROPOSÉE. Depuis le Changelog:

La syntaxe de l'Emplacement du champ d'en-tête a été modifié afin de permettre à tous Les références URI, y compris des références relatives et des fragments, le long de avec quelques précisions lors de l'utilisation de fragments ne serait pas approprié. (Chapitre 7.1.2)

Les points importants de la Section 7.1.2. Emplacement:

Si l'Emplacement de la valeur fournie dans un 3xx (Redirection) réponse n' pas un fragment de composant, un agent utilisateur DOIT traiter le redirection comme si la valeur hérite du fragment de la composante de l'URI de référence utilisé pour générer la demande de la cible (c'est à dire, la redirection hérite de la référence d'origine du fragment, le cas échéant).

Par exemple, un OBTENIR la demande générée par la référence URI "http://www.example.org/~tim" pourrait entraîner une 303 (Voir d'Autres) réponse contenant le champ d'en-tête:

Location: /People.html#tim

ce qui suggère que l'agent de l'utilisateur de rediriger le "http://www.example.org/People.html#tim"

De même, une requête GET généré pour la référence URI "http://www.example.org/index.html#larry" peut entraîner une 301 (Déplacé Permanence de la réponse contenant le champ d'en-tête:

Location: http://www.example.net/index.html

ce qui suggère que l'agent de l'utilisateur de rediriger le "http://www.example.net/index.html#larry"les, la préservation de l'original identificateur de fragment.

Cela devrait clairement répondre à vos questions.

Mise à jour de FIN

c'est un ouvert (non précisé) problème avec la spécification HTTP actuelle. elle est adressée en 2 questions de l' IETF httpbis groupe de travail:

#6 vous permet de fragments dans l' Location - tête. #43, dit ceci:

Je viens de testé avec différents navigateurs.

  • Firefox et Safari utiliser le fragment dans l'emplacement d'en-tête.
  • Opera utilise le fragment de la source d'URI, lorsqu'il est présent, sinon le fragment de la redirection emplacement
  • IE (8) ignore le fragment dans l'emplacement d'URI, il utilisera donc le fragment de la source d'URI, lorsqu'il est présent

Proposition:

"Remarque: le comportement lors des identificateurs de fragment de l'original de l'URI et la redirection doit être combinée est pas défini; les Agents Utilisateurs, en effet, différer sur ce fragment est prioritaire."

[...]

Il semble que IE8 ne utiliser le fragment idenfitier de Location (le comportement que j'ai vu pourrait être limité (localhost).

Ainsi, nous semblent avoir un comportement cohérent pour Safari/IE/Firefox/Chrome (juste testé), en ce que le fragment de l'Emplacement de l'en-tête est utilisé, peu importe ce que l'URI originale a été.

J'ai donc changer ma proposition de document que comme comportement attendu.

cela conduit à la plupart des navigateur compatible et d'avenir (parce que cette question finira par être "normalisée") en réponse à votre question:

Un: des fragments de l'original Url jetées.

B: des fragments de l' Location - tête sont à l'honneur.

45voto

EricLaw Points 28850

Safari 5 et IE9 et au-dessous de chute de l'URI originale du fragment si un HTTP/3xx redirection se produit. Si l'Emplacement de l'en-tête de la réponse indique un fragment, il est utilisé.

IE10+, Chrome 11+, Firefox 4+, et de l'Opéra seront tous "rattacher" l'URI originale du fragment à la suite d'une 3xx redirection.

Page de Test: http://www.webdbg.com/test/redir/fragment/.

Voir plus loin la discussion de cette question à http://blogs.msdn.com/b/ieinternals/archive/2011/05/17/url-fragments-and-redirects-anchor-hash-missing.aspx

11voto

Marcin Points 2094

Juste pour vous faire savoir, ici vous pouvez trouver bon spec. de w3c définissant comment tout doit comporter : http://www.w3.org/TR/cuap#uri - article 4.1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X