423 Locked
사용법
423 Locked 오류는 HTTP 위의 파일 시스템으로 쓰이는 Webdav의 일부입니다. 클라이언트는 파일을 LOCK하거나 UNLOCK할 수 있으며, 잠긴 리소스를 수정하려 시도하면 서버가 이 오류를 반환합니다.
서버가 잠금을 처음 부여할 때 Lock-Token 응답 헤더가 클라이언트에 전송되며, 이후 리소스의 잠금을 해제하거나 잠금을 갱신하는 데 사용할 수 있습니다.
서버는 응답의 일부로 클라이언트를 안내하기 위한 적절한 전제 조건 또는 후행 조건 코드를 포함합니다. 여기에는 lock-token-submitted나 no-conflicting-lock 등이 있습니다.
Webdav 밖에서는 일부 플랫폼이 계정 수준의 잠금을 알리는 데 423을 재사용합니다. Shopify API는 API 호출 한도를 반복적으로 위반하거나 미납 잔액이 있어 상점이 잠긴 경우 423 Locked를 반환합니다. API 접근이 복구되려면 상점 소유자가 Shopify 파트너 대시보드에서 문제를 해결해야 합니다. 이 용법은 파일 잠금과는 무관합니다.
SEO 영향
Google 같은 검색 엔진은 423 Locked 응답 상태를 가진 URL을 색인하지 않습니다. 이전에 색인되었다가 이 상태 코드를 반환하는 URL은 검색 결과에서 제거됩니다.
예시
클라이언트가 대상 폴더에 파일을 업로드하려 시도합니다. 해당 폴더가 잠겨 있으므로 작업이 허용되지 않고 423 Locked 오류가 반환됩니다. 이어지는 요청에서 클라이언트는 If 요청 헤더에 Lock-Token을 포함해 리소스의 잠금 해제를 요청합니다.
그 시점에 폴더에 걸린 잠금이 하나뿐이었기 때문에 요청이 성공합니다. UNLOCK 성공은 지정된 Lock-Token이 가리키는 잠금만 제거되었음을 의미합니다. 다른 잠금은 여전히 유효하며 다시 423 Locked를 반환합니다.
최초 요청
PUT /documents/ HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 10000
<PDF file transferred>
최초 응답
HTTP/1.1 423 Locked
Content-Type: application/xml
Content-Length: 163
<?xml version="1.0" encoding="utf-8" ?>
<d:error xmlns:d="DAV:">
<d:lock-token-submitted>
<d:href>/documents/</d:href>
</d:lock-token-submitted>
</d:error>
잠금 해제 요청을 포함한 두 번째 요청
PUT /documents/ HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 10000
If: (<urn:uuid:123…789>)
<PDF file transferred>
최종 응답
HTTP/1.1 204 No Content
해결 방법
응답 본문에서 전제 조건 코드를 확인하세요. lock-token-submitted 오류는 요청에 필요한 잠금 토큰이 없었다는 뜻입니다. no-conflicting-lock 오류는 다른 잠금이 접근을 막고 있다는 뜻입니다.
잠금이 같은 클라이언트 세션의 것이라면 If 요청 헤더에 Lock-Token 값을 포함해 요청을 다시 보내세요. 서버가 토큰을 검증하고 수정을 허용합니다.
다른 사용자나 프로세스가 잠금을 보유하고 있다면 잠금이 만료되기를 기다리거나 잠금 소유자에게 연락하세요. 잠금 타임아웃은 Webdav 서버에서 설정할 수 있습니다. 잠금이 처음 부여될 때 반환된 Timeout 헤더 값을 확인해 잠금이 얼마나 지속되는지 파악하세요.
SharePoint와 Office Online 환경에서는 데스크톱 애플리케이션이 잠근 파일이 해당 애플리케이션을 닫거나 설정된 타임아웃이 지날 때까지 잠긴 상태로 남습니다. 관리자는 SharePoint 관리 인터페이스를 통해 남아 있는 잠금을 해제합니다.
잠금을 명시적으로 해제하려면 일치하는 Lock-Token과 함께 UNLOCK 요청을 보내세요. 잠금 해제가 성공하면 지정한 잠금만 제거됩니다. 같은 리소스의 다른 잠금은 그대로 유효하며 계속 이 오류를 유발합니다.
서버 측에서는 버려진 잠금이 다른 클라이언트를 무기한 막지 않도록 합리적인 잠금 타임아웃을 설정하세요. WebDAV 명세는 서버가 무한 잠금을 부여하기보다 타임아웃 한도를 적용할 것을 권장합니다.
Shopify API 사용자의 경우 423은 상점 자체가 잠겼다는 뜻입니다. 파트너 대시보드에서 미납 잔액을 해결하거나 Shopify 지원에 연락해 API 접근을 복구하세요.
코드 참고
.NET
HttpStatusCode.Locked
Rust
http::StatusCode::LOCKED
Rails
:locked
Go
http.StatusLocked
Symfony
Response::HTTP_LOCKED
Python3.5+
http.HTTPStatus.LOCKED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_LOCKED
Angular
@angular/common/http/HttpStatusCode.Locked