asp.net core 系列之允许跨域访问-1(Enable Cross-Origin Requests:CORS)
接上篇的允许跨域
4.CORS 策略(Policy)的选项
这里讲解Policy可以设置的选项:
- 设置允许的访问源
- 设置允许的HTTP methods
- 设置允许的请求头(request header)
- 设置暴露的响应头(response header)
- 跨不同源请求的证书(Credentials)
- 设置过期时间
AddPolicy 在StartUp.ConfigureServices方法中调用;对于一些选项,先阅读一下,CORS是怎么工作的,可能会有帮助
设置允许的源(Origins)
AllowAnyOrigin :允许CORS请求从任何源来访问,这是不安全的
注意:指定AllowAnyOrigin 和AllowCredentials 是一种不安全的配置,可能会导致 跨站请求伪造(cross-site request forgery:CSRF)。
当应用使用这两个配置时,CORS服务返回一个无效的CORS响应。
SetIsOriginAllowedToAllowWildcardSubdomains:设置策略的 IsOriginAllowed 属性,使可以匹配一个配置的带通配符的域名
options.AddPolicy("AllowSubdomain",
builder =>
{
builder.SetIsOriginAllowedToAllowWildcardSubdomains();
});
设置允许的HTTP methods
AllowAnyMethod:
- 允许任何HTTP method
- 影响预检请求(preflight request)和 Access-Control-Allow-Methods header
设置允许的请求头(request header)
要允许一个CORS请求中指定的请求头,可以使用 WithHeaders 来指定。
options.AddPolicy("AllowHeaders",
builder =>
{
builder.WithOrigins("http://example.com")
.WithHeaders(HeaderNames.ContentType, "x-custom-header");
});
允许所有的请求头
options.AddPolicy("AllowAllHeaders",
builder =>
{
builder.WithOrigins("http://example.com")
.AllowAnyHeader();
});
一个CORS中间件策略用 WithHeaders匹配特定的头,而请求中的头部(记录在Access-Control-Request-Headers)需要精确匹配WithHeader中的头部才可以跨域。
例如:
应用中策略
app.UseCors(policy => policy.WithHeaders(HeaderNames.CacheControl));
请求中的部分数据:
Access-Control-Request-Headers: Cache-Control, Content-Language
CORS中间件会拒绝这个请求,因为Content-Language(HeaderNames.ContentLanguage)没有在WithHeaders中列出来;
设置暴露的响应头
默认情况下,浏览器不会暴露所有的响应头给应用。
默认可用的响应头是:
Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma
如果想让其他的头部对应用可用,可以调用 WithExposedHeaders:
options.AddPolicy("ExposeResponseHeaders",
builder =>
{
builder.WithOrigins("http://example.com")
.WithExposedHeaders("x-custom-header");
});
跨源(cross-origin)请求中的证书(Credentials)
默认情况下,浏览器不允许在跨域请求中发送证书。
证书中包含缓存(cookies)和HTTP验证协议(HTTP authentication schemes)。
要再跨域中发送证书,客户端(浏览器)必须设置 XMLHttpRequest.withCredentials 为 true。
直接使用 XMLHttpRequest
var xhr = new XMLHttpRequest();
xhr.open('get', 'https://www.example.com/api/test');
xhr.withCredentials = true;
使用JQuery
$.ajax({
type: 'get',
url: 'https://www.example.com/api/test',
xhrFields: {
withCredentials: true
}
});
使用 Fetch API
fetch('https://www.example.com/api/test', {
credentials: 'include'
});
服务端也需要允许证书。使用AllowCredentials
options.AddPolicy("AllowCredentials",
builder =>
{
builder.WithOrigins("http://example.com")
.AllowCredentials();
});
包含 Access-Control-Allow-Credentials 头部的HTTP 响应(HTTP Response) 将告诉浏览器:服务器允许跨域请求的证书;
如果浏览器发送证书,但是响应没有包含一个有效的 Access-Control-Allow-Credentials 头部 , 浏览器不会暴露响应给应用,跨域失败;
允许跨域证书是一个安全风险。
在跨域中,如果 Access-Control-Allow-Credentials 头部出现了,则意味着 设置为所有的源 (setting origin to " * ")会失效。
参考网址
https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2#cors-policy-options
asp.net core 系列之允许跨域访问-1(Enable Cross-Origin Requests:CORS)的更多相关文章
- asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)
这一节主要讲如何测试跨域问题 你可以直接在官网下载示例代码,也可以自己写,我这里直接使用官网样例进行演示 样例代码下载: Cors 一.提供服务方,这里使用的是API 1.创建一个API项目.或者直接 ...
- 在ASP.NET MVC3 中利用Jsonp跨域访问
在ASP.NET MVC3 中利用Jsonp跨域访问 在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复 ...
- ASP.NET MVC4应用程序配置跨域访问
开发框架是使用webapi做后台,HTML5做前台,通过ajax调用webapi后台,返回json结果. 用的编译器是visual Studio2013,下面是配置方法 1.web.config文件 ...
- (转)在ASP.NET MVC3 中利用Jsonp跨域访问
原文地址:http://www.cnblogs.com/skm-blog/p/3431999.html 在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用 ...
- asp.net关于如何准许api跨域访问
首先需要在原api接口的程序中在web.config添加如下节点(在<system.webServer>节点下) <!--准许跨域请求--> <httpProtocol& ...
- ASP.NET Core 利用中间件支持跨域请求
方法1: 在Startup的ConfigureServices()中添加services.AddCors()在Startup的Configure()中添加app.UseCors(); 保证其在app. ...
- geoserver源码学习与扩展——跨域访问配置
在 geoserver源码学习与扩展——restAPI访问 博客中提到了geoserver的跨域参数设置,本文详细讲一下geoserver的跨域访问配置. geoserver的跨域访问依赖java-p ...
- PHP通过AJAX及Access-Control-Allow-Origin实现跨域访问
这里的跨域实质上是由浏览器同源策略限制的一类请求场景,浏览器同源策略SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全 ...
- Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)
Ajax跨域问题及解决方案 目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...
随机推荐
- 【Tomcat】Web应用的目录结构
创建时间:6.14 Web应用的目录结构 .xml文件不用自己写,抄头抄尾就可以 (别人的) (抄头抄尾) *注意:WEB-INF目录是受保护的,外界不能直接访问 如果访问WEB-INF目录下的htm ...
- 爬虫篇-python爬虫中多线程的使用
queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...
- python测试开发django-69.templates模板过滤器filter
前言 templates 模板里面过滤器 filter 的作用是对变量的出来,比如小写转大写,替换一些特殊字符,对列表取值,排序等操作. 内置的过滤器有很多,本篇拿几个常用的过滤器做案例讲解下相关的功 ...
- 十大排序算法总结(Python3实现)
十大排序算法总结(Python3实现) 本文链接:https://blog.csdn.net/aiya_aiya_/article/details/79846380 目录 一.概述 二.算法简介及代码 ...
- 201671030129 周婷 实验十四 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 团队项目评审&课程学习总结 课程学习目标 (1)完成项目验收(2)反思总结课程学习内容 1.对<实验一 软件工程准备&g ...
- 葫芦娃团队对火鸡堂、基于云的胜利冲锋队团队的Beta产品测试报告
Beta项目互测 课程名称:软件工程1916|W(福州大学) 作业要求:Beta阶段团队项目互评 团队名称:葫芦娃队 作业目标:Beta项目互测 一.火鸡堂团队产品测试 1.截图(推荐用动态gif图录 ...
- MySQL体系结构与存储引擎
MySQL 体系结构 先看 MySQL 数据库的体系结构,如下图所示. MySQL 体系结构由 Client Connectors 层.MySQL Server 层及存储引擎层组成. Client C ...
- 将HashMap转换为List
背景 SpringBoot中,使用@RquestBody注解 hashMap 接收多个参数的json字符串数据,包括一个数组和一个int值.数组中为一个个的对象组成. 问题 使用 map.ge ...
- vue之非父子通信
一.非父子通信: 思路: 找个中间存储器,组件一把信息放入其中,组件二去拿 代码如下: let hanfei = new Vue(); # 实列化个空的vue对象,作为中间存储器来时间 ...
- TensorFlow常用激活函数及其特点和用法(6种)详解
http://c.biancheng.net/view/1911.html 每个神经元都必须有激活函数.它们为神经元提供了模拟复杂非线性数据集所必需的非线性特性.该函数取所有输入的加权和,进而生成一个 ...