---
id: cors
title: 跨域资源共享
---

### 定义

命名空间：TouchSocket.Http <br/>
程序集：[TouchSocket.Http.dll](https://www.nuget.org/packages/TouchSocket.Http)


## 一、说明

什么是跨域?简单来说，当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。那为什么会出现跨域问题呢？

出于浏览器的同源策略限制。同源策略（Sameoriginpolicy）是一种约定，它是浏览器最核心也最基本的安全功能，如果缺少了同源策略，则浏览器的正常功能可能都会受到影响。可以说 Web 是构建在同源策略基础之上的，浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源（即指在同一个域）就是两个页面具有相同的协议（protocol），主机（host）和端口号（port）。


什么是CORS?跨源资源共享 (CORS) ：

- 是一种 W3C 标准，可让服务器放宽相同的源策略。
- 不是一项安全功能，CORS 放宽 security。 API 不能通过允许 CORS 来更安全。 有关详细信息，请参阅 CORS 工作原理。
- 允许服务器明确允许一些跨源请求，同时拒绝其他请求。
- 比早期的技术（如 JSONP）更安全且更灵活。

## 二、使用方法

### 2.1 添加Cors服务

```csharp {4} showLineNumbers
.ConfigureContainer(a =>
{
    //添加跨域服务
    a.AddCors(corsOption =>
    {
        //添加跨域策略，后续使用policyName即可应用跨域策略。
        corsOption.Add("cors", corsBuilder =>
        {
            corsBuilder.AllowAnyMethod()
                .AllowAnyOrigin();
        });
    });
})
```

:::tip 提示

`corsBuilder`可以通过With方法，添加更多的跨域设置。例如设置特定的源。

:::  

### 2.2 应用跨域策略

```csharp {4} showLineNumbers
.ConfigurePlugins(a =>
{
    //应用名称为cors的跨域策略。
    a.UseCors("cors");
})
```

:::tip 提示

`UseCors()`的设定，会应用到插件访问的，之前的所有的http请求上。所以如果需要，可以将`UseCors()`放置到最前项。

:::  