我想使用新的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,但这是不可能的,因为我想map
Cookie 值。
答案1
首先,map
事实上,支持正则表达式匹配:
源值指定为字符串或正则表达式(0.9.6)。
(因此你应该可以出发了!)
但是,为了讨论和评论,由于您尝试使用的东西还不是标准,您最好去他们的邮件列表或类似的地方,告诉他们他们提议做的事情是一个非常糟糕的主意。
出于这个原因,我打开了浏览器中的 Cookie 管理器,查看了_
下划线与-
最短破折号的使用情况。至少 90% 的网站/cookie 大量使用下划线,而 cookie 中的破折号使用率可能远低于 5%。
在变量名中无效的原因-
非常简单,而且由来已久——因为该符号在几乎所有编程语言中都经常用来代替减号(破折号、减号,mdash:---)。反过来,根据re_format(7)
和pcrepattern(3)
,这种情况也是广泛使用的正则表达式实现的一部分,其中下划线始终被视为单词的一部分,而破折号符号则不是。
我认为同样的问题会在许多其他语言以及 nginx.conf 中重现。