chrome 调试踩坑

问题:本地调试代码不发送cookie

问题描述:两周前打开谷歌,进行本地项目调试(公司做的是混合开发APP),发现接口都报200,但是除了第一个接口报拿到了后台数据,其余接口返回数据都是:您还未登录,记录了一下问题的查找和解决思路。但是通过手机打开本地项目就能获取到数据

image.png
image.png

思路

  1. 既然所有接口都报200,说明接口是调成功了的,那么登录接口能拿到数据,而根据校验规则,需要先登录再调其他接口,我猜测会不会是还未登录成功就去调其他接口了,因此我在其余接口设置了5秒延时调用,返回数据依然是:您还未登录

  2. 找后台询问是否修改做了某种限制,但是后台说并没有做修改,怀疑是登录后的token验证,因此把token验证取消了,依然不能获取到数据,而且这种方法也是不合理的,违背了项目的要求(必须加上token验证)

  3. 然后后台告诉我应该是浏览器保存的cookie有问题,因为是跨域请求,设置了每次请求必须携带cookie,这也正好解释了为什么手机打开本地项目就能获取到数据,因为我们是混合开发,手机上本地打开项目是在原生的webview 中打开,而原生那边有单独的把 cookie保存到webview,因此他们的cookie能每次请求都挟带上cookie

  1. 查看 application,cookie 为空


    image.png
  1. 查看登录接口的响应头,验证是否返回了 cookie,突然发现旁边一个警告⚠️,直觉告诉我这就是原因了,原文如下:

this set-cookie didn`t specify a "SameSite" attribute and was default to "SameSite=Lax" and broke the same rules specified in the SameSiteLax value。
大致意思是:set-cookie 没有 SameSite 属性, 因而设置为默认值 “Lax”,并且违反了值为 SameSiteLax 的规则。

  1. 我把这句话放在 百度上搜索,立马找到解决办法:
    http://www.0x55aa.com/%E7%AE%97%E6%B3%95-%E7%BC%96%E7%A8%8B/1774.html

解决办法

打开Chrome 浏览器分别输入:chrome://flags/#same-site-by-default-cookies
chrome://flags/#cookies-without-same-site-must-be-secure 都设置为 disabled,然后重启浏览器就好了。

image.png

扩充

另外我查找了一些关于SameSite的其他资料,找到两篇文章。
https://blog.heroku.com/chrome-changes-samesite-cookie
https://www.chromestatus.com/feature/5088147346030592

两篇文章中提到,SameSite 是谷歌(也包括 使用 webkit 的 Safari)推出的一个 CSRF 安全策略, 在后端没有返回 SameSite 的情况下,默认设置为 Lax,而 Lax 的等级为中,意味着跨站访问是不能设置和携带 cookie 的,方法之一是后端改接口,但是反正浏览器跑项目只是用于项目调试,既然是安全策略,浏览器行为,还是建议直接修改默认设置。

你可能感兴趣的:(chrome 调试踩坑)