의미
If-Match나 If-Unmodified-Since 같은 요청 헤더의 전제 조건이 거짓으로 평가되어 서버가 요청을 적용하지 않았습니다.
흔한 원인
- 다른 사람이 리소스를 업데이트함(ETag 변경)
- If-Match에 오래된 캐시 ETag를 사용함
- 이미 더 새로운 객체가 있는 저장소에 조건부 업로드
해결 방법
클라이언트 또는 방문자라면
리소스를 다시 GET해 현재 ETag를 얻고, 변경 사항을 다시 적용한 뒤 재전송하세요.
사이트나 API 운영자라면
현재 ETag를 반환하고 조건 확인과 쓰기를 원자적으로 처리하세요.
응답 예시
HTTP/1.1
HTTP/1.1 412 Precondition Failed
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "v8"
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Precondition Failed",
"status": 412,
"detail": "If-Match \"v7\" does not match the current version \"v8\"."
} 명세
자주 묻는 질문
› 낙관적 동시성 제어란?
클라이언트가 읽을 때의 ETag를 If-Match로 보내고, 그사이 리소스가 바뀌었다면 서버가 412로 쓰기를 거부하는 방식입니다.
› 412와 428의 차이는?
412: 보낸 전제 조건이 실패함. 428: 전제 조건을 반드시 보내야 함.