Как использовать 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.

Другие вопросы по тегам