1

我有一个ASP.Net MVC 4 Website和另一个ASP.Net Web API项目。目前两者都托管amplify.js在不同的域上。我用来在前端使用 API。由于两个网站都托管在不同的域上,所以当我API从这个目的。)。这会导致我每次调用都会产生额外的请求,这会增加开销。我还尝试在子域上托管这两个网站,但请求仍然存在,我想摆脱这些额外的请求。UICORSOPTIONSHTTP APIOPTIONS

有什么办法可以消除这个OPTIONS请求吗?

4

2 回答 2

3

有什么方法可以消除 OPTIONS 请求?

您可以使用JSONP代替 CORS。不幸的是,这可能不足以满足您的方案,因为 JSONP 仅适用于 GET 请求(jQuery 的$.ajax方法有此限制)。

或者,如果您将 2 托管在同一域上并且您没有违反same origin policy,则可以使用正常的 AJAX 请求。

于 2013-03-01T07:51:16.337 回答
1

为了防止跨域请求,源域和目标域必须完全相同:在主机、域和端口中(同源策略)。但是,无论如何,您有一些选项可以防止 CORS:

  1. 将网站和 API 放在同一个域中 - 有点明显;)
  2. 创建某种服务器端代理脚本(PHP、Node.js 或任何你喜欢的),通过 curl 或任何类似于 API 的方式路由请求。这应该阻止 OPTIONS 标头,但需要另一个 HTTP 请求(AJAX <-> 网站 httpd <-> API httpd)。
  3. 一个类似的解决方案是使用 Apache 作为反向代理(howto here)。与脚本解决方案一样,这也会产生两个 HTTP 请求,但我假设反向代理会导致更少的开销。
  4. 您也可以使用JSONP,但 API 需要支持它(因此您可能必须重新实现网站<->API 通信)并且您的 API 将不再是RESTful(如果您关心的话)。

我会选择一种方式或方式三种方式,因为脚本解决方案感觉太笨拙了;)我还建议检查是否真的有必要在不同的域上运行 API 和网站。OPTIONS 标头通常不会造成太多开销,因此您可以考虑先优化代码的其他部分。

也许您可以将网站和 API 放在一个域中,而仅将 API 的数据库放在另一台服务器上?只是一个想法...

于 2013-03-01T08:05:58.160 回答