Why is it called XMLHttpRequest?

73

我一直想知道为什么这个对象被称为那个名字?

您请求的正文不必采用XML格式。从服务器接收的数据可以作为JSON、XML、HTML或纯文本获取。XML在这个对象中并不是必要的。这是某种陈词滥调吗?当它第一次创建时,这个对象是用来做什么的?


8
有一篇相当长的维基百科文章讲解 XMLHttpRequest:http://en.wikipedia.org/wiki/XMLHttpRequest#History_and_support。 - Blender
3个回答

67

XMLHttpRequest是由微软Outlook Web Access团队发明的。这个高度创新的团队之前给我们带来了远程脚本,这是“AJAX”风格开发的开始。远程脚本类似于JSONP,但过于复杂(它使用Java小程序)。我不记得在IE4或5中是否可能动态注入<script>元素,但好像那是不可能的。否则,JSONP看起来已经足够强大,可以消除对XMLHttpRequest的需求。

Outlook团队正在将XML从服务器传输到客户端,因此ActiveX控件被命名为反映其当时主要用途的名称。它作为MSXML解析器的一部分包含在内。

当Firefox加入这个领域并实现了他们自己的版本时,XMLHttpRequest被使用得更像今天这样,并且不再只是用于XML,但Firefox仍然用相同的名称。由于两个最大的浏览器制造商创建了一个具有相同名称、接口和功能的对象,w3c坚持使用现有名称。很遗憾没有人对错误的名称提出更多抗议,坚持让我们称之为更准确的名称,比如只是HttpRequest

我不知道为什么“AJAX”成为描述网页与服务器交互而无需完全加载页面的编程风格的流行术语。"AJAX"比"XMLHttpRequest"更加错误,因为它不仅暗示XML是一个必要的方面,而且进一步没有提供与服务器交互的任何指示。我可以异步使用JavaScript处理XML,而不需要与服务器进行通信。


感谢您详细的回答!我还在w3c文档中XMLHttpRequest对象的介绍中找到了一个关于这个误称的简要解释。 - KiL
Ajax这个术语最早是由Jesse James Garrett在2005年的这篇论文中提出的:http://adaptivepath.org/ideas/ajax-new-approach-web-applications/。另请参阅https://en.m.wikipedia.org/wiki/Jesse_James_Garrett。 - bornfromanegg
AsyncHttpRequest听起来像是一个不错的替代名称。 - Naveen Karnam

38

简短版

是的,名字中的XML部分完全是错误的。

详细版

最好的解释来自发明XHR的微软工程师:

那时候是好几天发布前把关键功能塞进去的时代……我意识到IE附带了MSXML库,而且我认识一些在XML团队里的好朋友,他们可能会帮忙—我联系了当时负责该团队的Jean Paoli,我们很快达成协议,将该事物作为MSXML库的一部分发布。这就是XMLHTTP名称的真正来源——这个东西主要与HTTP有关,除了这个之外,它没有与XML具体的关联,只是因为这是最容易的借口,所以我需要把XML挤进名称中。

--Alex Hopmann XMLHTTP的故事

这清楚地说明,无论作者的意图多么合理,寻求与XML的联系基本上是对作者意图的过度解读。
很抱歉打破好玩的氛围。


1
那个网站已经无法访问了,这是一个存档版本:https://web.archive.org/web/20060706193645/http://www.alexhopmann.com/xmlhttp.htm - WirthLuce

9
AJAX代表异步JavaScript和XML。最初所有的通信都是使用XML进行的(HTML也类似于XML,而XHTML则是XML)。JSON稍后出现,因此这是出于历史原因。(也可以参考这个维基页面

1
谢谢!这个名字有点让像我这样的新网站开发人员感到困惑。 - KiL
1
最开始?那么就是...洞穴艺术之前吗? - Alex McMillan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接