Asp.net 如何从服务器端启用CORS?

Asp.net 如何从服务器端启用CORS?,asp.net,asp.net-web-api,browser,cors,same-origin-policy,Asp.net,Asp.net Web Api,Browser,Cors,Same Origin Policy,根据我在web API方面的一点经验,同源策略是浏览器的一种策略,即浏览器不允许向其他主机而不是源主机发出请求。我想知道如何从服务器端启用CORS(谈论ASP.net Web API) 这就是我在webAPI中启用CORS的方式 namespace WebService.Controllers { [EnableCors(origins: "*", headers: "*", methods: "*")] public class TestController : ApiCont

根据我在web API方面的一点经验,同源策略是浏览器的一种策略,即浏览器不允许向其他主机而不是源主机发出请求。我想知道如何从服务器端启用CORS(谈论ASP.net Web API)

这就是我在webAPI中启用CORS的方式

namespace WebService.Controllers
{
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class TestController : ApiController
    {
        // Controller methods ...
    }
}

如果CORS是一种浏览器,那么从客户端启用它不是更合乎逻辑吗。有人能澄清这一点吗?

这里有一个简短的总结:浏览器是实施同一原产地政策和跨原产地限制的地方。具体来说,浏览器会阻止前端JavaScript代码访问来自跨源请求的响应,除非请求服务器在响应中发送响应头
access Control Allow origin

换句话说,让浏览器放松同源策略的方法是让服务器使用
Access Control Allow origin
头来指示他们正在选择跨源请求

因此,浏览器是应用或放宽跨源限制的地方

一个有助于说明其工作原理的例子是一个简单的跨源
POST
。只要跨源
POST
没有任何会触发浏览器执行请求的自定义请求头,浏览器就会继续执行请求,甚至跨源。发送到
POST
的服务器将继续接受它,然后发送响应

然后发生的是浏览器的跨源限制,因为如果
POST
请求是使用XHR或从某个JavaScript库获取API或Ajax方法从前端JavaScript代码发送的,那么除非响应包含
访问控制允许源
头,浏览器不允许前端代码访问响应(即使服务器接受了
POST
并成功)

无论如何,我希望上述内容有助于澄清在服务器中启用CORS支持实际上意味着什么,它有什么影响,以及实际的策略实施是由浏览器执行的

当然,以上所有内容只描述了最简单的情况,在这种情况下,请求没有触发浏览器执行任务的特征


但在这种情况下,策略实施实际上是由浏览器执行的,更是如此,例如,浏览器甚至不允许将带有自定义标题的
POST
发送到服务器,除非服务器明确指示(在其对飞行前
选项的响应中)服务器已选择接收包含该自定义标头的跨源请求

如果用户访问您的网站并可以通过javascript自己启用cors,那么这就不再是“更符合逻辑”了。谢谢您的解释。这就是我所理解的。无论服务器中是否启用CORS,浏览器都会与服务器联系。如果启用,则
访问控制允许原点
将发送到浏览器,浏览器将再次运行。对吗?@NithinChandran对。您所描述的是它的要点,无论浏览器与服务器如何联系,如果服务器启用了CORS支持,那么这意味着,它将在其回复中发送一个
Access Control Allow Origin
response头。@NithinChandran但请注意,浏览器并不总是完全“继续”如果它看到
Access Control Allow Origin
响应头。相反,在最简单的情况下,该标题仅确定浏览器是否公开对代码的响应。但是是的,如果请求是导致浏览器进行预飞行的请求,那么基于对该预飞行的响应,如果它有
Access Control Allow Origin
标题和
Access Control Allow Headers
Access Control Allow Methods
标题,并且具有正确的值,那么是的,浏览器继续执行实际请求