HTTP

HTTP 응답 Location과 Content-Location의 차이

wonhy2ok 2023. 8. 25. 02:15

 

1. Location

요청 메시지

POST /boards
{title:"제목", content:"게시글"}

응답 메시지

HTTP/1.1 201 Created
Location: /boards/a123 	/* a123은 서버가 리소스를 생성한 고유 번호 */

보통 301, 302, 307, 308 등 리다이렉션 상태 코드와 함께 사용되는 응답 속성으로서 서버가 클라이언트에게 리소스의 위치를 알려주는 역할로 사용됩니다.(예시로 "/boards/a123" 과 같이 a123 게시물을 보는 페이지로 이동하도록 구현)

 

201 Created(201 코드는 리다이렉트 하지 않음)로 사용되는 경우도 있으며, 예시로 새로운 게시물을 작성한 후 POST 요청을 통해 서버에게 리소스 생성 요청을 보낸 뒤 작업이 성공적으로 수행됨을 클라이언트에게 알려주기 위해서 사용합니다.

새로운 리소스가 생성되었음에도 클라이언트가 신규 리소스의 정보를 받지 못한다면 리소스의 위치나 추가적인 요청들을 못해 혼란스러운 상황이 발생할 수 있습니다.

 

2.Content-Location

요청 메시지

GET /image-resource-123.jpg HTTP/1.1

응답 메시지

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 12345
Content-Location: https://abc.com/image-resource-123.jpg

실제 경로인 원본 리소스의 위치를 나타내며, 콘텐츠 협상이 끝난 상태의 리소스 위치를 나타냅니다. 응답의 결과로 확장자(.png, .html 등)와 붙어서 함께 나오는 형식입니다. 응답 속성 중 content-type과 같이 전달됩니다.

 

콘텐츠 협상이란?

HTTP에서 콘텐츠 협상(Content negotiation)이란 동일한 URI에서 리소스의 서로 다른 버전을 제공하기 위해 사용하는 메커니즘. 사용자에게 제일 잘 맞는 것이 무엇인지(예를 들어, 문서의 언어, 이미지 포맷 혹은 컨텐츠 인코딩에 있어 어떤 것이 적절한지)를 명시(MDN 콘텐츠 협상)

 

 

내가 이해한 방법

콘텐츠 협상을 기준으로 Location은 응답결과를 통해서 클라이언트가 리다이렉트, 리소스 생성 확인 등을 통해 선택적으로 다음 프로세스를 정의(협상 가능한 상태)할 수 있지만, Content-Location은 URI 자체로서만 유의미한 자료(협상이 끝난 상태)로 이해했습니다.