Я хочу использовать новый cookie-префиксы, которые еще не стандартизированы IETF. Эти __Secure-
и __Host-
.
Итак, давайте, например, установите этот файл cookie (здесь заголовок, возвращаемый сервером):
Set-Cookie: "__Host-apple=yummy; Secure; HttpOnly; Path=/"
Я хочу получить доступ к этому файлу cookie сейчас в nginx с $cookie-
переменная. Поэтому для тестирования я использую модуль echo, чтобы показать мне значение cookie:
location = /wannaeat/ {
echo $cookie___Host-apple;
}
Однако nginx всегда показывает мне -apple
. Кажется, используется дефис (-
), чтобы разделить переменную.
Потому что, когда я, например, назовите куки __Host_apple
(и переменная nginx $cookie___Host_apple
) nginx правильно показывает мне значение.
Я знаю, что мог бы использовать $http_cookie
и используйте регулярное выражение, чтобы найти правильный файл cookie, но это невозможно, так как я хочу map
значение cookie.
Прежде всего, map
действительно поддерживает сопоставление с регулярными выражениями:
Исходные значения указываются в виде строк или регулярных выражений (0.9.6).
(Таким образом, вы, вероятно, должны быть готовы к работе!)
Однако для обсуждения и комментариев, поскольку то, что вы пытаетесь использовать, еще не является стандартом, вам лучше зайти в их списки рассылки или еще что-то и сказать им, что то, что они предлагают сделать, - действительно плохая идея. .
Просто ради этого я зашел в диспетчер файлов cookie в своем браузере, чтобы взглянуть на использование _
подчеркивание против -
кратчайший рывок. Подчеркивание активно используется по крайней мере 90% сайтов / файлов cookie, тогда как использование тире в файлах cookie, вероятно, намного ниже 5%.
Причина почему -
недопустим в именах переменных, очень просто и стара как день - потому что этот символ часто используется почти во всех языках программирования вместо знака минус (тире, минус, mdash: -−-). В свою очередь, согласно re_format(7)
и pcrepattern(3)
, этот сценарий также является частью широко используемых реализаций регулярных выражений, где подчеркивание всегда считается частью слова, а символ тире - нет.
Я предполагаю, что такая же проблема повторится на многих других языках, а также с nginx.conf.