Как использовать hypen в именах файлов cookie для nginx?
Я хочу использовать новые префиксы 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.
1 ответ
Прежде всего, map
фактически поддерживает сопоставление с регулярными выражениями:
Исходные значения указываются в виде строк или регулярных выражений (0.9.6).
(Таким образом, вы, вероятно, должны быть хорошими, чтобы пойти!)
Тем не менее, ради обсуждения и комментариев, поскольку то, что вы пытаетесь использовать, еще не является стандартом, вам лучше зайти в их списки рассылки или еще много чего, и сказать им, что то, что они предлагают сделать, является действительно плохой идеей.,
Просто ради этого я зашел в менеджер файлов cookie в моем браузере, чтобы посмотреть на использование _
подчеркивание против -
кратчайший тире. Подчеркивание активно используется, по крайней мере, на 90% сайтов / файлов cookie, тогда как использование тире в файлах cookie, вероятно, намного ниже 5%.
Причина по которой -
недопустимо в именах переменных очень просто и так же стара, как день - потому что символ часто используется почти во всех языках программирования вместо знака минус (тире, минус, mdash: -−—). В свою очередь, согласно re_format(7)
а также pcrepattern(3)
этот сценарий также является частью широко используемых реализаций регулярных выражений, где подчеркивание всегда считается частью слова, а символ тире - нет.
Я предполагаю, что та же самая проблема повторится во многих других языках так же как с nginx.conf.