一搜立、為什么會出現(xiàn)跨域問題
出于瀏覽器的同源策略限制棘街。同源策略(Sameoriginpolicy)是一種約定,它是瀏覽器最核心也最基本的安全功能移必,如果缺少了同源策略室谚,則瀏覽器的正常功能可能都會受到影響”苣可以說Web是構(gòu)建在同源策略基礎(chǔ)之上的舞萄,瀏覽器只是針對同源策略的一種實現(xiàn)。同源策略會阻止一個域的javascript腳本和另外一個域的內(nèi)容進(jìn)行交互管削。所謂同源(即指在同一個域)就是兩個頁面具有相同的協(xié)議(protocol)倒脓,主機(host)和端口號(port)
二、怎樣才算跨域
當(dāng)一個請求url的協(xié)議含思、域名崎弃、端口三者之間任意一個與當(dāng)前頁面url不同即為跨域
當(dāng)前頁面url | 被請求頁面url | 是否跨域 | 原因 |
---|---|---|---|
http://www.test.com/ | http://www.test.com/index.html | 否 | 同源(協(xié)議甘晤、域名、端口號相同) |
http://www.test.com/ | https://www.test.com/index.html | 跨域 | 協(xié)議不同(http/https) |
http://www.test.com/ | http://www.baidu.com/ | 跨域 | 主域名不同(test/baidu) |
http://www.test.com/ | http://blog.test.com/ | 跨域 | 子域名不同(www/blog) |
http://www.test.com:8080/ | http://www.test.com:7001/ | 跨域 | 端口號不同(8080/7001) |
三饲做、非同源限制
【1】無法讀取非同源網(wǎng)頁的 Cookie线婚、LocalStorage 和 IndexedDB
【2】無法接觸非同源網(wǎng)頁的 DOM
【3】無法向非同源地址發(fā)送 AJAX 請求
四、跨域解決方法
JSONP,CORS,Nginx等
這里主要講解的是 asp.net core
CORS解決方案
Startup中配置
ConfigureServices中注冊配置
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(c =>
{
//一般采用這種方法
c.AddPolicy("LimitRequests", policy =>
{
// 支持多個域名端口盆均,注意端口號后不要帶/斜桿:比如localhost:8000/塞弊,是錯的
// 注意,http://127.0.0.1:5401 和 http://localhost:5401 是不一樣的泪姨,盡量寫兩個
policy
.WithOrigins("http://127.0.0.1:5401","http://localhost:5401", "http://127.0.0.1:5402", "http://localhost:5402")
.AllowAnyHeader()//允許任何標(biāo)頭
.AllowAnyMethod();//允許任何方法
});
});
}
添加CORS中間件
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("LimitRequests");//將 CORS 中間件添加到 web 應(yīng)用程序管線中, 以允許跨域請求游沿。
}
這樣就在asp.net core中完成了跨域請求的配置