首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消除ASP.NET网站和ASP.NET WebAPI的跨域/子域选项请求

消除ASP.NET网站和ASP.NET WebAPI的跨域/子域选项请求
EN

Stack Overflow用户
提问于 2013-03-01 15:48:12
回答 2查看 877关注 0票数 1

我有一个ASP.Net MVC 4 Website和另一个ASP.Net Web API project.Currently都在不同的域上。我使用amplify.js在我前面的end.Since上使用API,这两个网站都在不同的域上。当我从UI调用我的API时,它总是一个跨域请求(我正在利用CORS实现这一目的。).This导致我进行的每个HTTP API调用都会产生额外的OPTIONS请求,这增加了开销。我也尝试在子域上托管这两个网站,但OPTIONS请求仍然存在,我想摆脱这些额外的请求。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-01 15:51:16

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

您可以使用JSONP而不是CORS。不幸的是,这可能不足以满足您的场景,因为JSONP只能处理GET请求(jQuery的$.ajax方法有此限制)。

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

票数 3
EN

Stack Overflow用户

发布于 2013-03-01 16:05:58

为了防止跨域请求,源域名和目标域名必须完全相同:主机、域和端口(same origin policy)。但是,您有一些选项可以防止CORS:

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15152942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档