谷歌浏览器80版本以后,如何处理出现的问题SameSite跨域问题

news/2024/5/18 15:05:03 标签: nginx, tomcat, SameSite, cookie, 跨域

谷歌浏览器80版本以后,出现的问题:

情况一:

如果地址栏里的域名是aaa.com,而对应的Ajax请求也是aaa.com,那么可以将aaa.com下的cookie传给任何aaa.com域名的请求,比如:登录aaa.com时产生的cookie(假设cookie为token=123),在Ajax调用aaa.com/api/queryUser接口时是可以将cookie传递过去的,不管对应的cookie有没有设置Secure与SameSite=None。

情况二:

如果地址栏里的域名是aaa.com,而对应的Ajax请求是bbb.com,那么可以将bbb.com下的cookie传给任何bbb.com域名的请求,比如:登录bbb.com时产生的cookie(假设cookie为token=123),在Ajax调用bbb.com/api/queryUser接口时是可以将cookie传递过去的,但是前提是token=123的这个cookie必须设置 Secure与SameSite=None属性,否则即使是同域名cookie也是无法传递的。注意:这里说的是地址栏里是aaa.com,访问的是bbb.com/api/queryUser,跨域名的话,即使加了Secure与SameSite=None,也是不行的哦。

 完整的Nginx配置:

upstream tomcat_server {
                server 127.0.0.1:8001  weight=10 max_fails=2 fail_timeout=30s;
}


log_format newmain '$remote_addr - "$http_x_forwarded_for" - "$http_j_forwarded_for" - $remote_user [$time_local]'
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
#限流模块
limit_req_zone $binary_remote_addr zone=ip_limit_index:20m rate=500000r/s;

server
{
      listen 80;

      server_name              www.xxx.com ;
     access_log               /export/xxx/nginx/logs/www.xxx.com/www.xxx.com_access.log main;
      error_log                /export/xxx/nginx/logs/www.xxx.com/www.xxx.com_error.log warn;
      error_page 411 = @error_page;

      root /export/App/www.xxx.com/;   
      
      location / {
    	  
        set $flag "flag";
         #如果是指定域名的请求,设置跨域
        if ($http_origin ~* "(xxx.com|xxx.cn)") {
            add_header 'Access-Control-Allow-Origin' "$http_origin";
          add_header 'Access-Control-Allow-Credentials' 'true';
          add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
          add_header 'Access-Control-Allow-Headers' 'Origin,X-Requested-With,Content-Type,Accept,Cache-Control,frLo';
          add_header 'Access-Control-Max-Age' 1728000;
        }
       
        #如果是预检请求,设置跨域后直接返回
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' "$http_origin";
          add_header 'Access-Control-Allow-Credentials' 'true';
          add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
          add_header 'Access-Control-Allow-Headers' 'Origin,X-Requested-With,Content-Type,Accept,Cache-Control,frLo';
          add_header 'Access-Control-Max-Age' 1728000;
          #预检请求直接返回
          return 200;
        }
        
        
        proxy_next_upstream     http_500 http_502 http_503 http_504 error timeout invalid_header;
        proxy_set_header        Host  $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        #设置cookie,当然也可以对以后的cookie追加SameSite=None; Secure配置
        add_header Set-Cookie 'mycookie=xxxx;Path=/;SameSite=None; Secure';
        proxy_pass              http://tomcat_server;
        expires                 0;
        fastcgi_buffer_size 128k;
		fastcgi_buffers 32 32k;
	}
		
		 
    #静态资源的处理
    location ~ .*\.(css|js|ico)$ {
		gzip on;
		gzip_min_length 1k;
		gzip_buffers 4 16k;
		gzip_comp_level 3;
		gzip_types text/plain application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png image/x-icon;
		gzip_vary on;
		gzip_disable "MSIE [1-6]\.";
    }

    location /logs/ {
        autoindex       off;
        deny all;
    }  
     
}

如何在Chrome浏览器中模拟请求或修改请求的域名

 F12打开调试模式,在请求路径上右键,然后Copy as fetch,打开Console标签页,粘贴后回车,再回到刚才的Network标签页就可以看到刚才在console里发送的请求了,当然console里可以修改域名及请求的参数。

 

 如何在Chrome浏览器中临时修改SameSite=None和Secure

然后打上勾 

 

 右键编辑SameSite为None,

 

 此时就算刷新页面编辑的值也不会变,除非清楚缓存或者等当前会话过期。当然这个与Expires/Max-Age这一列的属性有关,如果是Session类型的就是会话过期就还原了。但是这只是临时的方案。

 Nginx新增cookie

add_header Set-Cookie 'mycookie=xxxx;Path=/;SameSite=None; Secure';

 


http://www.niftyadmin.cn/n/1702273.html

相关文章

php 最接近的数字,如何在PHP中从具有正数和负数的数组中找到最接近零的值

在最后的日子里, 我需要完成一个编码测试, 以暴露以下需要解决的问题:在本练习中, 你必须分析温度记录以找到最接近零的温度。样品温度。在此, -1.7最接近0。实现函数closesToZero以使温度更接近于零(属于数组ts)。如果ts为空, 则返回0(零)。如果两个数字接近零, 则…

Nginx新增SameSite属性的cookie

add_header Set-Cookie mycookiexxxx;Path/;SameSiteNone; Secure; Nginx配置完成版参考 upstream tomcat_server {server 127.0.0.1:8001 weight10 max_fails2 fail_timeout30s; }log_format newmain $remote_addr - "$http_x_forwarded_for" - "$http_j_fo…

java返回功能,java实现返回Top功能

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼标题页function setVariables() {imgwidth235; //图像的宽度imgheight19; //图像的高度if (navigator.appName "Netscape") { //netscape下的位置设置horz".left";vert".top";docStyle"docume…

NoSuchBeanDefinitionException

情况1: No qualifying bean of type […] found for dependency 如果在 Spring 上下文中找不到对应的定义,就会抛出 NoSuchBeanDefinitionException(比如没有标注 Component,Repository,Service, Controller等注解)所…

matlab设计匹配滤波器,利用MATLAB实现匹配滤波器的仿真验证

匹配滤波器的仿真验证一. 实验目的:利用matlab验证匹配滤波器的特性二. 实验要求:设二进制数字基带信号s(t)∑ang(t-nTs),加性高斯白噪声的功率谱密度为0。其中an∈{1,-1},g(t) 100 其他(1)若接收滤波器的冲激响应函数h(t)g(t),画…

php session和cookie的区别,细说cookie和session的区别

做网站开发有一段时间了,而自己却发现对于cookie和session的基础理解存在不足,因此花了2天时间好好学习了一下cookie和session的特性,给大家分享一下1. 为什么需要cookie和session根本原因是HTTP协议是无状态的协议,就是当你通过客…

图像分形的matlab算法,多重分形谱算法

function multifractal(A)format long gLlength(A);i1;modify1;tmin2; % 边框间距,“※”tmax10;ttmin-10;ttmax10; % 自定义 q 的范围for rtmin:1:tmaxc(i,1)mod(L,r);ii1;endc; % 计算不能被边长r整除的余数aL-…

mysql中delete和drop的区别,SQL中DELETE和DROP的简单比较

在SQL命令中DELETE和DROP都是可以用于删除数据库的元素,那么它们之间有什么区别?下面本篇文章就给大家简单比较一下DELETE和DROP,介绍DELETE和DROP的区别,希望对大家有所帮助。DELETE命令的简单介绍DELETE是一种数据操作语言(DDL)…