您认为HTTP的哪些隐藏功能值得提及?
所谓隐藏功能,指的是已经成为标准但广泛未知或未被使用的功能。
每个答案请只列举一个功能。
我最喜欢的状态码一定是418我是茶壶,它是超文本咖啡壶控制协议(HTTP的扩展)的一部分。每次看到都会让我笑。
2.3.2 418 我是茶壶
任何试图使用茶壶煮咖啡的尝试都应该返回错误代码“418我是茶壶”。结果的实体主体可以是短小而且健壮的。
明显的答案:PUT、DELETE、TRACE、OPTIONS、CONNECT方法
大多数人知道GET和POST方法,因为这是构建表单时使用的方法。浏览器也经常使用HEAD方法。其他方法则很少被人所知;它们主要被一些更特定的应用程序所使用。
有没有人见过402付款要求?
我认为204只是在没有内容可以显示时使用的,但规范似乎还有额外的行为,即用户代理“不改变其文档视图”。
根据如何配置Apache以返回HTTP 204(无内容)进行AJAX
顺便说一句,Google实际上做了类似的事情。每次用户点击他们搜索结果中的链接时,Google会ping自己以记录点击;来自ping的响应代码是HTTP 204。
此外,204 No Content提出如果您想节省每一个网络流量字节,则这是“Web Bug”或“Beacon”的好技术。
在动态内容中使用Last_Modified或ETag头部
有时,您会有一些生成成本高昂且可能不会在请求之间更改的大型动态内容。您可以在生成的响应中添加一个Last_Modified或ETag头部。
在您昂贵的动态代码的顶部,您可以使用If_Modified_Since或If_None_Match来确定请求者所拥有的内容是否仍然是当前的。如果是,则将响应状态更改为"304未修改"并结束请求。
一些服务器端技术提供这样的功能,但即使在低级的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方法、状态码和头部组合实现的精彩示例。