[http] 본문을 포함하려면 HTTP PUT 요청이 필요합니까?

표준에서 이것에 대한 명확한 사양을 찾는 데 어려움이 있습니다. Content-Length: 0본문을 지정하지 않은 PUT 요청을 수행 할 때 헤더를 포함하지 않는 HTTP 클라이언트 와 이러한 요청에 의해 혼란스러워지는 서버가 있는데 어떤 프로그램을 비난해야할지 궁금합니다.



답변

HTTP 요청에 Content-Length 또는 Transfer-Encoding 헤더가있는 경우 본문이 있습니다 ( RFC 2616 4.3 ). 요청에 본문이없는 경우에는 본문이 없으므로 서버에서이를 처리해야합니다.

즉, PUT 요청에 본문이없는 것은 드문 경우이므로 실제로 빈 본문을 보내려는 클라이언트를 디자인하는 경우 Content-Length : 0을 전달합니다. 실제로 POST 읽기에 따라 및 PUT 방법 정의 ( RFC 2616 9.5, 9.6 ) 본문이 필요함을 암시한다고 주장 할 수 있지만 본문을 처리하지 않는 합리적인 방법은 길이가 0 인 본문을 가정하는 것입니다.


답변

질문에 대답하지 않고 jaxrs가 어떻게 신체없는 PUT를 자주 사용할 수 있는지 주장합니다.

bodyless put의 예 : 사용자에게 추가 권한을 부여합니다.

PUT / admin / users / {사용자 이름} / permission / {permission}


답변

본문이없는 경우 내용 길이는 0이어야하지만 IETF 표준에서는 본문이 필요하지 않습니다. 수행중인 작업에 적합한 방법을 사용하십시오. 코드에 넣으면

int x;
int f(){ return x; }

라는 원격 변수가 r있습니다.

게시물은 다음과 같습니다.

r=f();

풋은 다음과 같습니다.

r=x;

get은 다음과 같습니다.

x=r;


답변

콘텐츠가없는 경우 서버에 PUT (동사 의미로)되는 것은 무엇입니까? 사양은 “동봉 된 엔터티”같은 내용을 의미하지만, 내용이없는 요청에 따라서 서버에 넣어 아무것도없는 밀폐 된 실체가없는, 그리고 것입니다.

물론 서버에 아무것도 넣지 않으려면 대신 DELETE를 원할 것입니다.


답변

HTTP / 1.1 표준 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13 의 다음 섹션에 따라 콘텐츠 길이 필드가 필요합니다 .


답변