Как можно дублировать заголовки HTTP? - PullRequest
0 голосов
/ 04 февраля 2020

Я бегу Django с помощью Gunicorn позади Nginx. Я добавил несколько заголовков к ответу, используя Nginx, но затем решил написать промежуточное программное обеспечение в Django, которое будет делать то же самое.

Я добавил некоторые значения в заголовок Access-Control-Allow-Headers. Я добавил промежуточное ПО, но забыл удалить conf Nginx, который добавлял заголовки. Итак, оба слоя закончили тем, что добавили заголовки. Позже я проверил ответ в браузере, который действительно удивил меня.

Вот скриншот ответа:

Response Headers

Итак это подводит меня к вопросу, как это возможно?

Отличается ли ответ Django другого объекта и Nginx ответа? Какова точная структура объекта ответа?

1 Ответ

1 голос
/ 05 февраля 2020

HTTP-заголовки на самом деле не являются объектами. Лучше всего думать о них как о парах ключ-значение и ничего больше. Вполне возможно иметь дублирующиеся заголовки и значения заголовков.

Почему это происходит, просто основано на директивах c (сервере) или коде, которые вы используете для установки заголовков, и где при обработке запроса эти добавления заголовков принимают place.

Если вы добавите заголовок в ваше бэкэнд-приложение (Django, но на самом деле может быть что угодно, например, PHP), тогда используйте add_header для того же заголовка в NGINX, вы будете иметь дубликаты заголовков.

Просто потому, что add_header не просматривает заголовки, полученные от апстрима (вашего приложения), просто слепо добавляет тот, который вы указали в его конфигурации.

Если вы хотите чтобы иметь «установленное» поведение, затем вообще избегать повторяющихся заголовков, затем вы хотите использовать сторонний модуль, заголовки больше

Это даст вам некоторые дополнительные директивы для обеспечения поведения, которое вы ожидайте, например more_set_headers. Однако при небольшом снижении производительности, поскольку set behvaior подразумевает необходимость сначала искать существующие заголовки из серверной части, а затем перезаписывать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...