如何在 nginx 的 cookie 名称中使用连字符?

如何在 nginx 的 cookie 名称中使用连字符?

我想使用新的cookie 前缀,这些尚未被 IETF 标准化。它们是__Secure-__Host-

因此让我们设置这个 cookie(这里是服务器返回的标头):

Set-Cookie: "__Host-apple=yummy; Secure; HttpOnly; Path=/"

我现在想在 nginx 中使用变量访问此 cookie $cookie-。因此,为了进行测试,我使用 echo 模块来显示 cookie 的值:

location = /wannaeat/ {
        echo $cookie___Host-apple;
}

但是 nginx 总是显示-apple。它似乎使用连字符 ( -) 来分割变量。

因为当我命名 cookie __Host_apple(和 nginx 变量$cookie___Host_apple)时,nginx 会正确地向我显示该值。

我知道我可能可以使用$http_cookie正则表达式来查找正确的 cookie,但这是不可能的,因为我想mapCookie 值。

答案1

首先,map事实上,支持正则表达式匹配:

源值指定为字符串或正则表达式(0.9.6)。

(因此你应该可以出发了!)


但是,为了讨论和评论,由于您尝试使用的东西还不是标准,您最好去他们的邮件列表或类似的地方,告诉他们他们提议做的事情是一个非常糟糕的主意。

出于这个原因,我打开了浏览器中的 Cookie 管理器,查看了_下划线与-最短破折号的使用情况。至少 90% 的网站/cookie 大量使用下划线,而 cookie 中的破折号使用率可能远低于 5%。

在变量名中无效的原因-非常简单,而且由来已久——因为该符号在几乎所有编程语言中都经常用来代替减号(破折号、减号,mdash:---)。反过来,根据re_format(7)pcrepattern(3),这种情况也是广泛使用的正则表达式实现的一部分,其中下划线始终被视为单词的一部分,而破折号符号则不是。

我认为同样的问题会在许多其他语言以及 nginx.conf 中重现。

相关内容