nginx 411 Content-Length 필수 오류를 피하는 방법이 있습니까?


11

콘텐츠 길이를 지정하지 않고 PUT을 수행하려고 할 때 nginx에서 411 상태를 다시 얻습니다. 이것을 막을 방법이 있습니까?

nginx 

답변:


10

이것을 쿼리에 추가하려고 시도 할 수 있습니다.

curl -i -X ​​PUT -H '콘텐츠 길이 : 0' ' http://www.example.com/test '

HttpChunkinModule 을 설치 하거나 Nginx를 1.3.9 이상으로 업데이트 하십시오

이 모듈은 Nginx 1.3.9 이상에 더 이상 필요하지 않습니다. 왜냐하면 1.3.9부터 Nginx 코어는 이미 청크 된 요청 본문을 기본적으로 지원하기 때문입니다.


5

PUT 요청에는 Content-Length가 필요합니다. Nginx가 아니라 HTTP 가이 요구 사항을 만듭니다. POST 요청과 마찬가지로 PUT 요청에는 반드시 내용 본문이 있습니다. 그 몸은 길이가 0이 될 수 있지만, 그렇다면 몸을 분명히 말해야합니다. 분명히 연결이 닫히기 전에 서버가 요청에 응답 할 수 있어야하기 때문에 연결이 닫힐 때까지 내용이 계속된다고 가정 할 수는 없습니다 (콘텐츠 길이 헤더가없는 것임).


3
이것은 올바르지 않습니다. w3.org/Protocols/rfc2616/rfc2616-sec4.html "요청에 메시지 본문이 존재한다는 것은 요청의 메시지 헤더에 Content-Length 또는 Transfer-Encoding 헤더 필드가 포함되어 있음을 나타냅니다." 이것은 최신 버전에서 수정 된 nginx의 버그입니다. 이 버그는 PUT 이전의 POST에서 수정되었습니다.
Nick Palmer

2

오래된 질문이지만 웹 검색 에서이 문제가 발생했기 때문에 :

NginX 1.3.9 이상은 POST 및 PUT에 대해 "전송 인코딩 : 청크 분할"을 지원합니다.

청크 전송을 사용하면 내용 길이를 먼저 설정하지 않고 파일을 보낼 수 있습니다.


그렇습니다. 고마워!
rogerdpack '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.