代码之家  ›  专栏  ›  技术社区  ›  lance

response.redirect(“~/…”)在HTTP响应中究竟放了什么?

  •  3
  • lance  · 技术社区  · 14 年前

    我刚看完书 URL vs. URI vs. URN, in More Concise Terms 这真的有助于理解这三个术语之间的区别。从那时起我就 撇去 这个 RFC2141 RFC2616 规格和微软的 Response.Redirect Method 记录以自信地回答以下问题。

    考虑到这一行代码:

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

    以及由此产生的HTTP响应(为上下文修剪):

    状态=找到-302日期=周三,11月24日
    2010年17:27:58格林尼治标准时间
    服务器=Microsoft IIS/6.0
    x-powered-by=asp.net
    X-ASPNET-版本=2.0.50727
    位置=/mywebapp/foo.aspx

    哪个名称最恰当地描述了“位置”标题中放置的内容?

    网址?URI?瓮?URC?这是什么?

    5 回复  |  直到 14 年前
        1
  •  2
  •   Jon Hanna    14 年前

    它是一个相对的URI。

    它也是一个URL,因为它可以在这个上下文中用来定位和识别资源,但是现在谈论URL实际上没有什么价值——区别更多的是你在用它做什么,而不是它本身是什么,而且URL总是一个URI。

        2
  •  1
  •   mmix    14 年前

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

        3
  •  0
  •   Arantor    14 年前

    ~/被解析为/mywebapp/foo.aspx,它不声明涉及的机制是http;它声明的只是被重定向到的位置-这使得它成为一个url,尽管它没有在其中显式地声明http://。

        4
  •  0
  •   DarrellNorton    14 年前

    location header属性中的URL是根相对URL。~/指定使用~/foo.aspx创建的URL应该是相对于IIS中应用程序目录的根目录。

        5
  •  0
  •   Thomas    14 年前

    它是一个URL,因为 ~/ 提供查找资源的位置和机制(“http”),但是,头值location设计为采用URI。

    Header Field Definitions