컬 POST-411 길이 필요


29

PHP로 빌드 한 RestFUL API가 있습니다. 우리가 요청하면 :

curl -u api-key:api-passphrase https://api.domain.com/v1/product -X POST

우리는 돌아온다 :

411 - Length Required

우리가 단순히 -d ""요청에 추가 하면 작동하지만 411 오류는 없습니다. curl 명령에 -d를 추가하지 않아도되는 방법이 있습니까?

우리는 lighttpd 웹 서버를 사용하고 있으며, 411 오류를 반환하는 누가 lighttpd가 PHP가 아니라고 생각합니다.

답변:


47

맞습니다. lighttpd는 'Content-Length'헤더가 0으로 설정되지 않은 빈 메시지 본문이있는 POST 요청을 지원하지 않으며 CURL은 그러한 요청을 보냅니다. 누가 옳은지에 대한 논쟁이 있지만 내 의견으로는 lighttpd가 깨졌습니다. Content-Length 및 Transfer-Encoding이없는 POST는 완벽하게 합법적이며 메시지 본문이 없습니다.

-d ""CURL을 추가 하면 Content-Length: 0헤더 가 전송 되어 문제가 해결됩니다.

lighttp를 수정할 수 있습니다. 411 오류를 발생시키는 코드를 찾아 내용 길이를 0으로 설정하십시오.


훌륭한 설명에 감사드립니다 -d "". -d ""해킹처럼 보입니다.
저스틴

1
해킹입니다. 실제 문제를 해결하려면 lighttpd를 수정해야합니다. -d @/dev/null더 좋아 보인다고 생각하면 대신 사용할 수 있습니다 . 을 사용할 수도 있습니다 -H "Content-Length: 0". (이 두 가지를 모두 테스트하면 작동합니다.)
David Schwartz

알았어 고마워. -d ""최선의 선택 인 것 같습니다.
저스틴
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.