Web 技术研究所

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

「X-HTTP-Method-Override」的坑

  前不久刚写了篇「非主流 HTTP 方法会发起额外的 OPTIONS 请求」的文章,没想到这么快就要开始拆自己的台了。当时给出的解决方案是使用「X-HTTP-Method-Override」来避免非主流。但实际上跨域使用这样的自定义 HTTP 请求头同样会先发起 OPTIONS 请求。

「X-HTTP-Method-Override」根本没有解决问题嘛

  由于跨域的情况下无法得知目标服务器是否允许接受某个请求头,所以当我们使用「X-HTTP-Method-Override」或其它任何自定义请求头时都需要先发起一个 OPTIONS 来验证目标服务器是否支持这个自定义请求头。所以它完全不能避免多余的 OPTIONS 请求发起嘛!

IE8 的坑

  IE8 的 XDR 对象根本就没有setRequestHeader方法,这才是最坑的地方。要只是多发起个 OPTIONS,也许勉强还能接受。因为它只是性能问题,至少功能可以实现。而对 IE8 我只能呵呵了。

无奈的解决办法

  既然连请求头都没法使用,那只能用最蛋碎的办法,直接在「Query String」中包含「X-HTTP-Method-Override」吧,具体的处理交给后端去做。这是我目前能想到的最好办法了。当然还有使用黑魔法解决的,比如用 AS 写个插件,自己封装出一个 XHR。不过这个实现成本有点高(虽然我也写过一个,不过代码太烂,不好意思贴出来),而且使用 AS 解决方案的前提是客户端有 Flash 运行环境。这个我倒是觉得没啥问题,目前 PC 端对 Flash 运行环境的普及率高地离谱。不过我还是把 AS 解决方案归为了黑魔法类,如果没有特殊情况不建议使用。

网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^