为啥叫 XMLHttpRequest?

Posted

技术标签:

【中文标题】为啥叫 XMLHttpRequest?【英文标题】:Why is it called XMLHttpRequest?为什么叫 XMLHttpRequest? 【发布时间】:2012-08-17 12:37:31 【问题描述】:

我一直想知道为什么这个对象被这样称呼?

您的请求正文不需要是 XML 格式。此外,从服务器接收的数据可以以 JSON、XML、html 或纯文本的形式获取。 XML 在这个对象中并不重要。这是某种陈词滥调吗?这个对象最初创建时是什么?

【问题讨论】:

XMLHttpRequest: en.wikipedia.org/wiki/XMLHttpRequest#History_and_support 上有一篇相当长的***文章 【参考方案1】:

XMLHttpRequest 由 Microsoft 的 Outlook Web Access 团队发明。这个高度创新的团队之前给了我们远程脚本,这是“AJAX”风格开发的开始。远程脚本类似于 JSONP,但过于复杂(它使用 Java 小程序,最重要的是)。我不记得是否可以在 IE 4 或 5 中动态注入 <script> 元素,但这似乎是不可能的。否则,JSONP 似乎足以消除对XMLHttpRequest 的需求。

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

当 Firefox 进入游戏并实施他们自己的版本时,XMLHttpRequest 的使用方式与今天相似,而用于 XML 的则更少,但 Firefox 还是使用了相同的名称。由于两家最大的浏览器制造商创建了一个具有相同名称、界面和功能的对象,w3c 坚持使用现有名称。太糟糕了,有人没有对这个误称产生更多的恶臭,并坚持我们称之为更准确的东西,比如HttpRequest

我不知道“AJAX”是如何或为什么成为一个流行的术语来描述网页与服务器交互而不需要完整的页面加载的编程风格。与“XMLHttpRequest”相比,“AJAX”用词不当,因为它不仅暗示 XML 是一个重要方面,而且还没有提供服务器交互的指示。我可以使用 javascript 异步处理 XML,而无需与服务器通信。

【讨论】:

感谢您的详细解答!我还在the introduction of XMLHttpRequest object in w3c document 中找到了关于这个误称的简要解释 Ajax 一词由 Jesse James Garrett 于 2005 年在本文中首次提出:adaptivepath.org/ideas/ajax-new-approach-web-applications。另见en.m.wikipedia.org/wiki/Jesse_James_Garrett。 AsyncHttpRequest 听起来是个不错的替代名称。【参考方案2】:

是的,名称中的 XML 部分都是错误的。

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

这是过去的好时光,关键功能只是塞满了 发布前几天......我意识到 MSXML 库随 IE 和我在 XML 团队中有一些很好的联系人,他们会 可能会帮上忙——我联系了负责该项目的让·保利(Jean Paoli) 当时的团队,我们很快就达成了发货的协议 作为 MSXML 库的一部分。这是哪里的真正解释 XMLHTTP 这个名字的由来——主要是关于 HTTP 而不是 与 XML 有任何特定的联系,除了那是最简单的借口 为了运输它,所以我需要将 XML 塞进名称中。

-- 亚历克斯·霍普曼 The story of XMLHTTP

这清楚地表明,寻求与 XML 的联系,无论它们多么合理,基本上都是对作者意图的过度解释。 很抱歉破坏了乐趣。

【讨论】:

【参考方案3】:

AJAX 代表异步 Javascript 和 XML。开始时所有的通信都是使用 XML(HTML 也类似于 XML,而 XHTML 是 XML)。 JSON 是后来出现的。所以这是出于历史原因。 (也看看这个wiki page)

【讨论】:

谢谢!这个名字不知何故让像我这样的新网络开发人员感到困惑 一开始?就像......在洞穴艺术之前?

以上是关于为啥叫 XMLHttpRequest?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GWT 中使用 XMLHttpRequest?

处理异步调用XMLHTTPRequest.open时拒绝访问Javascript

为啥 XMLHttpRequest 没有回复?

为啥 XMLHttpRequest 上传在 Firefox 中没有正确失败?

为啥一些跨域 XMLHttpRequest 请求不返回 CORS 错误

为啥 XMLHttpRequest 响应的长度与请求文件的大小不同?