Ответ
HTTP 412 Precondition Failed означает, что сервер не выполнил одно или несколько условий, указанных клиентом в условных заголовках запроса.
Применение: Используется для оптимистичной блокировки и предотвращения конфликтов при обновлении ресурсов (например, по механизму ETag).
Пример:
- Клиент получает ресурс, и в ответе приходит заголовок
ETag: "abc123". -
Для его обновления клиент отправляет запрос:
PUT /api/resource/1 HTTP/1.1 If-Match: "abc123" Content-Type: application/json {"data": "new value"} - Если за это время другой клиент уже изменил ресурс и его
ETagстал"def456", сервер вернет:HTTP/1.1 412 Precondition Failed
Распространенные условные заголовки: If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since.
Ответ 18+ 🔞
А, слушай, вот эта штука — 412-й статус! Это ж классика, когда ты пытаешься быть умным, а сервер тебе такой: «Нет, мудила, не срослось».
По-русски: Сервер посмотрел на твои условия в заголовках и сказал: «Хуй тебе, а не выполнение». Типа, ты поставил какие-то рамки, а они не сошлись.
Где это вылазит, как говно из проруби? Ну, например, когда ты пытаешься по-хитрому избежать конфликтов. Смотри, как это обычно бывает:
- Ты запрашиваешь какой-нибудь файл или запись. Сервер, такой довольный, отдаёт её и прицепляет
ETag— этакую цифровую печать, хуле. Допустим,"abc123". -
Ты думаешь: «Ща я эту хуйню обновлю!». И шлёшь запрос на изменение, но с условием: «Измени только если печать всё ещё
"abc123", я ж не мудак, чтобы поверх чужого писать».PUT /api/resource/1 HTTP/1.1 If-Match: "abc123" Content-Type: application/json {"data": "new value"} - А за то время, пока ты чесал жопу, какой-то другой хитрожопый клиент уже успел всё изменить. Теперь у ресурса печать
"def456". - Сервер смотрит на твой заголовок
If-Match: "abc123", смотрит на актуальную печать"def456", и его ответ — просто шедевр лаконичности:HTTP/1.1 412 Precondition FailedПеревод: «Условие не выполнилось, иди на хуй. Ресурс-то уже другой, ебать!»
Какие ещё бывают предлоги для такого пиздеца? Да почти любые условные заголовки: If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since. Короче, любая твоя попытка поставить серверу рамки может обернуться этим самым «Precondition Failed». Ёпта, жизнь-то сложная.