如何处理跨域问题
为什么会有跨域问题呢?
浏览器安全性可防止网页向不处理网页的域发送请求。 此限制称为同域策略。 同域策略可防止恶意站点从另一站点读取敏感数据。 有时,你可能希望允许其他网站向自己的应用发出跨源请求。
怎么处理跨域问题
跨域资源共享CORS
可以通过跨域资源共享CORS机制,新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源
使用 Origin
和 Access-Control-Allow-Origin
就能完成最简单的访问控制
以下是浏览器发送给服务器的请求报文:
GET /resources/public-data/ HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Origin: https://foo.example
请求首部字段 Origin
表明该请求来源于 http://foo.example
。
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 00:23:53 GMT
Server: Apache/2
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
[XML Data]
本例中,服务端返回的 Access-Control-Allow-Origin: *
表明,该资源可以被 任意 外域访问。
预检请求
除了上述简单请求外,浏览器必须首先使用 OPTIONS
方法发起一个预检请求
简单介绍下,简单请求需要满足下面所有条件:
-
使用
GET
、HEAD
、POST
方法 -
没有用户自己设置的首部字段
-
Content-Type
的值仅限于下列三者之一:text/plain
multipart/form-data
application/x-www-form-urlencoded
预检请求流程
预检请求和凭据
CORS 预检请求不能包含凭据。预检请求的 响应 必须指定 Access-Control-Allow-Credentials: true
来表明可以携带凭据(通常是 Cookie
)进行实际的请求。 一些企业认证服务要求在预检请求时发送 TLS 客户端证书。
当响应的是附带身份凭证的请求时,服务端 必须 明确 Access-Control-Allow-Origin
的值,而不能使用通配符“*
”。
在 ASP.NET Core 中启用跨源请求 (CORS)
public class Startup
{
readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy(name: MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("http://example.com",
"http://www.contoso.com");
});
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors(MyAllowSpecificOrigins);
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
本文来自博客园,作者:夜晚的斑马鱼,转载请注明原文链接:https://www.cnblogs.com/zebrafish/p/15930397.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异