1.瀏覽器為什么不能跨域?
瀏覽器有一個基本的安全策略--同源策略。為保證用戶的信息安全,它對不同源的文檔或腳本對當前文檔的讀寫操作做了限制。域名,子域名,端口號或協議不同都屬於不同源,當腳本被認為是來自不同源時,瀏覽器雖然會發出這個請求,但是會攔截響應內容。
2.解決跨域問題
CORS(Cross-Origin Resource Sharing,跨域資源共享),通過向http的請求報文和響應報文里面加入相應的標識告訴瀏覽器它能訪問哪些域名的請求,直接在項目中安裝Microsoft.AspNetCore.Cors即可使用。
(1).net core
在appsettings中配置可以訪問的路徑
"cors": { "default": "http://localhost:0000,http://localhost:1111" },
在Startup中ConfigureServices下配置
var urls = Configuration.GetSection("cors:default").Value.Split(','); services.AddCors(options => { options.AddPolicy("AllowOrigins", builder => { builder.WithOrigins(urls).AllowAnyMethod().AllowAnyHeader().AllowCredentials(); }); });
在Configure中使用
app.UseCors("AllowOrigins");
(2)web API
在Web.config中配置:
<add key="allowOrigins" value="http://localhost:0000,http://localhost:1111"/> <add key="allowHeaders" value="*"/> <add key="allowMethods" value="*"/>
在WebApiConfig中配置:
//跨域配置
var allowOrigins = ConfigurationManager.AppSettings["cors_allowOrigins"];
var allowHeaders = ConfigurationManager.AppSettings["cors_allowHeaders"];
var allowMethods = ConfigurationManager.AppSettings["cors_allowMethods"];
var globalCors = new EnableCorsAttribute(allowOrigins, allowHeaders, allowMethods);
config.EnableCors(globalCors);
// Web API 路由
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);