2010-11-24 4 views
3

Je viens de finir de lire URL vs. URI vs. URN, in More Concise Terms, et cela m'a vraiment aidé à comprendre la distinction entre les trois termes. Depuis lors, je ai écrémé les spécifications RFC2141 et RFC2616 et la documentation Response.Redirect Method de Microsoft dans un effort pour répondre à la question suivante en toute confiance.Que fait exactement Response.Redirect ("~/...") dans la réponse HTTP?

Compte tenu de cette ligne de code:

Response.Redirect("~/Foo.aspx"); 

Et cette réponse HTTP résultant (parés pour le contexte):

Status = Trouvé - 302 Date = Mer 24 Nov
2010 17: 27:58 GMT
serveur = Microsoft-IIS/6.0
X-Powered-By = ASP.NET
X-réSEAU-version = 2.0.50727
Emplacement =/MyWebApp/Foo.aspx

Quel nom (s) décrit plus correctement ce qui a été placé dans l'en-tête "Location"?

URL? URI? URNE? URC? Lequel est-ce?

Répondre

2

Il s'agit d'une adresse URI relative. Il s'agit également d'une URL, car elle peut être utilisée dans ce contexte pour localiser la ressource et l'identifier, mais il est vraiment inutile de parler d'URL ces jours-ci - la distinction dépend davantage de ce que vous faites. avec elle que ce qu'elle est en soi, et une URL est toujours une URI.

+0

Mais l'adresse de localisation n'atteint-elle pas le test d'URL de derefrence-able?/MyWebApp/Foo.aspx ne fournit aucune information sur l'endroit où la ressource peut être trouvée sur un réseau ... – Evan

+1

C'est une référence relative. Cela avec d'autres informations (l'URI utilisé pour obtenir la réponse) permet la création d'un URI absolu qui est à la fois un identifiant global (aucune autre ressource dans le monde a le même URI) et un répertoire déréférencable. –

+0

@John Cela ne fait-il pas de l'emplacement une URL mais une URN? – Evan

0

Il s'agit d'un URL puisque la résolution de ~/ fournit à la fois l'emplacement et le mécanisme ("http") pour trouver la ressource, cependant, la valeur d'en-tête Location est conçue pour prendre un Uri.

Header Field Definitions

+1

Mais, je demande ce que pour nommer la valeur qui est * dans * l'en-tête, sans se soucier de comment/où cette valeur a été créée. La valeur contenue dans l'en-tête ne fournit pas l'emplacement ou le mécanisme. Si l'emplacement et le mécanisme sont des choses que je veux observer dans quelque chose que j'appelle une "URL", et que ces choses ne sont pas dans l'en-tête "Location", comment appelons-nous la valeur * dans l'en-tête *? – lance

+0

@lance - J'ai modifié ma réponse. C'est un Uri. – Thomas

0

~/est résolu à /MyWebApp/Foo.aspx, qui ne déclare pas le mécanisme impliqué étant HTTP; Tout ce qu'il déclare est l'emplacement qui est redirigé vers - ce qui en fait une URL, bien qu'il n'y soit pas explicitement indiqué http: //.

0

L'URL de la propriété d'en-tête Location est une URL relative à la racine. Le ~/spécifie que l'URL en cours de création avec ~/foo.aspx doit être root par rapport au répertoire de l'application dans IIS.

1

C'est une question délicate. Seul (sous forme de chaîne de caractères) Location est un URI, mais vous devez prendre en compte le contexte dans lequel il est défini (c'est la liste des en-têtes de réponse) Essentiellement un tuple (browser :: request :: protocol, browser :: request :: domain, response :: locationHeader) constitue une URL lorsque la requête ajoute un mécanisme de récupération.