【问题标题】:Set-Cookie Header is in the response but browser doesn't set Cookie in next request only in case of nginx router useSet-Cookie 标头在响应中,但浏览器仅在使用 nginx 路由器的情况下才在下一个请求中设置 Cookie
【发布时间】:2016-06-06 15:46:43
【问题描述】:

问题: 通过 chrome 开发者工具看到的作为流的一部分的浏览器请求:

  1. /request_one GET 请求,请求带有 some_cookie="abc" 和 响应 some_cookie="def"
  2. /request_one POST 请求 使用 some_cookie="def" 请求并使用 some_cookie="ghi" 响应 和一个 303 重定向到 /request_xxx
  3. /request_xxx GET 请求 请求 some_cookie="def"

我试图找出为什么第三个请求使用 cookie“def”而不是更新值“ghi”

这里的关键是,当我通过弹性负载均衡器和 nginx 路由器时会发生这种情况。 使用内部 URL 的相同流程,中间没有 nginx 路由器,工作正常

看起来,在响应设置 cookie 之前,会创建重定向请求。这是我的应用程序中的正常情况,我更新 cookie 并执行 redirect-303。

根据我的发现,cookie 大小的增加反过来会增加响应,影响请求和响应大小限制的 nginx 配置是什么。我在 nginx 错误日志中没有看到任何错误

有没有办法在 chrome 中从第 2 步响应到第 3 次重定向请求进行调试?

通过 curl 执行请求时更新与日志相同的问题 这是我通过 curl 运行时看到的

  • 忽略响应体

  • 连接 #0 到主机 application_url 保持不变

  • 向此 URL 发出另一个请求:'https://application_url/contextpath/request_xxx'

  • 禁用 POST,与 GET 一起使用

  • 找到主机 application_url 的捆绑包:xxxxxxxxxxxx

  • 重用现有连接! (#0) 与主机 application_url

  • 连接到 application_url (IP_HERE) 端口 443 (#0)

【问题讨论】:

  • Chrome中的重定向调试,在开发者工具的Network面板中勾选Preserve log
  • 谢谢亚历山大。我已经检查了保留日志。这就是我发现第三个请求没有更新的 cookie 值的方式。所以在这里我想要一种在第二步停止并从中获取 curl 请求的方法。所以我可以使用带有 --verbose 的 curl 调用第三个请求。
  • 我可以在 chrome 中禁用 303 重定向吗?
  • 由于 Chrome 是兼容 w3c 的浏览器,我认为您不能。但如果您愿意,您可以使用 curl 手动运行所有步骤。
  • 这个问题stackoverflow.com/questions/32219664/…对你有帮助吗?

标签: curl cookies nginx google-chrome-devtools http-redirect


【解决方案1】:

终于发现,是 cookie 大小导致了这个问题。 根据以下站点,chrome 的限制最高为 4096,而我正在通过 4116。

http://browsercookielimits.iain.guru/

为什么我对 nginx 着迷是因为当通过内部 url 使用时,它起作用了。但这不是问题。

所以要理解的一件事是,当 cookie 大小超过限制时,chrome 不会抱怨。它只是在创建下一个请求时不使用它

【讨论】:

  • 所以要注意 cookie 怪物(正如我的同事所描述的 :))并记住一个口头禅 为了支持大多数浏览器,每个域不要超过 50 个 cookie,并且不要超过 4093每个域的字节数,如browsercookielimits.squawky.net 中所述
猜你喜欢
  • 2012-05-02
  • 2014-08-24
  • 2019-04-26
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 2018-11-16
  • 2019-11-12
  • 2019-01-26
相关资源
最近更新 更多