http - demande de modification de l'url?
Est-il possible de modifier l'url d'un serveur HTTP-request sans redirection?
Par exemple, au lieu de:
demande 1
GET /user/abc123/ HTTP/1.1
HTTP/1.1 301 Moved Permanently
Location: /files/abc123
demande 2
GET /files/abc123 HTTP/1.1
HTTP/1.1 200 OK
.
.
[filecontent]
Je pourrais peut répondre directement le fichier, mais de laisser le client sait qu'il a eu redirigé:
seule demande
GET /user/abc123/ HTTP/1.1
HTTP/1.1 200 OK
Location: /files/abc123
.
.
[filecontent]
Essayez d'utiliser UrlRewriter stackoverflow.com/questions/5890043/...
Malik je pose la question sur le faible niveau de HTTP, et non pas pour des solutions logicielles pour elle.
Malik je pose la question sur le faible niveau de HTTP, et non pas pour des solutions logicielles pour elle.
OriginalL'auteur Van Coding | 2013-05-08
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, il n'est pas possible de le faire avec HTTP. La Redirection HTTP spécifiquement signifie que le client est censé envoyer une deuxième demande.
Je pense que ce que vous voulez est plus proche de la spécification d'une "url canonique" pour certaines ressources, et puis d'avoir cette url canonique affiche dans la barre d'adresse des navigateurs.
RFC 6596 spécifie un moyen de spécifier les url canoniques avec
<link >
. Toutefois, elle ne précise pas ce qu'est un navigateur doit faire avec elle, si quoi que ce soit. Google l'utilise pour faire de meilleurs choix sur les url à indexer.Autres que d'utiliser
<link>
étiquettes, il est également possible de spécifier les relations entre les ressources via le protocole HTTPLink
en-tête, c'est à direLink: </better-url>; rel=canonical
. Voir http://www.w3.org/wiki/LinkHeader . Je ne suis pas si sûr que ce serait repris par Google. La page à http://support.google.com/webmasters/bin/answer.py?hl=en&reponse=139394 ne parle pas de Google le prend en charge. Les navigateurs ne sera sûrement pas en tenir compte, comme ils le font avec pratiquement n'importe quelle balise de lien, les feuilles de style en cours de l'exception notable.Si le contenu en question est un document HTML, vous pouvez utiliser le HTML5 histoire de l'API pour cela. Plus précisément, le
history.replaceState
méthode. Je ne pense pas que la réalisation de quelque chose de semblable est possible avec d'autres types de contenu.Modifier
Content-Location
en-tête peut réellement s'adapter à ce que vous souhaitez bien.De l'article 14.14 de HTTP 1.1 RFC:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Voir aussi Quel est le but du champ d'en-tête HTTP “Content-location”?
OriginalL'auteur Myrne Stol
Bien, il est possible, mais il se sent un peu sale.
Une démonstration rapide:
Ah oui, je pense que j'ai mal compris ce que vous voulez exactement. Dans ce cas, au moins une partie de votre solution doit être mise en œuvre côté client, comme Meryn déjà écrit.
L'Emplacement de l'en-tête n'a pas de sens en dehors de 30x, 201, 202 réponses.
oui je suis bête, je n'ai réalisé que plus tard 🙂
Pour moi, le fait de changer juste
req.url
était assez . J'ai eu des erreurs si j'ai essayé de réglagereq.path
–TypeError: Cannot set property path of #<IncomingMessage> which has only a getter
.OriginalL'auteur robertklep