【问题标题】:Do HTTP paths have to start with a slash?HTTP 路径必须以斜杠开头吗?
【发布时间】:2014-12-24 22:31:58
【问题描述】:

我对 HTTP 格式有疑问。 HTTP 请求的第一行如下所示:

GET /path/to/resource.txt HTTP/1.1

或者换句话说:

METHOD URI HTTP-VERSION

是否要求URI/ 字符开头,以便/path/to/resource.txtpath/to/resource.txt 相同并且两者都有效?

如果不需要前导/,那么GET / HTTP/1.1GET HTTP/1.1 是否也一样? (GETHTTP/1.1 之间有两个空格)

【问题讨论】:

    标签: file http web path protocols


    【解决方案1】:

    RFC 7230, section 5.3 Request target:

    一旦获得入站连接,客户端就会发送一个 HTTP 请求消息(第 3 节),请求目标来自 目标 URI。请求目标有四种不同的格式, 取决于请求的方法和请求是否 是代理。

    request-target = origin-form
    
                    / absolute-form
                    / authority-form
                    / asterisk-form
    

    您说的是 subsection 5.3.1 中描述的 origin-form:

    直接向源服务器发出请求时,而不是 CONNECT 或服务器范围的 OPTIONS 请求(如下所述),客户端 必须只发送目标的绝对路径和查询组件 URI 作为请求目标。 如果目标 URI 的路径组件是 空,客户端必须发送“/”作为原始形式中的路径 request-target. 还会发送 Host 头字段,如 第 5.4 节。

    例如,客户希望检索 资源标识为

    http://www.example.org/where?q=now
    

    直接从源服务器打开(或重用)一个 TCP 连接到主机“www.example.org”的 80 端口并发送 行:

    GET /where?q=now HTTP/1.1
    
     Host: www.example.org
    

    “绝对路径”之前在section 2.7 中定义为

     absolute-path = 1*( "/" segment )
    

    所以是的,some 目标标识符是必需的,路径总是以斜杠为前缀,如果未知、为空或不适用,则为/

    【讨论】:

    • To allow for transition to the absolute-form for all requests in some future version of HTTP, a server MUST accept the absolute-form in requests, even though HTTP/1.1 clients will only send them in requests to proxies. 所以这是有争议的。
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2015-02-03
    • 2017-06-09
    • 2014-08-22
    • 1970-01-01
    • 2021-06-17
    • 2016-04-05
    • 2017-03-19
    相关资源
    最近更新 更多