公共API如何为所有浏览器创建跨域?

时间:2013-09-21 00:46:09

标签: javascript web-services api

例如,如果Twitter的API允许Puts和Posts(我不确定它是否确实如此),他们只是在他们的结尾启用CORS吗?

但IE 9及更低版本不处理CORS。

这些浏览器是否可以直接使用直接从JS调用twitter API的网站?

1 个答案:

答案 0 :(得分:1)

在IE9及更低版本中,XMLHttpRequest不支持CORS的其中一个解决方法是Microsoft自己的专有XDomainRequest。虽然它在某些方面与XMLHttpRequest类似,但它的功能有很多限制。其中一些包括(source):

  • 仅允许GETPOST次请求(即没有PUTDELETE等。)
  • 只能使用HTTP和HTTPS协议(大多数时候不是主要问题)
  • 请求必须仍然是相同的协议方案,即使设置了正确的跨源头(即HTTP - > HTTPS不被允许,反之亦然)
  • 不能修改请求标头,也不能设置新标头
  • IE
  • 未设置Content-Type标头
  • 请求中不会发送任何Cookie
  • 如果您的网站位于Intranet上,则无法访问互联网资源

由于XMLHttpRequest是执行跨源请求的首选方法,因此jQuery等库默认情况下不包括对XDomainRequest的支持(已经requested and declined,但是许多提供此功能的替代项目,例如:

另一种选择,如果这些限制碰巧太多,就是在客户端和跨源站点之间在服务器上设置代理(当然,这应该只在需要时完成,因为这会耗尽你的服务器的带宽和数据使用情况。)