2010-11-24 40 views
3

我刚读完URL vs. URI vs. URN, in More Concise Terms,这真的有助于理解这三个术语之间的区别。从那时起,我已经撇号RFC2141RFC2616规格和微软的Response.Redirect Method文件,努力自信地回答以下问题。Response.Redirect(“〜/ ...”)放在HTTP响应中的究竟是什么?

鉴于这行代码:

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

这所得的HTTP响应(修剪上下文):

状态=实测值 - 302日期=星期三,11月24日
2010 17: 27:58 GMT
Server = Microsoft-IIS/6.0
X-Powered-By = ASP.NET
X-AspNet-Version = 2.0.50727
位置=/MyWebApp/Foo.aspx

什么名字(一个或多个)最恰当描述了已被置于 “位置” 头?

URL? URI?瓮? URC?这是什么?

回答

2

这是一个相对URI。

这也是一个URL,因为它可以在这个上下文中用来定位资源并识别它,但是现在真的没有什么价值在讨论URL - 这个区别更多的是你在做什么与它本身的内容相比,URL总是一个URI。

0

这是一个网址,因为~/的分辨率提供了查找资源的位置和机制(“http”),但是标头值位置旨在获取Uri。

Header Field Definitions

+1

但是,我在问什么是在*标题中的值,而不关心如何/在哪里创建值。标题中的值不提供位置或机制。如果位置和机制是我想在我称之为“URL”的东西中观察到的东西,而这些东西不在“位置”标题中,那么我们称之为头*中出现的值*? – lance 2010-11-24 17:46:50

+0

@lance - 修改我的回复。这是一个Uri。 – Thomas 2010-11-24 17:50:29

0

〜/解析为/MyWebApp/Foo.aspx,其不宣布机制参与是HTTP;所有它声明的是被重定向到的位置 - 这使得它成为一个URL,尽管它没有在那里明确指出http://。

0

位置标题属性中的URL是根相对URL。 〜/指定使用〜/ foo.aspx创建的URL应该是相对于IIS中的应用程序目录的根。

1

这是一个棘手的问题。它本身(作为一个字符串)Location是一个URI,但是你必须考虑它定义的上下文(即响应头列表) 实质上,一个元组(browser :: request :: protocol,browser :: request :: domain,response :: locationHeader)构成一个URL,因为请求添加了一个检索机制。