新版Google浏览器跨域Cookie解决方案
一、前言
针对Chrome版本67及以上
不能将其他域的Cookie传递过来
注意,这个里面的SameSite不能设为
null,设空的话,还是会走默认值Lax
其中,SameSite的值可以填3个:Strict、Lax、None.
缺省的值为Lax,而且当你设置其为空时,在新的Chrome中还是会给予默认值Lax.
注意:IE和FireFox等可以直接跨域携带Cookie
1.1、前端请求
前端发送的请求必须告知携带了Cookie并进行跨域请求
xhrFields: {
withCredentials: true
},
crossDomain: true,
例如:ajax
function getTest() {
$.ajaxSetup({
type: 'get',
url: 'https://manage.hk.com:8443/s/test',
// 跨域携带Cookie
xhrFields: {
withCredentials: true
},
crossDomain: true,
success: function (res) {
console.log(res);
$("#test").html(res);
return false;
},
error: function () {
alert('请求错误');
return false;
}
});
$.ajax();
}
function postTest() {
$.ajaxSetup({
type: 'post',
url: 'https://manage.hk.com:8443/s/test1',
// 跨域携带Cookie
xhrFields: {
withCredentials: true
},
crossDomain: true,
success: function (res) {
console.log(res);
$("#test").html(res);
return false;
},
error: function () {
alert('请求错误');
return false;
}
});
$.ajax();
}
<button onclick="getTest()">Get</button>
<button onclick="postTest()">POST</button>
<p id="test"></p>
1.2. 三模式介绍
Strict(严格模式)
Lax(宽松模式 默认)
None(可以在第三方环境中发送cookie 在这种模式下,必须同时启用
Secure才行)
Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。
二、Tomcat下配置
位置:apache-tomcat-8.5.66\conf目录下
找到context.xml文件打开
<!-- 加入 -->
<CookieProcessor sameSiteCookies="None"/>
找到web.xml文件打开
<!-- 找到如下配置 大概在627行左右 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config> <!-- 修改为该配置 -->
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>
注意:此时Cookie 只能通过 HTTPS 协议发送
三、Http变Https
3.1、生成SSL证书
通过JDK生成一个SSL证书
自带的keytool命令生成
在需要保存SSL证书的文件目录下打开CMD命令窗口输入一下指令
keytool -genkey -alias tomcat -keyalg RSA

Tomcat口令和密钥口令尽量保持一致,回车即可
不然在tomcat配置完server.xml之后有可能会导致启动失败

注意:密钥库口令和新口令必须一直,具体我也不清楚哈
每一个输完按回车键进入下一项即可
此时在该目录下回看到一个名为 ".keystore" 的证书文件

3.2、配置Tomcat
位置:apache-tomcat-8.5.66\conf目录下
找到server.xml文件打开
<!-- 找到如下文件 大概在91行左右 -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector> --> <!-- 打开注释,缺少那个补那个,也可直接复制替换所有 -->
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150"
SSLEnabled="true"
scheme="https" secure="true"
keystoreFile="C:\Users\Master\.keystore"
keystorePass="123456"
clientAuth="false" sslProtocol="TLS" />
keystoreFile :SSL证书所在磁盘路径
keystorePass :设置的口令
对于protocol有多种配置方法,如是否启用apr的方式,不同的方式有不同的配置,具体可以参考官方文档
http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html ,这里我采用Http11Protocol,它采用的是BIO的方式处理网络连接请求。至于bio,nio,apr三种方式的区别是什么不在本文讨论之列
注意:在Tomcat里配置完成后,如果你使用的idea,记得勾选下面,否则,好像无法加载上面改动的配置信息,具体大家可以自己研究

然后启动tomcat,在启动过程输出的信息中可以看到多了一个监听在8443端口上的连接处理器,如下图所示:

在中间那一行出现了[“http-bio-8443”]这就是用来处理https安全连接的处理器的名字。8443代表的是在Connector中port指定的值,可以配置成其他的,生产环境中显然是配置成默认的443端口。”http-bio-8443”中间的“bio”是因为我们上面配置的是org.apache.coyote.http11.Http11Protocol,它采用的就是bio的方式来处理网络连接请求。(最前面的“http”感觉输出“https”比较合适一点)
此时通过https://codecrazy.cn:8443访问tomcat还是没有建立安全的连接,因为浏览器中并没有安装证书,https的原理以及如何通过CA认证等不在本文讨论之列。本文采用的是一种叫做自签名证书的方法。
3.3、导出SSL证书
通过JDK的keytool指令生成并导出证书
# 一下命令我是在SSL证书所在位置下使用的,所在没有文件路径,默认所在路径
# -keystore 'SSL证书位置' -file 'SSL证书导出位置及以.crt为后缀的文件如tomcat.crt' -storepass '口令'
keytool -export -alias tomcat -keystore .keystore -file tomcat.crt -storepass 123456


3.4、将文件导入到浏览器中
不同的浏览器会有略有差别
一下以Google浏览器做案例
在地址栏输入chrome://settings/进入设置界面
搜索栏搜索 “安全”

点击进入之后下翻找到 “管理证书” 点击

*切换到如下图红框所示“受信任的根证书颁发机构”*

点击导入,再点击下一步,选择“浏览”找到我们上面生成的tomcat.crt文件,然后一路“下一步”,最后完成。
需要的话,可以重启浏览器后使用https访问应用
3.5、配置应用使用SSL
打开应用的web.xml加入一下配置
<!-- 允许通过SSL连接 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>securedapp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
将 URL 映射设为 /* ,这样你的整个应用都要求是 HTTPS 访问,而 transport-guarantee 标签设置为 CONFIDENTIAL 以便使应用支持 SSL。
如果你希望关闭 SSL ,只需要将 CONFIDENTIAL 改为 NONE 即可。
重启Tomcat即可
至此大功告成
虽然 JDK 的 keytool 工具也可以免费制作自签名的证书,但这只能用在练习或者测试中,因为如果数字证书颁布商不在浏览器的信任列表中,是会给用户弹出警告框的。作为电子商务网站肯定要用商业的数字证书!
3.6、如访问出现如下提示
您的连接不是私密连接
攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息)。了解详情
NET::ERR_CERT_INVALID
将您访问的部分网页的网址、有限的系统信息以及部分网页内容发送给 Google,以帮助我们提升 Chrome 的安全性。隐私权政策
x.x.x.x 通常会使用加密技术来保护您的信息。Google Chrome 此次尝试连接到 x.x.x.x 时,此网站发回了异常的错误凭据。这可能是因为有攻击者在试图冒充 x.x.x.x,或 Wi-Fi 登录屏幕中断了此次连接。请放心,您的信息仍然是安全的,因为 Google Chrome 尚未进行任何数据交换便停止了连接。
您目前无法访问 x.x.x.x,因为此网站发送了 Google Chrome 无法处理的杂乱凭据。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。
或 ‘不是安全连接等’

解决方案:
1、可以不用管,因为我们知道该网站是安全的,点击隐藏详情,高级,继续前往即可
2、解决方法参考百度经验:https://jingyan.baidu.com/article/fdffd1f8f704f7b3e98ca1c6.html
3、在当前页面用键盘输入 thisisunsafe ,不是在地址栏输入,就直接敲键盘就行了,页面即会自动刷新进入网页
产生原因:
因为Chrome不信任这些自签名ssl证书,为了安全起见,直接禁止访问了,thisisunsafe 这个命令,说明你已经了解并确认这是个不安全的网站,你仍要访问就给你访问了。
3.7、其他Https方法
可参考一下:https://blog.cat73.org/20170716/2017071601.https/
新版Google浏览器跨域Cookie解决方案的更多相关文章
- mac上设置新版chrome浏览器跨域
设置方法 打开一个新的可跨域的chrome窗口实现方法: 1. 打开终端 2. 输入下面的命令( 需要替换路径中的yourname ) open -n /Applications/Google\ Ch ...
- Chrome浏览器跨域
配置新版Chrome浏览器跨域,需要创建用户数据文件夹,在其中保存浏览器的缓存.历史记录.收藏夹等数据. Windows系统Chrome跨域 1 下载Chrome 64位绿色版,解压缩,并在桌面创建快 ...
- uni-app运行到浏览器跨域H5页面的跨域问题解决方案
官方文档对跨域的解决方案推荐: https://ask.dcloud.net.cn/article/35267 更方便的解决方案 项目根目录直接创建一个vue.config.js文件,并在里面配置代理 ...
- [1.6W字] 浏览器跨域请求限制的详细原理分析&寻找一种最简单的方式实现XHR跨域(9种方法, 附大招可以纯前端实现跨域!)
Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...
- [1.6W字]浏览器跨域请求的原理, 以及解决方法(可以纯前端实现) #flight.Archives011
Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...
- C#进阶系列——WebApi 跨域问题解决方案:CORS
前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列— ...
- C#进阶系列——WebApi 跨域问题解决方案:CORS(转载)
C#进阶系列——WebApi 跨域问题解决方案:CORS 阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2.场景测试 四.总结 正文 前言:上篇总结了下W ...
- 跨域学习笔记2--WebApi 跨域问题解决方案:CORS
自己并不懂,在此先记录下来,留待以后学习... 正文 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨 ...
- 解决浏览器跨域限制方案之CORS
一.什么是CORS CORS是解决浏览器跨域限制的W3C标准,详见:https://www.w3.org/TR/cors/. 根据CORS标准的定义,在浏览器中访问跨域资源时,需要做如下实现: 服务端 ...
- java、ajax 跨域请求解决方案('Access-Control-Allow-Origin' header is present on the requested resource. Origin '请求源' is therefore not allowed access.)
1.情景展示 ajax调取java服务器请求报错 报错信息如下: 'Access-Control-Allow-Origin' header is present on the requested ...
随机推荐
- RocketMQ的简单使用
大家好,我是Leo!今天来和大家分享RocketMQ的一些用法. 领域模型介绍 Producer: 用于生产消息的运行实体. Topic: 主题,用于消息传输和存储的分组容器. MessageQueu ...
- SSM之简单的CRUD
文章目录 前言 项目介绍 项目代码介绍 数据库文件 源码介绍 代码展示 配置文件 业务逻辑代码 总结 前言 大家好呀,前面不是说最近在学习SSM么,可能学的不是那么深,不过刚刚开始,学完肯定需要先动手 ...
- 虚拟机的安装与linux系统的使用
虚拟机的安装与应用 下载安装VMware Workstation Pro 安装成功之后点击创建虚拟机 勾选典型机型 勾选自动检测安装映像文件 设置虚拟机的命名和安装路径 设置磁盘的大小和虚拟磁盘的储存 ...
- GE反射内存实时通讯网络解决方案
时通讯网络是用于需要较高实时性要求的应用领域的专用网络通讯技术,一般采用基于高速网络的共享存储器技术实现.它除了具有严格的传输确定性和可预测性外,还具有速度高.通信协议简单.宿主机负载轻.软硬件平台适 ...
- Tomcat总体架构,启动流程与处理请求流程
系列文章目录和关于我 参考书籍<Tomcat架构解析> 一丶Tomcat总体架构 本文沿袭<Tomcat架构解析>中启发式的方式来总结Tomcat总体架构 1 Server S ...
- 揭秘Karmada百倍集群规模多云基础设施体系
摘要:本文结合Karmada社区对大规模场景的思考,揭示Karmada稳定支持100个大规模集群.管理超过50万个节点和200万个Pod背后的原理 本文分享自华为云社区<Karmada百倍集群规 ...
- 2022-03-16:给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号。 另外给一个下标从 0 开始的二维整数数组 meetings , 其中 meetings[i] = [xi,
2022-03-16:给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号. 另外给一个下标从 0 开始的二维整数数组 meetings , 其中 meetings[i] = [xi, ...
- [MAUI程序设计]界面多态与实现
目录 需求一:在不同设备上使用不同 UI 外观 定义控件 UI 外观 基于平台自定义配置 需求二:在不同数据类别中使用不同的 UI 外观 定义视图 UI 外观 创建数据模板 创建选择器 定义数据 需求 ...
- Python中json.dump()和json.dumps()的区别
一.图解 json.dumps(dict, indent):将Python对象转换成json字符串 json.dump(dict, file_pointer):将Python对象写入json文件 二. ...
- CogSci 2017-Learning to reinforcement learn
Key 元学习系统(监督+从属)扩展于RL设置 LSTM用强化学习算法进行训练,可以使agent获得一定的学习适应能力 解决的主要问题 DRL受限于特定的领域 DRL训练需要大量的数据 作者参考了Ho ...