Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

XHR::timeout随想

  XHR对象上有个timeout属性,看名字就知道是设置超时的意思,但这是个非常表层的属性,基本上就是开一个计时器,若干秒后关闭连接并触发相应的事件。如果真要说超时,是一堆非常复杂的东西,网络层、传输层、应用层,都有自己的超时处理机制。
  其实XHR对象上直接有个timeout属性让我感觉有点不安,它到底指从什么时候到什么时候的时间呢。
  我会有这样奇怪的感觉也许是受了微软的影响吧!对于HTTP客户端的封装,微软很早以前就有了 WinHTTP.WinHTTPRequest 组件了。Web时代来临后,微软第一个实现了 XHR 对象,也就是从 WinHTTP.WinHTTPRequest 派生出一个类(原本的功能已经都有了,只是为了安全性考虑屏蔽掉一些功能),封装为 Microsoft.XMLHTTP 组件在IE上实现。后来微软又从这个组件的基础上扩充了 MSXML2.XMLHTTP 系列。除此之外,当年在ASP时代下,微软还为服务器端的脚本提供了服务器专用版本的 MSXML2.ServerXMLHTTP 系列,把更多功能释放了出来。在 MSXML2.ServerXMLHTTP 组件中实际上就已经支持设置超时了,使用一个名为setTimeouts的方法来设置一组超时。可别和DOM中的setTimeout混淆了,这里可是复数形式的!从服务器请求一个资源,这个行为涉及了很多动作,绝不是一个请求一个响应那么简单。动作可以分到很细,这要看站在什么层面的网络协议上来探讨。
  扯了一大堆有的没的之后,我们来谈谈目前的情况。貌似目前现代浏览器的实现对这个timeout属性的计算是从发起HTTP请求到接收完响应数据的时间(如果是新建立连接的话还会包括域名解析和TCP连接建立的时间)。这在规范中是一笔带过而已,我根据自己的推测结合浏览器上的测试数据得到了这个结论(也许有错,但重点不在这儿)。其实我更希望timeout相关的设计能像微软封装的那些组件一样,对更细的部分有一些操作支持,这对于网络优化方面是很有帮助的。不过我对自己的这个想法又有点忌惮,如同信仰崩坏似得。Web这东西本该是基于HTTP的产物,而如今好像混入了什么奇怪的东西进去,再这样下去真的好吗。“也许这是一个从狭义到广义的变化过程吧”我是这么安慰自己的。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^