【问题标题】:Hidden features of HTTPHTTP的隐藏特性
【发布时间】:2010-10-31 14:12:47
【问题描述】:

您认为 HTTP 的哪些隐藏特性值得一提?

我所说的隐藏功能是指已经成为标准的一部分但广为人知或未使用的功能。

请每个答案只有一个功能。

【问题讨论】:

    标签: http


    【解决方案1】:

    它必须是 418 I'm a teapot 状态码,是Hyper Text Coffee Pot Control Protocol(HTTP 的扩展)的一部分。每次都让我发笑。

    2.3.2 418 我是个茶壶

    任何尝试用茶壶冲泡咖啡都会导致错误 代码“418我是一个茶壶”。生成的实体主体可能很短并且 粗壮。

    【讨论】:

    • 我实际上已经在脚本中实现了这个状态,当没有其他状态合适时。
    • 来自 RFC:“生成的实体主体可能又短又粗。”
    • 我编写了自己的 HTTP 服务器并确保实现了这一点。
    • 这不是他们为向咖啡机发送命令而编写的真正协议吗?我确定我在某处读到过! - 他们制造了一台咖啡机来通过这个协议接受命令,所以实际上它是一个合法的协议
    【解决方案2】:

    referrer 拼写错误,因此决定保留拼写错误。

    【讨论】:

      【解决方案3】:

      显而易见的答案:PUT、DELETE、TRACE、OPTIONS、CONNECT 方法

      大多数人都知道 GET 和 POST 方法,因为这是他们在构建表单时使用的方法。浏览器也经常使用 HEAD。其他方法鲜为人知。它们主要用于更具体的应用程序。

      【讨论】:

      • 不错的答案,您能否提供有关所有方法的更多信息?
      • 您可以在各种网站上阅读所有相关信息,例如en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
      • 倒霉,有多少浏览器支持这些方法? (我知道,很可惜)
      • 为什么没有人在这些列表中包含 PATCH?
      【解决方案4】:

      有人见过402 Payment Required吗?

      【讨论】:

      • 是的。在 HTTP SMS 网关中。如果您的预付额度用完,您将开始收到 402 响应。
      • @zildjohn01:这意味着……戏剧性的停顿……我们生活在未来! ;)
      • @Piskvor:出色的观察。我还要指出,我拒绝这个未来,它是可悲的软件堆栈。
      • “未来已经到来,只是分布不均。”
      【解决方案5】:

      204 无内容

      我认为 204 只是如果您没有要显示的内容,但 spec 看起来还有用户代理“不更改其文档视图”的附加行为。

      根据HOWTO: Configure Apache to Return a HTTP 204 (No Content) for AJAX

      FWIW,Google 实际上做了一些事情 相似的。每次用户点击 在他们的搜索结果中链接,谷歌 ping 自身以记录点击;这 来自 ping 的响应代码是 HTTP 204.

      另外,204 No Content 建议如果您想尽可能节省网络流量的每个最后一个字节,那么这是一种解决“网络错误”或“信标”的好方法。

      【讨论】:

        【解决方案6】:

        Response Code 410 Gone:

        (...) 服务器所有者希望远程 删除该资源的链接。 (...)

        网络蜘蛛(尤其是 Google)将对开始返回 410 的页面取消索引(通常在下一次抓取时)。

        【讨论】:

          【解决方案7】:

          在动态内容中使用 Last_Modified 或 ETag 标头

          有时,您的动态内容可能很大和/或生成成本很高,并且可能不会因请求而异。您可以在生成的响应中添加 Last_Modified 或 ETag 标头。

          在昂贵的动态代码的顶部,您可以使用 If_Modified_Since 或 If_None_Match 来确定内容请求者已经拥有的内容是否仍然是最新的。如果是,将响应状态更改为“304 Unmodified”并结束请求。

          一些服务器端技术正式提供此类功能,但即使在低级 ASP-Classic 中您也可以执行上述操作。

          请注意,这与设置 Cache-Control、Expires 标头的不同之处在于它确保客户端始终拥有最新的请求信息。

          【讨论】:

            【解决方案8】:

            您可以使用 RangeIf-Range 请求标头分别指定字节范围和唯一文件标识符或文件来请求恢复(大型)HTTP 响应(例如文件下载)修改时间戳。如果服务器在初始响应中分别发送了Accept-Ranges: bytesETagLast-Modified 响应标头,并分别通知服务器支持字节范围请求、唯一文件标识符和文件修改时间戳,则这是可能的。

            初始响应可能如下所示(ETag 通常由文件名、大小和最后修改时间戳组成):

            Accept-Ranges: bytes
            ETag: file.ext_1234_1234567890
            Content-Range: bytes 0-1233/1234
            

            当下载中止时,例如 1KB(1024 字节),客户端可以按如下方式继续下载:

            If-Range: file.ext_1234_1234567890
            Range: bytes=1024-
            

            应该在正文中返回带有适当字节的响应:

            Accept-Ranges: bytes
            ETag: file.ext_1234_1234567890
            Content-Range: bytes 1024-1233/1234
            

            【讨论】:

            • 1Mbyte = 1024 kbytes,1kbyte = 1024 bytes,即 1Mbyte = 1024*1024 bytes
            【解决方案9】:

            ReST 试图将 HTTP 作为接口协议推向极限。

            这不是一个隐藏的功能,但是通过查看定义良好的 ReST API,我们可以很好地掌握 HTTP 的工作原理,并找到可以通过简单的方式实现的精彩示例HTTP 方法、状态码和标头的组合。

            【讨论】:

              【解决方案10】:

              Trailer(相对于Header)

              【讨论】:

                【解决方案11】:

                该协议允许您定义自己的自定义字段。如果您不想为此使用 cookie,这些可用于携带其他信息。

                【讨论】:

                  【解决方案12】:

                  HTTP 100(继续)状态

                  客户端可以发送带有请求正文的请求消息以确定源服务器是否愿意接受请求。

                  在某些情况下,如果服务器将不查看正文就拒绝消息,则客户端发送正文可能不合适或效率极低。

                  可用于避免来自流氓客户端的流量..和/或带宽是一种宝贵的商品。

                  但是,要充分利用此功能,对于 HTTP1.1 客户端、服务器和代理有一些标准。有关 HTTP 连接的进一步阅读,请参阅 HTTP/1.1 RFC 2616

                  【讨论】:

                    【解决方案13】:

                    Status codes

                    • 在调用URIhttp://www.domain.invalid/index.php?id=44时,如果queryid=44)无法返回资源,为什么不返回状态码404
                    • 当调用URI http://www.domain.invalid/index.php?id=fooid 只接受整数时,为什么不返回状态码400
                    • 为什么,当您输入错误的登录名/密码时,几乎所有 Web 应用程序都会返回类似 "Authentication failed" 之类的消息,状态码为 200(好的,没问题,你做得很好)代替401

                    是的,status codes 似乎是 HTTP 对某些 Web 开发人员的一种秘密功能......但我想知道这个协议的所有“功能”中最神秘的不是 its RFC

                    【讨论】:

                    • 我认为401 仅适用于 HTTP 身份验证,不适用于其他类型。 Afaik 它导致大多数浏览器要求用户输入 http 密码。
                    • 你是对的,这就是重点!这是 HTTP 的另一个“隐藏”功能:HTTP-Authentication... ^^ 使用它而不是重新发明轮子就这么难吗?
                    • @G. Qyy:对于一个 Web 应用程序,它的用户数据库是存储在一些它可以轻松操作的 SQL 数据库中,还是存储在一些(相当静态的)Web 服务器配置文件中,例如 Apache 的 .htaccess 文件,这有很大的不同——可能只有网站管理员可以更新。因此,HTTP 身份验证实际上不太适合管理应用程序的用户权限和登录/注销。
                    • @stakx:很容易使用 MySQL (howtoforge.com/mod_auth_mysql_apache2_debian)、LDAP 或其他方式来存储 HTTP-Authentication 的信息,甚至 PHP 也能够处理 HTTP-Authentication (php.net/manual/en/features.http-auth.php)。如果您是 Web 开发人员,您必须了解服务器管理的基础知识,这只是出于安全原因!由于 Web 开发人员必须具备网站管理员/系统管理员技能,因此他可以轻松执行此任务。
                    • 但无论如何,这与我的答案无关:对我来说,主要问题仍然是网络应用返回的几乎系统性的不正确状态代码,即使抛开 HTTP 身份验证。
                    猜你喜欢
                    • 2011-03-19
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-11-07
                    • 2010-09-15
                    • 2010-11-07
                    • 2010-09-22
                    • 2010-10-31
                    • 2011-01-30
                    相关资源
                    最近更新 更多