Safari Technology Preview 251 не ставит Content-Type для XHR GET и HEAD. Безопасная локальная диагностика: header matrix «method → send argument → Content-Type present/value → preflight», одна переменная, отрицательный контроль, rollback и минимизированный пакет для поддержки.
Граница пользовательской боли
Запрос «как проверить лишний Content-Type у XHR GET HEAD с URLSearchParams Safari Technology Preview 251» сводится к одной проверяемой боли: bodyless GET или HEAD неожиданно получает Content-Type после send(URLSearchParams), меняя CORS/preflight или серверную маршрутизацию. До опыта фиксируется ожидаемый признак: GET и HEAD не получают Content-Type только из-за URLSearchParams, при этом POST-контроль остаётся различимым. Нельзя расширять вывод на stable Safari, другой движок, произвольный сайт или массовость симптома. Главная ловушка здесь такова: proxy или service worker может добавить заголовок после XHR; прямой local endpoint и bypass worker обязательны. Поэтому наблюдение получает статус reproduced только после повторного одинакового результата и успешного возврата; not reproduced относится исключительно к этому стенду, а unsupported, environment-blocked и unknown остаются разными статусами.
Что подтверждают Release 251 и commit
Официальные Release Notes WebKit от 26 августа 2026 года формулируют изменение так: WebKit исправил XMLHttpRequest.send(), который выставлял Content-Type на GET и HEAD при передаче URLSearchParams. Пункт связан с первичной записью 318424@main. Release page доказывает наличие изменения в ветке Safari Technology Preview 251, а commit задаёт техническую границу конкретной правки. Ни один из этих источников сам по себе не подтверждает частоту запроса, результат на конкретном устройстве или будущий перенос в стабильный выпуск. Публичная ветка о релизе использована только как свежий community lead; комментарии, реакции и поисковые snippets не превращаются в доказательство причины.
Паспорт воспроизведения без лишних данных
Стенд: локальный same-origin echo endpoint, возвращающий только метод и безопасный allowlist заголовков; query и payload не содержат пользовательских данных. До воздействия запишите: XHR method, send argument class, request headers на сервере, response status, preflight count и client readyState sequence. Рабочий артефакт — header matrix «method → send argument → Content-Type present/value → preflight». У каждого ряда должны быть версия TP 251, время, expected, observed и отметка о валидности контроля. Не сохраняются IP, cookie, токены, Authorization, полные URL с приватными query, локальные пути, имена профилей и содержимое рабочих документов. Случайные или вымышленные данные стенда помечаются как тестовые. Если обязательное поле нельзя получить без доступа к реальным данным, эксперимент останавливается: пробел не заполняют догадкой и не компенсируют дополнительной мутацией.
Canary-процедура и отрицательный контроль
Canary меняет ровно одну причину: выполнить по одному GET и HEAD с новым URLSearchParams, затем повторить send(null) и полностью очистить server log. Контроль устроен отдельно: POST с тем же URLSearchParams показывает ожидаемый body-класс, а GET/HEAD с null отделяют сам метод от типа аргумента. Сначала снимается baseline, затем выполняется единственное воздействие, после него — заранее выбранное измерение, затем полный rollback и повтор baseline. Новый шаг не добавляют, пока предыдущий не получил результат и контроль. Если rollback не вернул исходное состояние, прогон invalid, даже когда картинка кажется убедительной. Тест выполняется только локально или на специально подготовленном безопасном стенде; production, пользовательские сессии и чужие страницы в процедуру не входят.
Решение по результату и пакет поддержки
PASS для узкой гипотезы означает: GET и HEAD не получают Content-Type только из-за URLSearchParams, при этом POST-контроль остаётся различимым. Практический результат оформляется как header matrix «method → send argument → Content-Type present/value → preflight». Stop-line: не тестировать на production endpoint и не сохранять Cookie, Authorization, IP или полный набор заголовков; нужен локальный allowlist log. Для передачи разработчику достаточно: client fixture, server allowlist log, четыре клетки матрицы, CORS/preflight counter и ссылка 318424@main. Перед отправкой артефакт ещё раз очищают от идентификаторов и проверяют, что отрицательный контроль действительно отличался только указанной переменной. Материал не обещает исправление на другом сайте, стабильную поддержку функции, индексацию, позиции или универсальное поведение; он даёт воспроизводимый путь, по которому команда может отделить наблюдаемый факт от предположения.
Материал подготовлен редакцией VOne с помощью ИИ; дата, первичный WebKit commit 318424@main, техническая граница, контроль, обратимость, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.
Источники и проверка
- WebKit — Release Notes for Safari Technology Preview 251 проверено 2026-08-29
- WebKit commit 318424@main проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.