[转帖]CORS跨域发送Cookie

cors,发送,cookie · 浏览次数 : 0

小编点评

**CORS跨域发送Cookie指南** **引言** CORS跨域请求通常需要使用 Cookie 来进行身份验证,但默认情况下浏览器对跨域请求不允许携带 Cookie。为了克服这个障碍,我们将在前端代码中设置 `withCredentials` 属性为 `true`,使其能够携带 Cookie。 **模拟前端代码** 以下是模拟前端代码设置 `withCredentials` 属性为 `true` 的 JQuery 示例: ```javascript $.ajax({ type: "GET", url: "http://localhost:8080/seek/userinfo/#{xxxx}", async: false, xhrFields: { withCredentials: true }, success: function(msg) { alert(msg.msg); } }); ``` **模拟后端代码** 服务器也需要设置相应响应头才能允许跨域请求携带 Cookie: ```javascript response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE,PUT"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token , Authorization"); response.setHeader("Access-Control-Allow-Credentials", "true"); ``` **注意** * 使用 `withCredentials` 属性设置 Cookie 的方法可能因框架或库不同而有所不同。 * `Access-Control-Allow-Origin` 属性只能指定单一域名,不能使用通配符。 * `Access-Control-Allow-Credentials` 属性必须设置为 `true`才能允许跨域请求携带 Cookie。

正文

CORS跨域发送Cookie
https://www.jianshu.com/p/3a24a207b307

 

引言

由于默认情况下浏览器对跨域请求不允许携带Cookie,所以这次开发再与前端同学在权限验证这块踩了好多坑,故将一些教训写下来,共勉!

CROS

在 2014 年 W3C 发布了 CORS Recommendation 来允许更方便的跨域资源共享,同时CORS也允许我们使用额外的相应头字段来允许跨域发送Cookie。

模拟前端代码

设置withCredentials为true即可让该跨域请求携带 Cookie。 注意携带的是目标页面所在域的 Cookie。以JQuery示例

$.ajax({

  type: "GET",

  url: "http://localhost:8080/seek/userinfo/#{xxxxx}",

  async:false,

  xhrFields: {

      withCredentials: true

  },

  success: function(msg){

    alert(msg.msg);

    }

});

模拟后端代码

此处还需要设置服务器接受跨域发送的Cookie。 否则会被浏览器的同源策略挡住:

服务器主要是设置response access-control-allow-credentials为"true", 即可允许跨域请求携带 Cookie。

相关代码如下:

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));

response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE,PUT");

response.setHeader("Access-Control-Max-Age", "3600");

response.setHeader("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token , Authorization"); response.setHeader("Access-Control-Allow-Credentials", "true");

注意要点

跨域发送 Cookie 还要求 Access-Control-Allow-Origin不允许使用通配符事实上不仅不允许通配符,而且只能指定单一域名

原文如下:

If the credentials flag is true and the response includes zero or more than one Access-Control-Allow-Credentials header values return fail and terminate this algorithm. –W3C Cross-Origin Resource Sharing

我采取的策略是request.getHeader(“Origin”)每次都获取请求的源,但是这样做的缺点也是很多的,主要就是不安全,任意请求携带Cookie都可以接受,最好的就是服务端可以维护一个接受Cookie的Origin列表,验证Origin后在将其设置为Access-Control-Allow-Origin的值。

结束语

在正确配置后就可以跨域发送Cookie进行客户端与服务端之间相关的一些会话了,当然如果直接就是同一域的话,那就肯定没这些问题啦,有时间再在这块深入一下^_^!

与[转帖]CORS跨域发送Cookie相似的内容:

[转帖]CORS跨域发送Cookie

CORS跨域发送Cookiehttps://www.jianshu.com/p/3a24a207b307 引言 由于默认情况下浏览器对跨域请求不允许携带Cookie,所以这次开发再与前端同学在权限验证这块踩了好多坑,故将一些教训写下来,共勉! CROS 在 2014 年 W3C 发布了 CORS R

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打

[转帖]awk 中 FS的用法

https://www.cnblogs.com/rohens-hbg/p/5510890.html 在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /

[转帖]Windows Server 2022 简体中文版、英文版下载 (updated Oct 2022)

https://sysin.org/blog/windows-server-2022/ Windows Server 2022 正式版,2022 年 10 月更新,VLSC Posted by sysin on 2022-10-27 Estimated Reading Time 8 Minutes