2012-11-06 2 views
1

tl; dr : DotCloud에서 실행되는 nginx의 "411 Length Required"오류를 해결하려면 어떻게해야합니까?CORS on DotCloud, 411 Length required

DotCloud 플랫폼에서 Python 서비스로 배포 된 CORS 지원 API가 있습니다. 내 자바 스크립트 클라이언트가 액세스하려고하면 브라우저가 OPTIONS 요청으로 시작하지만 411으로 돌아옵니다.

DotCloud의 nginx는 비어있는 본문이있는 HTTP 요청을 좋아하지 않습니다. ": 0 콘텐츠 길이를"헤더를, 또는 chunkin 모듈을 사용하려고 노력하지만, 나도 할 수 없습니다 : 내가 추가 할 제안을 본 적이 나는 브라우저의 옵션 요청에 대한 추가 HTTP 요청 헤더를 제어하지 않는

  • DotCloud에 타사 nginx 모듈을 설치할 수 있다고 생각하지 않습니다. 비록 내가 할 수있다하더라도 요청에 "Transfer-encoding : chunked"헤더가 없어 도움이되지 않을 수도 있습니다.

이 문제를 해결하는 방법은 무엇입니까?

업데이트 : nginx.conf에 다음 퍼팅은

내 즉각적인 문제를 해결합니다. chunkin과 마찬가지로 411 오류를 트랩하고 요청 방법이 OPTIONS 인 경우 미리 준비된 응답을 반환합니다. 그것을 가로 질러왔다 in this repo. 내가 파이썬 코드가 아닙니다 nginx를 구성에서 이러한 응답을 처리하고 싶은대로

error_page 411 = @cors; 
location @cors { 
    if ($request_method = OPTIONS) { 
    add_header Access-Control-Allow-Origin *; 
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; 
    add_header Access-Control-Allow-Headers 'Content-Type, Authorization, ...'; 
    add_header Access-Control-Max-Age '1800'; 
    add_header Content-Length 0; 
    add_header Content-Type text/plain; 
    return 200; 
    } 
    return 411; 
} 

그것은 이상적인 아니에요. DELETE 및 HEAD 요청으로 문제가 발생할 것으로 예상됩니다. 요청 본문이 없습니다.

+0

:
다음은 이러한 구성에 대한 dotcloud.yml의 예입니다. 그것은 단순히 411 오류를 처리하고 필요한 것입니다. –

+0

불행히도 chunkin은 dotcloud에서 사용할 수 없습니다. –

+1

본 적이 있습니까? https://github.com/dotcloud/nginx-on-dotcloud –

답변

0

이 문제를 해결할 수있는 또 다른 방법은 nginx를 사용하지 않고 대신 gunicorn을 사용하는 것입니다. 난 당신이 chunkin에 시도를 제공해야한다고 생각

www: 
    type: python-worker 
    config: 
     python_version: v2.7 
    processes: 
     api: gunicorn -b 0.0.0.0:$PORT_WWW -w 8 wsgi:app 
    ports: 
     www: http