HTTP 위치 헤더가 POST 요청/201(생성됨) 응답에만 설정되는 이유는 무엇입니까?
문제
잠시 3xx 응답을 무시하고 HTTP 위치 헤더가 POST 요청/201(생성됨) 응답과 함께만 사용되는 이유가 궁금합니다.
로부터 RFC 2616 사양:
201(Created) 응답의 경우 위치는 요청에 의해 생성된 새 리소스의 위치입니다.
이는 널리 지원되는 동작이지만 다른 HTTP 메서드와 함께 사용하면 안 되는 이유는 무엇입니까?가져 가라. JSON API 사양 예로서:
JSON 페이로드 내부의 현재 리소스에 대한 자체 참조 링크를 정의합니다(RESTful API에서는 드문 일이 아닙니다.).이 링크는 모든 페이로드에 포함되어 있습니다.사양에 따르면 해야 하다 POST를 통해 새 문서를 생성하고 값이 페이로드의 자체 참조 링크와 동일한 경우 HTTP 위치 헤더를 포함합니다. 오직 POST에 필요합니다.왜 귀찮게 관습 HTTP 위치 헤더만 사용할 수 있다면 자체 참조 링크 형식을 사용하시겠습니까?
메모:이는 JSON API에만 국한되지 않습니다.그것은 동일하다 할, JSON 하이퍼스키마 또는 다른 표준.
노트 2:이는 HTTP 링크 헤더와 동일하므로 HTTP 위치 헤더에만 국한되지 않습니다.JSON API에서 볼 수 있듯이 HAL 및 JSON 하이퍼 스키마는 자체 참조 링크에 대한 규칙을 정의할 뿐만 아니라 관련 리소스 또는 리소스에 대해 가능한 작업에 대한 정보를 표현합니다.그러나 그들은 모두 HTTP 링크 헤더를 사용할 수 있는 것 같습니다.(HTTP 위치 헤더를 사용하지 않으려는 경우 자체 참조 링크를 HTTP 링크 헤더에 넣을 수도 있습니다.)
나는 호언장담하고 싶지 않습니다. 그것은 일종의 "바퀴 재발명"인 것 같습니다.또한 매우 제한적인 것 같습니다.HTTP 위치/링크 헤더만 사용한다면 HTTP 승인 헤더에서 JSON, XML 또는 무엇이든 요청해도 문제가 되지 않으며 HEAD 요청에서 리소스에 대한 유용한 메타 정보를 얻을 수 있습니다. JSON API, HAL 또는 JSON 하이퍼 스키마를 사용하는 경우 링크를 포함합니다.
해결책
의미론 Location
헤더는 자체 참조 링크가 아니라 사용자 에이전트가 요청을 완료하기 위해 따라야 하는 링크입니다.이는 리디렉션에서 의미가 있으며 새 위치에 있을 새 리소스를 생성할 때 이동해야 합니다.요청이 이미 완료되었다면, 즉 원하는 리소스가 이미 완전히 표현되어 있다는 뜻이므로, Location
.
그만큼 Link
헤더는 의미상 하이퍼텍스트 링크와 동일한 것으로 간주될 수 있지만 미디어 유형이 하이퍼미디어를 인식하지 않는 경우 지정된 리소스와 관련된 메타데이터를 참조하는 데 사용해야 하므로 관련 리소스에 대한 링크 기능을 대체하지 않습니다. RESTful API.
리소스 표현에서 사용자 정의 링크 형식에 대한 필요성은 기본 구현 및 프로토콜에서 리소스를 분리해야 하는 필요성에 내재되어 있습니다.REST는 HTTP와 결합되지 않으며 유효한 URI 체계가 있는 모든 프로토콜을 사용할 수 있습니다.이용하기로 결정하셨다면 Link
모든 링크의 헤더를 HTTP에 연결합니다.
클라이언트가 따라갈 수 있는 FTP 링크를 제공한다고 가정해 보겠습니다.어디가 될까요? Link
그렇다면?
다른 팁
위치 헤더의 의미는 상태 코드에 따라 다릅니다. 201이지만 새로 생성 된 리소스에 링크하지만 3xx 요청에서는 여러 번 (익숙하지 않지만) 의미를 가질 수 있습니다. 나는 그것이 그것이 일반적으로 다른 용도로 피할 수있는 이유라고 생각한다.
대안은 항상 일관된 의미를 갖는 콘텐츠 위치 헤더입니다. 그것은 고객에게 요청한 자원을 정리 URL에 알려줍니다. 그것은 순전히 유익합니다 (클라이언트가 처리 할 것으로 예상되는 위치와는 대조적으로).
그래서, 콘텐츠 위치 헤더가 자체 참조 링크와 유사한 것 같습니다. 그러나 콘텐츠 위치에는 정의 없음 풋과 게시물에 대한 행동 . 그것은 또한 거의 사용되지 않는 것 같습니다.
이 블로그 게시물 위치 VS 콘텐츠 - 위치 좋은 비교입니다. 다음은 견적이 있습니다 :
마지막으로, 어느 헤더도 범용 링크를위한 것이 아닙니다.
조합으로, 신체의 표준화 된 자기 링크가 요구되는 것처럼 보입니다. 그것은 클라이언트 측에 많은 혼란을 피합니다.