• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

Location 헤더와 Content-Location

21.02.25 22:16 작성 조회수 1.53k

2

안녕하세요. 강사님.

해당 HTTP 수업과 강사님의 스프링, JPA 수업들을 들었던 상태로 드디어 직접 게시판 REST API 프로젝트를 진행하기 위해 API 명세를 작성해 보면서 검색하던중에 한가지 의문이 생겼습니다.

강사님께선 POST 요청에 대한 201 Created 응답을 할 때, Location 헤더에 생성된 자원의 주소를 포함해서 응답하는걸로 알려주셨는데, 구글링해서 본 글 중 아래와 같은 글을 보았습니다.

"따라서 요청의 응답 헤더에 새로 생성된 리소스를 식별할 수 있는 Content-Location 속성을 이용한다.

출처: https://sanghaklee.tistory.com/57 [이상학의 개발블로그]"

강의 내용과 달라서 구글에 영문으로 검색해 보았는데, 영어로봐도 모르겠고 한글로 번역해서 봐도 이해가 잘 안가서 질문드립니다.
구글링 결과로 Content-Location 헤더는 반환된 데이터에 대한 대체 위치를 가르킨다고 하고,
Location 헤더는 리다이렉션의 대상을 가르킨다고 하고 있습니다...

같은말을 다르게 설명하는느낌입니다. 그런데 Location과 Content-Location은 다르다고합니다.
만약 유저 정보를 POST 요청으로 등록한다고 하면 반환된 데이터는 서버에 저장된 데이터이고, 이것에 대한 위치라는 말과 리다이렉션 대상이라는 말은 같은말 아닌가요?ㅜㅜ

Content-Location 헤더는 강의 내용에도 있는 콘텐츠 협상시에 쓰인다는 말이 나오는 것 같은데, 그러면 블로그의 정보가 틀린건가요???

아래는 영어 원문과 번역된 내용입니다... 감이 안잡히네요
The Content-Location header indicates an alternate location for the returned data. The principal use is to indicate the URL of a resource transmitted as the result of content negotiation.

Location and Content-Location are different. Location indicates the URL of a redirect, while Content-Location indicates the direct URL to use to access the resource, without further content negotiation in the future. Location is a header associated with the response, while Content-Location is associated with the data returned. This distinction may seem abstract without examples.

=======================================================

Content-Location헤더는 반환 된 데이터의 대체 위치를 나타냅니다. 주요 용도는 콘텐츠 협상 의 결과로 전송되는 리소스의 URL을 나타내는 것 입니다.

Location그리고 Content-Location다릅니다. Location리디렉션의 URL을 Content-Location나타내고 향후 콘텐츠 협상없이 리소스에 액세스하는 데 사용할 직접 URL을 나타냅니다. Location응답과 연관된 헤더이고 Content-Location리턴 된 데이터와 연관됩니다. 이러한 구분은  없이 추상적으로 보일 수 있습니다 .

추가적으로, GET /users 같은 컬렉션이 반환되는 경우, 정상적으로 처리가 되었지만 데이터가 아무것도 없는 경우엔 200응답으로 빈 내용을 응답할지, 404에러로 응답할지 구글링 해보면 관점에따라 의견이 갈리던데, 강사님께서는 이러한 경우에 200을 사용하시는지 404를 사용하시는지 궁금합니다.

답변 1

답변을 작성해보세요.

2

안녕하세요. 우럭아왜우럭님

다음과 같이 이해하시면 됩니다.

Content-Location은 이미 콘텐츠 협상이 다 끝난 이후의 리소스 위치

예시)

/hello로 요청을 하고 콘텐츠 협상을 시도한다.

콘텐츠 협상의 결과가 html이라면 html을 받을 수 있는 실제 경로를 반환한다.

Content-Location: /hello.html

콘텐츠 협상의 결과가 xml이라면 xml을 받을 수 있는 실제 경로를 반환한다.

Content-Location: /hello.xml

Location 콘텐츠 협상과 무관하게 리소스 위치를 지정합니다. 따라서 해당 URL을 호출할 때 콘텐츠 협상을 할 수 있습니다.

Location: /hello

감사합니다.

감사합니다!