nginx(七十二)nginx中与cookie相关的细节探讨

背景知识铺垫

  nginx中与cookie相关

①  Cookie请求头内容回顾

 cookie的形式和属性

②   nginx获取cookie值的两种方法

1) $http_cookie  -->获取Cookie请求头"所有值"

2) $COOKIE_flag  -->获取Cookie请求头的"某个key"

  [1]、'脱敏'场景在'日志'中只记录'非敏感'的key

  [2]、由于nginx会进行'lowcase',将所有的字符转化为'小写',推荐使用$COOKIE_lowercase形式

3) nginx也可通过'map'获取指定的cookie

4) 理解了'Cookie'请求头的构成,就理解了'方法二'的正则

③   nginx对Cookie请求头限制

常见: 响应头中的'Cookie'头大,导致'400'报错

client_header_buffer_size

相关参考

If the directive is specified on the server level,\

  the value from the 'default server' can be used  --> "如何理解"?

解读: 如果指令是在'server'级别指定,则仅server为'默认server'才使用'该指令'

off:  默认判定'请求头'无效

除了下划线,nginx还可能丢弃哪些请求头

重点: nginx对ignore_invalid_headers'无效头'的判定

1) 就是'英文字母'、'数字'、'连字号'和'下划线'

2) 对'下划线'进行特殊处理,下划线可以通过'underscores_in_headers'控制

特殊场景: 需要'_下划线'、'.点 --> key为 a.b'

  

 

1) 如果'带invalid_header'且'打开ignore_invalid_headers on'配置,就会'输出日志'并忽略

2) error_log logs/error.log info;

3) error.log的'日志级别'有debug, info, notice, warn, error, crit, alert, emerg

4) 打开'error_log'的info日志,可以看到'告警'信息

client sent invalid header line: "xxxx" while reading client request headers

③  nginx对上游Set-Cookies响应头属性的处理

proxy_cookie_xxx指令的深入了解

+++++++++ "(1) 属性的处理" +++++++++

常见:'domain'、'path'、'secure'、'httponly'、'samesite'属性'修改'

涉及'3'个指令:

  [1]、proxy_cookie_domain   --> 默认是'off'

  特点:通过Set-Cookies中的'domain属性'来判断,进行'pdomain'属性的修改

  [2]、proxy_cookie_path     --> 默认是'off'

  特点:通过Set-Cookies中的'path属性'来判断,进行'path'属性的修改

  思考:正则形式是'第一个'还是'所有的'匹配

  特殊1:proxy_cookie_path / "/;secure"  --> "可以附加其它属性",使用'不规范'

  特殊2:proxy_cookie_path  '非'正则时候应该是'前缀替换',而不是'中间替换'或'全局替换'

  [3]、proxy_cookie_flags    --> 默认是'off','1.19.3'版本引入

  特点:通过Set-Cookies中的'key'来判断,进行'相关属性'的修改

注意:每个指令的'default值',以及'指令'哪个'版本'提供的

补充:只是'单向'对'上游响应头Set-Cookies'的处理

说明:两个'维度' --> 基于'cookie-av'进行'av'修改;基于'key'进行'av'修改

'多指令'附加'细节':

  1) 由于可能包含多个'Set-Cookies'响应头,nginx也可能包含多个'属性指令',以及多个'相同'指令

  2) 某一个'Set-Cookies'经过相同指令'cookie-av'属性的洗礼,第一个'属性指令'匹配即'停止'

  3) 再继续经过其它'cookie-av'处理
​
注意: 一些高级属性与'nginx版本'的适配

相关属性见该博客

+++++++++ "(2) Set-Cookies响应头的处理" +++++++++

1)	proxy_cache_valid '指令'

如果包括 'Set-Cookie' 响应头,该响应'不会'被缓存

2) 	proxy_ignore_headers

3)  proxy_hide_header

思考: 哪些'响应头字符'是合法的

备注:'点'在ASCII中是46'2e',至少是'满足RFC规范'的

案例: 响应头'eg --> "Host "'带空格,nginx处理'报错'

④    nginx处理跨域请求Cookie

+++++++++++ "细节点" +++++++++++

1) 204 '状态码'  --> add_header 'always'

HTTP 204状态码含义: 请求已经被处理,但无返回内容'No Content',这里指的是'response body'

'204'的三个应用场景:

   [1]、跨域==> 204 --> add_header 'always'

   [2]、PUT、DELET进行'资源'更新  --> '元数据更新'

   [3]、OPTIONS预检请求,正确['204'],错误['412']

   备注:Range相关的206和416状态码

 204(No-Content),服务器成功处理了请求,但不需要返回任何实体内容

3) 了解'常见报错'

重点理解各种Access-Control-Allow响应头以及跨域的报错

Nginx通过Cookie做灰度就这么简单

默认proxy_set_header Host $proxy_host导致跨域Cookie丢失

nginx 反向代理及 Cookie 的四个问题

nginx 使用 proxy_cookie_path 解决反向代理 cookie 丢失导致无法登录等问题

⑤   Cookie在nginx的应用 

思考:nginx利用cookie可以'做哪些操作'? --> 'map匹配'

场景:获取Cookie中的信息进行'限流'、'黑白'名单、'灰度'发布等

备注:后续'写一个专栏'

 nginx发送一次请求的完整过程

⑥  Cookie浏览器使用的限制

1) 不同'厂商'的浏览器,并且相同厂商的'不同版本'的浏览器,对Cookie的使用'有差异'

  备注: 涉及Cookie的'存储'和'使用'

2) 后续关注

  [1]、'CSRF'的机制

  [2]、Cookie丢失的原因   --> "抓包分析"
 
    1) 是指请求'没有携带'预期的Cookie

    2) 还是js读取不到后端返回的Set-Cookie

  [3]、session共享方案 --> memcached、tomcat自身的、redis、spring的集成方案

理解lua指令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/15327.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

榜上有名 | 创宇盾荣登“2023 IT市场权威榜单”!

4月20日,已连续成功举办23届的IT市场年会在北京举行,作为权威咨询机构赛迪主办,中国IT业界延续时间最长的年度盛会之一,“2023 IT市场年会”隆重发布重磅权威榜单。 创宇盾作为云防护领域专业防护产品,在国家经济产业…

零成本教你部署一个ChatGPT网站

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

为何电商这么难做…...你是否忽略了这个问题?

物流时效是影响买家体验的重要环节,物流服务优劣也是买家网上购物时的重要参考依据。但电商企业对于快递公司的时效承诺、服务质量基本处于被动接受的状况,直到买家投诉才知道快递公司服务缺失,若买家不投诉也没法主动知道大量的订单是否按约…

Excel技能之实用技巧,高手私藏

今天来讲一下Excel技巧,工作常用,高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度,不如下班学习提效率。能力有成长,效率提上去,自然不用加班。 消化吸收,工作中立马使用,感觉真不错。…

随手记录:Livox 时间戳修改为ROS时间戳

参考与前言 传感器类型:Livox-Mid70 参考链接:Ubuntu20.04系统安装Livox ROS Driver 官方驱动:https://github.com/Livox-SDK/livox_ros_driver 碎碎念:之所以要改成rostime主要是 提取pcd的时候发现这个timestamp 300.xxx 打…

史上最全Maven教程(三)

文章目录 🔥Maven工程测试_Junit使用步骤🔥Maven工程测试_Junit结果判定🔥Maven工程测试_Before、After🔥依赖冲突调解_最短路径优先原则🔥依赖冲突调解_最先声明原则🔥依赖冲突调解_排除依赖、锁定版本 &a…

ByteHouse云数仓版查询性能优化和MySQL生态完善

ByteHouse云数仓版是字节跳动数据平台团队在复用开源 ClickHouse runtime 的基础上,基于云原生架构重构设计,并新增和优化了大量功能。在字节内部,ByteHouse被广泛用于各类实时分析领域,最大的一个集群规模大于2400节点&#xff0…

2023年6月CDGP数据治理专家认证报名及费用

目前6月DAMA-CDGP数据治理认证考试开放报名地区有:北京、上海、广州、深圳、长沙、呼和浩特。 目前南京、济南、西安、杭州等地区还在接近开考人数中,打算参加6月考试的朋友们可以抓紧时间报名啦!!! DAMA认证为数据管…

肝一肝设计模式【二】-- 工厂模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 文章目录 系列文章目录前言一、简单工厂模式二、工厂方法模式三、抽象工厂模式写在最后 前言 在实际开发过程中,构建对象往往使用new的方式来构建,但随着…

【社区图书馆】PyTorch高级机器学习实战 读书感想

《PyTorch高级机器学习实战》十大特点 1. 深入全面的内容覆盖: 本书的内容深入而全面,涵盖了深度学习中的多个领域,包括自然语言处理、计算机视觉、强化学习等,并介绍了各种不同的神经网络结构和优化算法。 2. 理论和实践并重&am…

php执行语句在MySQL批量插入大数据量的解决方案及计算程序执行时间(大数据量、MySQL语句优化)

MySQL里批量插入大数据的解决方案 前言一、PHP计算程序执行时间二、Mysql批量插入数据1.INSERT INTO 语句2.批量插入大数据2.1 使用循环$sql的方式2.2 循环(值1, 值2,....)的语句2.3测试过程出现的错误 三、实战PHPExcel批量导入大数据量优化 前言 近期在MySQL报表开发过程中&…

【微服务笔记22】微服务组件之Sentinel控制台的使用(Sentinel Dashboard)

这篇文章,主要介绍微服务组件之Sentinel控制台的使用(Sentinel Dashboard)。 目录 一、Sentinel控制台 1.1、下载Dashboard控制台 1.2、搭建测试工程 (1)引入依赖 (2)添加配置信息 &#…

R语言的基本数学运算

目录 一、对象命名原则 二、基本数学运算 2.1 四则运算 2.2 余数和整除 2.3 次方或平方根 2.4 绝对值 2.5 exp()与对数 2.6 科学符号e 2.7 圆周率与三角函数 2.8 四舍五入函数 2.9 近似函数 2.10 阶乘 三、R语言控制运算的优先级 四、无限大 五、非数字&#xf…

3.7 Linux shell脚本编程(分支语句、循环语句)

目录 分支语句(对标C语言中的if) 多路分支语句(对标C语言中的swich case) 分支语句(对标C语言中的if) 语法结构: if 表达式 then 命令表 fi 如果表达式为真, 则执行命令表中的命令; 否则退出if语句,…

Linxu下性能指标采集工具之nmon工具的使用

前言 近期在测试JefLogTail,由于JefLogTail使用的是轮询的方式来监听文件夹,所以对cpu的消耗可能会高一些,所以在测试的时候着重关注CPU,Linux下查看CPU信息一般采用top命令来实时观察,但是这种对于只是通过观察数据的变化来评估…

Anaconda,CUDA注意事项

2. 呜呜呜!!!用别人的环境,如果他是非GPU版本的TF,你把非GPU版本的TF卸载后安装GPU版本的TF他也装不上。。。会默认给你装非GPU版本的TF!!!大坑比!!&#xf…

streamlit (python构建web可视化框架)笔记

文章目录 一、安装使用streamlit二、streamlit使用1.展示和数据样式2.dataframe()生成交互表和table()方法生成静态表3.绘制折线图4.绘制地图5.一些组件slider()滑动条 checkbox()确认框 selectbox()选择器6.侧边栏7.布局分列8.多页 三、Steamlit可视化简单应用--冒泡排序可视化…

科学防雷接地和雷电防护方案

说到防雷,可能不少人首先会想到避雷针,而“避雷针”这一概念,很容易让大家对防雷的概念造成误解。 误解1: 避雷针是用来“避雷”的。 其实,避雷针的学名叫“接闪器”,不是用来“避开雷击”的,而是用来“迎…

传统机器学习(七)支持向量机(2)sklearn中的svm

传统机器学习(七)支持向量机(2)sklearn中的svm 2 sklearn中的svm 2.1 LinearSVC及SVC参数详解 2.1.1 SVC参数 class sklearn.svm.SVC(*,C1.0, kernelrbf, degree3, gammascale, coef00.0, shrinkingTrue, probabilityFalse, tol0.001, cache_size200, class_weightNone, ve…

为什么企业要做大规模敏捷?

背景 软件工程里一个重要的指标就是“可用的软件”,敏捷宣言里也同样告诉我们“工作的软件高于详尽的文档”,那“可用的软件”、“工作的软件”意味着什么呢?在我的理解里,可以经历用户 “千锤百炼”的软件就是一个“可用的软件”…