Apache + Rails가 코드 500에 대해 두 개의 상태 헤더를 뱉어내는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/161631

문제

한 가지를 제외하고는 잘 작동하는 Rails 앱이 있습니다.

존재하지 않는 것을 요청할 때 (예 : /not_a_controller_or_file.txt) 및 Rails는 "경로 일치하지 않습니다 ..."예외, 응답은 이것 (빈 줄 의도적)입니다.

HTTP/1.1 200 OK
Date: Thu, 02 Oct 2008 10:28:02 GMT
Content-Type: text/html
Content-Length: 122
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive

Status: 500 Internal Server Error
Content-Type: text/html

<html><body><h1>500 Internal Server Error</h1></body></html>

ExceptionLogger 플러그인을 사용하여 /공급 업체가 있지만 문제는 아닙니다. 공개적으로 Custom 500.html 이외의 오류 처리를 추가하지 않았으며 (응답에는 해당 HTML이 포함되어 있지 않지만) HTML의 비트가 어디에서 왔는지 전혀 모릅니다.

그래서 어딘가에 추가하고 있습니다 HTTP/1.1 200 상태 코드가 너무 일찍 또는 상태 : 500 너무 늦었 어. Webrick을 사용할 때 적절한 HTTP/1.1 500 헤더 (상단)를 얻기 때문에 Apache라고 생각합니다.

내 생산 스택은 다음과 같습니다. Apache 2 Mongrel (5 인스턴스) Rubyonrails 2.1.1 (1.2 및 2.1.1에서 발생)


언급하는 것을 잊었습니다. 오류는 "경로 일치 없음 ..."예외로 인해 발생합니다.

도움이 되었습니까?

해결책

이것은 상당히 오래된 스레드이지만 가치가있는 것에 대해 문제와 솔루션에 대한 자세한 설명이 포함 된 훌륭한 리소스를 찾았습니다. 분명히이 버그는 Mongrel과 함께 사용될 때 Rails <2.3에 영향을 미칩니다.

다른 팁

이 HTML 파일은 레일에서 나옵니다. 어떤 종류의 오류가 발생합니다 (아마도 어떤 종류의 종류 또는 다른 반복 할 수없는 오류).

상태 : 헤더와 실제 헤더 사이의 여분의 빈 선이 오타가 아니라 존재하는 경우 Apache가 200 개의 OK 메시지를보고하는 이유를 설명하는 데 먼 길을 갈 것입니다.

상태 헤더는 Rails, PHP 또는 Apache에게 "오류가 있으면 200 OK 대신이 코드를 반환하십시오"라고 말하는 방법입니다. 빈 줄이 있다는 사실은 여분의 일이 진행되고 있으며 루비가 어떤 이유로 든 오류 출력 전에 빈 줄을 출력한다는 것을 의미합니다. 스크립트의 이전 출력 일 수도 있습니다. 그러나 길고 짧은 것은 여분의 빈 줄은 Apache가 "오, 빈 줄, 여분의 헤더가없고, 지금은 모든 내용입니다."라고 생각한다는 것을 의미합니다.

빈 줄이 왜 필요한지에 대한 내 추측은 이전 스크립트 출력, 아마도 전체 스크립트 페이지의 끝에서 끝나는 줄 일 것입니다. 500 오류가 발생하는 이유에 대해서는 여기에 정보가 충분하지 않습니다. 파일 I/O 오류 일 수 있습니다.

편집하다: Dave가 내부에 대해 제공 한 추가 정보를 감안할 때, 이것이 실제로 무대 뒤에서 진행되는 프록시와 관련된 문제라고 말하고 싶습니다. 나는 이미 말한 것 이상의 것을 넘어서도 정확히 말할 수 없었습니다.

이것은 레일 자체에서 나옵니다.

http://github.com/rails/rails/tree/master/masce/lib/action_controller/dispatcher.rb#l60

디스패처는 상태 코드가 200 (성공) 인 오류 페이지를 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top