【问题标题】:How are Public APIs made Cross Domain for All Browsers? [closed]公共 API 如何为所有浏览器跨域? [关闭]
【发布时间】:2013-09-21 00:46:08
【问题描述】:

例如,如果 Twitter 的 API 允许 Puts 和 Posts(我不确定是否允许),那么他们是否只是在最后启用了 CORS?

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

那么这些浏览器能干脆不使用直接从JS调用twitter API的网站吗?

【问题讨论】:

  • 一般解决方案是对不支持CORS的浏览器使用JSONP
  • @RunscopeAPITools JSONP 不允许 POST 和 PUTS,它只是 GET。
  • @JonathanLonowski 我知道这会起作用......但这似乎是一个黑客......人们真的是这样忍受 IE 的吗?
  • @JonathanLonowski 实际上,约翰,这对我不起作用,因为我需要在我的 GET 中使用的请求长度比能够进入 GET 的 URL 编码的长度要长。我需要使用 POST 正文。
  • IE8 的XDomainRequest 怎么样?

标签: javascript web-services api


【解决方案1】:

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

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

由于XMLHttpRequest 是执行跨域请求的首选方法,jQuery 等库默认不支持XDomainRequest(一直是requested and declined,但是有许多替代项目提供此功能,例如:

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

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 2016-01-01
    • 1970-01-01
    • 2013-05-31
    • 2012-07-21
    • 2015-04-03
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多