Порядок заголовков при передаче GET, POST запросов в Firefox 122.0.1
Поскольку я являюсь разработчиком библиотеки для парсинга сайтов CurlPro, при доработке библиотеке для работы с brotly мне потребовалось дописать возможность осуществлять запросы с использованием функции file_get_contents(ранее для целей запросов применялся только curl, в котором видимо нет возможности декомпрессии по алгоритму brotly). Для того чтобы соединения с Web-сервером с стороны библиотеки выглядели похожими на Firefox было решено проанализировать последовательность и содержание заголовков которые отправляет браузер Firefox 122.0.1(именно эта версия была актуальной на момент тестирования) при передаче GET и POST запросов, в том числе при установке атрибута тега формы enctype равным "multipart/form-data"
Тестирование производилось с использованием PHP-скрипта который выводит форму, а так же отображает массив заголовков переданных клиентом серверу(испытания показали что порядок их соответствует реально отправляемому порядку заголовков), а так же в настойках virtualhost для домена на котором производилось тестирование было установлено значение параметра enable_post_data_reading в Off, для того чтобы PHP не производил парсинг POST-данных и они всегда были доступны для получения используя функцию file_get_contents("php://input"). Эта информация так же описана в следующем видео:
Ниже приведено содержание PHP-скрипта с использованием которого производилось тестирование:
Передаваемая браузером информация при GET запросе
В результате тестирования установлено, что в браузере Firefox версии 122.0.1 повторный запрос(то есть после обновления страницы по нажатию клавиши F5) не приводит к изменению последовательности заголовков как реально переданных web-серверу, так и выведенных в инспекторе браузера Firefox.
Заголовки и их последовательность полученные web-сервером
Заголовки и их последовательность полученные web-сервером после нажатия F5
Заголовки и их последовательность в инспекторе Firefox
Передаваемая браузером информация при POST запросе без указания атрибута формы enctype
Полученная web-сервером строка с POST-данными функцией file_get_contents("php://input")
В случаи когда форма содержала одно input поле с именем "a", а в качестве значения этого поля передавалась последовательность "abcde"(без кавычек) var_dump(file_get_contents("php://input")) вернул следующий результат: string(7) "a=abcde".
Заголовки и их последовательность полученные web-сервером
Заголовки и их последовательность полученные web-сервером после нажатия F5
В результате тестирования было замечено, что в браузере Firefox версии 122.0.1 при повторной отправке формы методом POST(то-есть например по нажатию кнопки F5) заголовок Referer передаётся в другой последовательности, так при исходном запросе он передаётся после заголовка Connection, а при повторной отправке по F5 - заголовок Referer передаётся после заголовка Accept-Encoding. Порядок прочих заголовков, как и их содержание не изменяется.
Заголовки и их последовательность в инспекторе Firefox
Передаваемая браузером информация при POST запросе с указанием атрибута формы enctype равным "multipart/form-data"
Полученная web-сервером строка с POST-данными функцией file_get_contents("php://input")
Полученная web-сервером строка с POST-данными функцией file_get_contents("php://input")
Заголовки и их последовательность в инспекторе Firefox
При повторной передаче запроса, например по нажатию кнопки F5 на web-сервер передаются заголовки с аналогичным содержанием, при этом последовательности заголовка Referer изменится, а именно он будет передан после заголовка Accept-Encoding, а не после Connection как в случаи исходного заппроса. Последовательность заголовков и их содержание в инспекторе Firefox не изменится.