【问题标题】:Set-Cookie response and requestSet-Cookie 响应和请求
【发布时间】:2018-03-16 21:28:54
【问题描述】:

当我使用浏览器发出 HTTP 请求以从我的 Apache 服务器获取 index.html 文件时,如果请求标头中不存在特定令牌,则有一个代理可以重定向我的登录流量。因此,初始请求的标头中没有令牌是有意义的,然后代理将强制重定向登录,登录后我将看到 index.html 文件以及响应标头中的相关令牌。

所以我的问题如下: 如果登录后服务器使用 index.html 文件响应响应头中带有特定令牌的响应,如何使浏览器自动将令牌附加到所有后续 http 请求上?

在我从服务器取回 index.html 文件后,浏览器将请求加载 index.html 文件中引用的应用程序所需的所有字体和库,但这些请求不会在请求标头中包含令牌,这反过来会导致浏览器再次被重定向以进行登录。这么粘稠的循环……

我正在考虑使用“Set-Cookie”让代理返回标头中的令牌,但 Chrome 不会在所有后续请求中自动添加该 cookie。邮递员似乎添加了标题,但没有添加 Chrome。我设置的 cookie 必须使用 HttpOnly 和 Secure 标签。所以我无法从 JavaScript 访问它。

如果还有其他问题,请告诉我。 提前致谢。

亲切的问候 弗朗索瓦

【问题讨论】:

  • “我正在考虑使用 'Set-Cookie' 让代理返回标头中的令牌,但 Chrome 不会在所有后续请求中自动添加该 cookie。” ——应该可以。您是否对不同的资源使用不同的主机名?或重定向以添加或删除 www?
  • "我设置的 cookie 必须使用 HttpOnly 和 Secure 标签" — 你的测试环境使用 HTTPS 吗?
  • 我没有使用任何其他主机名,整个应用程序运行在具有一个 url 的单个节点上。

标签: javascript html apache http cookies


【解决方案1】:

我找到了问题的答案。

这就是我测试的方式。我创建了一个运行 Apache 的 docker 容器,它承载了 index.html、auth.html 和 login.html 文件。然后,我使用以下 httpd.conf 设置和 mod_rewrite 来帮助设置 cookie 和测试 cookie。

RewriteCond %{HTTP_COOKIE} !^.*X-TOKEN.*$
RewriteCond %{REQUEST_URI} (.*)login.html
RewriteRule (.*) "/login.html"

RewriteCond %{HTTP_COOKIE} !^.*X-TOKEN.*$
RewriteCond %{REQUEST_URI} !(.*)login.html
RewriteRule (.*) "/auth.html"

RewriteCond %{REQUEST_URI} (.*)login.html
RewriteRule .* - [E=STATUS:1]

Header set Set-Cookie X-SBG-TOKEN=ThisIsMyToken;HttpOnly;Secure env=STATUS

请原谅可怕的情况:)

但我发现,根据请求,我不应该检查标头中的X-TOKEN,而是应该在请求 cookie 中检查它(这个我仍然不清楚,是发送的 cookie请求?Apache 服务器如何知道这个 cookie?)。通过这种方式,我能够检查浏览器是否确实通过了身份验证。

感谢所有回复和帮助的人!

亲切的问候 弗朗索瓦

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2021-12-29
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多