HTTP的隐藏功能


85

您认为HTTP的哪些隐藏功能值得一提?

所谓隐藏特征,是指已经成为标准的一部分,但广泛为未知或未使用的特征。

请每个答案一个功能。

Answers:


124

它必须是418我是茶壶状态码,是超文本咖啡壶控制协议(HTTP的扩展)的一部分。让我每次都笑。

2.3.2 418我是茶壶

任何尝试用茶壶冲泡咖啡的尝试都将导致错误代码“ 418我是茶壶”。生成的实体主体可能短而结实。


6
太棒了!
乔什

3
当没有其他合适的状态时,我实际上已经在脚本中实现了此状态。
眼睑失明

4
在RFC中:“生成的实体主体可能短而粗壮。”
Piskvor于

2
我编写了自己的HTTP服务器,并确保实现了这一点。
马特·乔纳

这不是他们为向那里的咖啡机发送命令而写的真实协议吗,我确定我在某处读过它!-他们建造了一台咖啡机来接受通过此协议发出的命令,因此实际上它是合法的协议
RobertPitt 2010年


42

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

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


1
很好的答案,您能否提供所有方法的更多信息?
路易

2
您可以在各种网站上阅读有关它的所有信息,例如en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Martijn 2010年

1
不幸的是,有多少浏览器支持这些方法?(我知道,很遗憾)
Pascal Qyy

为什么没有人在这些列表中都包括PATCH?
tobib 2014年

29

有没有人看过需要402付款


17
是。在HTTP <-> SMS网关中。如果您用完了预付款项,您将开始获得402条回复。
Kornel

26
@ zildjohn01:这意味着……戏剧性的停顿……我们活在未来!;)
Piskvor于

6
@Piskvor:出色的观察。我还要指出,我拒绝这个未来,它是可悲的软件堆栈。
马特·乔纳

3
“未来已经来临,只是分布不均。”
XTL 2012年

25

204没有内容

我以为204只是没有内容可显示,但该规范似乎还有其他行为,即用户代理“不更改其文档视图”。

根据HOWTO:将Apache配置为返回AJAX的HTTP 204(无内容)

FWIW,Google实际上做了类似的事情。每次用户点击搜索结果中的链接时,Google都会对其自身进行ping操作以记录该点击;ping的响应代码是HTTP 204。

同样,《204 No Content》提出,如果您想节省网络流量的每个最后字节,这对于“网络错误”或“信标”来说是一种很好的技术。


17

响应码410 Gone

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

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


16

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

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

在昂贵的动态代码的顶部,您可以使用If_Modified_Since或If_None_Match来确定内容请求者是否仍然是当前的。如果是,则将响应状态更改为“ 304未修改”,并结束请求。

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

注意,这与设置Cache-Control,Expires标头不同,因为它可以确保客户端始终根据请求提供最新信息。


13

您可以使用和请求具有指定字节范围和唯一文件标识符或文件修改时间戳的标头,请求恢复(大)HTTP响应(例如,文件下载)。如果服务器发送了和或RangeIf-RangeAccept-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 KB,1kbyte = 1024字节,即1Mbyte = 1024 * 1024字节
Maerlyn 2010年

12

休息尝试将HTTP作为接口协议推到其极限。

这不是一个隐藏的功能,但是通过查看定义良好的ReST API,您可以很好地掌握HTTP的工作原理,并找到将HTTP方法,状态代码和标头简单组合即可实现的出色示例。来回。



8

该协议允许您定义自己的自定义字段。如果您不想使用cookie,则可以使用它们来携带其他信息。


1
我肯定不知道!
netrox

6

HTTP 100(继续)状态

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

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

可用于避免来自流氓客户端的流量带宽是宝贵商品的情况下。

但是,为了充分利用此功能,HTTP1.1客户端,服务器和代理有一些条件。有关HTTP连接的更多信息,请参见HTTP / 1.1 RFC 2616


3

状态码

  • URI http://www.domain.invalid/index.php?id=44被调用时,如果查询id=44)无法返回的ressource,为什么不返回一个状态码404
  • 当调用URI http://www.domain.invalid/index.php?id=fooid仅接受整数时,为什么不返回状态码400呢?
  • 为什么,当您输入错误的登录名/密码时,几乎所有的Web应用程序都会返回一条带有状态代码的消息,例如“身份验证失败”200(好的,没问题,您做得很好)401

是的,对于某些Web开发人员来说,状态码似乎是HTTP的一种秘密功能……但是我想知道该协议所有“功能”中最隐秘的不是它的RFC


2
我认为401仅适用于HTTP身份验证,而不适用于其他种类。Afaik导致大多数浏览器向用户询问http密码。
CodesInChaos

您说得对,这就是重点!这是HTTP的另一个“隐藏”功能:HTTP-Authentication... ^^使用它而不是重新发明轮子真的很难吗?
Pascal Qyy

1
@G。Qyy:对于Web应用程序,它的用户数据库是存储在可以轻松操作的SQL数据库中还是存储在(相当静态的)Web服务器配置文件(例如Apache的.htaccess文件)中,都具有很大的不同。网站管理员可以更新。因此,HTTP身份验证实际上并不非常适合管理应用程序的用户权限和登录/注销。
stakx-在10:11不再贡献

4
@stakx:使用MySQL(howtoforge.com/mod_auth_mysql_apache2_debian),LDAP或其他存储信息非常容易HTTP-Authentication,甚至PHP也能够处理HTTP-Authenticationphp.net/manual/en/features.http-auth.php)。如果您是Web开发人员,则仅出于安全原因,您必须了解服务器管理的基础知识!由于Web开发人员必须具有网站管理员/系统管理员技能,因此他可以轻松地执行此任务。
Pascal Qyy

1
但是无论如何,这与我的答案无关:对我来说,主要问题仍然是网络应用返回的几乎系统的,错误的状态码,甚至不包括HTTP身份验证。
Pascal Qyy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.