【发布时间】:2010-10-31 14:12:47
【问题描述】:
您认为 HTTP 的哪些隐藏特性值得一提?
我所说的隐藏功能是指已经成为标准的一部分但广为人知或未使用的功能。
请每个答案只有一个功能。
【问题讨论】:
标签: http
您认为 HTTP 的哪些隐藏特性值得一提?
我所说的隐藏功能是指已经成为标准的一部分但广为人知或未使用的功能。
请每个答案只有一个功能。
【问题讨论】:
标签: http
它必须是 418 I'm a teapot 状态码,是Hyper Text Coffee Pot Control Protocol(HTTP 的扩展)的一部分。每次都让我发笑。
2.3.2 418 我是个茶壶
任何尝试用茶壶冲泡咖啡都会导致错误 代码“418我是一个茶壶”。生成的实体主体可能很短并且 粗壮。
【讨论】:
referrer 拼写错误,因此决定保留拼写错误。
【讨论】:
显而易见的答案:PUT、DELETE、TRACE、OPTIONS、CONNECT 方法
大多数人都知道 GET 和 POST 方法,因为这是他们在构建表单时使用的方法。浏览器也经常使用 HEAD。其他方法鲜为人知。它们主要用于更具体的应用程序。
【讨论】:
有人见过402 Payment Required吗?
【讨论】:
我认为 204 只是如果您没有要显示的内容,但 spec 看起来还有用户代理“不更改其文档视图”的附加行为。
根据HOWTO: Configure Apache to Return a HTTP 204 (No Content) for AJAX
FWIW,Google 实际上做了一些事情 相似的。每次用户点击 在他们的搜索结果中链接,谷歌 ping 自身以记录点击;这 来自 ping 的响应代码是 HTTP 204.
另外,204 No Content 建议如果您想尽可能节省网络流量的每个最后一个字节,那么这是一种解决“网络错误”或“信标”的好方法。
【讨论】:
(...) 服务器所有者希望远程 删除该资源的链接。 (...)
网络蜘蛛(尤其是 Google)将对开始返回 410 的页面取消索引(通常在下一次抓取时)。
【讨论】:
在动态内容中使用 Last_Modified 或 ETag 标头
有时,您的动态内容可能很大和/或生成成本很高,并且可能不会因请求而异。您可以在生成的响应中添加 Last_Modified 或 ETag 标头。
在昂贵的动态代码的顶部,您可以使用 If_Modified_Since 或 If_None_Match 来确定内容请求者已经拥有的内容是否仍然是最新的。如果是,将响应状态更改为“304 Unmodified”并结束请求。
一些服务器端技术正式提供此类功能,但即使在低级 ASP-Classic 中您也可以执行上述操作。
请注意,这与设置 Cache-Control、Expires 标头的不同之处在于它确保客户端始终拥有最新的请求信息。
【讨论】:
您可以使用 Range 和 If-Range 请求标头分别指定字节范围和唯一文件标识符或文件来请求恢复(大型)HTTP 响应(例如文件下载)修改时间戳。如果服务器在初始响应中分别发送了Accept-Ranges: bytes 和ETag 或Last-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
【讨论】:
ReST 试图将 HTTP 作为接口协议推向极限。
这不是一个隐藏的功能,但是通过查看定义良好的 ReST API,我们可以很好地掌握 HTTP 的工作原理,并找到可以通过简单的方式实现的精彩示例HTTP 方法、状态码和标头的组合。
【讨论】:
Trailer(相对于Header)
【讨论】:
该协议允许您定义自己的自定义字段。如果您不想为此使用 cookie,这些可用于携带其他信息。
【讨论】:
HTTP 100(继续)状态
客户端可以发送带有请求正文的请求消息以确定源服务器是否愿意接受请求。
在某些情况下,如果服务器将不查看正文就拒绝消息,则客户端发送正文可能不合适或效率极低。
可用于避免来自流氓客户端的流量..和/或带宽是一种宝贵的商品。
但是,要充分利用此功能,对于 HTTP1.1 客户端、服务器和代理有一些标准。有关 HTTP 连接的进一步阅读,请参阅 HTTP/1.1 RFC 2616。
【讨论】:
http://www.domain.invalid/index.php?id=44时,如果query(id=44)无法返回资源,为什么不返回状态码404?http://www.domain.invalid/index.php?id=foo 而id 只接受整数时,为什么不返回状态码400?200(好的,没问题,你做得很好)代替401?是的,status codes 似乎是 HTTP 对某些 Web 开发人员的一种秘密功能......但我想知道这个协议的所有“功能”中最神秘的不是 its RFC!
【讨论】:
401 仅适用于 HTTP 身份验证,不适用于其他类型。 Afaik 它导致大多数浏览器要求用户输入 http 密码。
HTTP-Authentication... ^^ 使用它而不是重新发明轮子就这么难吗?
.htaccess 文件,这有很大的不同——可能只有网站管理员可以更新。因此,HTTP 身份验证实际上不太适合管理应用程序的用户权限和登录/注销。
HTTP-Authentication 的信息,甚至 PHP 也能够处理 HTTP-Authentication (php.net/manual/en/features.http-auth.php)。如果您是 Web 开发人员,您必须了解服务器管理的基础知识,这只是出于安全原因!由于 Web 开发人员必须具备网站管理员/系统管理员技能,因此他可以轻松执行此任务。