2011-08-17 6 views
4

Java의 dev_appserver과 실시간 App Engine 서버간에 불일치가 발견되었습니다.App Engine HTTP 상태 코드 메시지

Status Code:400 Please log in to comment 

문제 : 나는 페이지에 액세스 할 때

return response.sendError(response.SC_BAD_REQUEST, "Please log in to comment"); 

내가 돌아 헤더의 상태 코드 메시지를 얻을 : 내 로컬 개발 서버에서

나는 반환하는 서블릿을 이를 App Engine에 배포하면됩니다. 같은 서블릿 것을 액세스 할 때 나는 대신에 "코멘트를 로그인하십시오"이 "잘못된 요청"을 얻을 :

Status Code:400 Bad Request 

는에서와 같이 Please log in to comment 상태 코드 메시지 헤더의 콘텐츠 HTML에 나타납니다,하지만 개발 환경.

왜 이런가요?

편집은

여기 dev_appserver과 생산 모두에 대한 curl -vvvv 흔적입니다 :

dev_appserver 컬 추적 :

> POST /add-comment HTTP/1.1 
> User-Agent: Mozilla/4.0 
> Host: localhost:8080 
> Accept: */* 
> Content-Length: 9 
> Content-Type: application/x-www-form-urlencoded 
>   
< HTTP/1.1 400 Please log in to comment 
< Content-Type: text/html; charset=iso-8859-1 
< Cache-Control: must-revalidate,no-cache,no-store 
< Content-Length: 1406 
< Server: Jetty(6.1.x) 

생산 컬 추적 :

> POST /add-comment HTTP/1.1 
> User-Agent: Mozilla/4.0 
> Host: www.xxx.org 
> Accept: */* 
> Content-Length: 9 
> Content-Type: application/x-www-form-urlencoded 
> 
< HTTP/1.1 400 Bad Request 
< Content-Type: text/html; charset=utf-8 
< Vary: Accept-Encoding 
< Date: Thu, 18 Aug 2011 14:04:26 GMT 
< Server: Google Frontend 
< Cache-Control: private 
< Transfer-Encoding: chunked 
+1

devappserver와 production이라는 두 호출에 curl -vvvv trace를 추가 할 수 있습니까? – proppy

+0

@proppy : edited –

답변

3

나는 것들 ay 시스템은 올바른 구현입니다. sendError()에 대한 javadocs는 다음과 같이 말합니다.

지정된 상태를 사용하여 클라이언트에 오류 응답을 보냅니다. 수정되지 않은 쿠키 및 기타 헤더를 떠나, "text/html과"에 콘텐츠 형식을 설정 지정된 메시지, 을 포함하는 HTML 형식의 서버 에러 페이지처럼 보이도록 응답을 만드는 서버 기본값. 전달 된 상태 코드에 해당하는 웹 응용 프로그램에 대해 오류 페이지 선언을 한 경우 제안 된 msg 매개 변수보다 우선적으로 이 다시 서비스됩니다.

응답이 이미 커밋 된 경우이 메서드는 IllegalStateException을 발생시킵니다. 이 방법을 사용한 후에 응답은 이 커밋 된 것으로 간주되므로 쓰지 않아야합니다.

일부를 강조 표시했습니다. 이것은 가능한 경우 메시지가있는 html 페이지 만 반환한다고 말합니다. 그것은 특별히 sendError 문제가 아닙니다

+0

흥미 롭습니다. 네 말이 맞아 보인다. 상태 코드 메시지에 대해서는 아무 것도 말하지 않습니다. Jetty (dev_appserver)는이를 HTTP 상태 메시지로 표시하고있는 것처럼 보이지만 다른 메시지는 표시되지 않을 수 있습니다. App Engine 환경에서 강제로 수행 할 수있는 방법이 있는지 궁금합니다. 헤더에 자신의 Status 메시지를 설정하는 것이 사람들이 할 수 있어야한다고 생각합니다. –

1

(나는 개인적으로 :(뿐만 아니라 어디서든 보지 못했다한다)는 HTTP 상태 코드에서 사용하는 말을하지 않습니다. setStatus 방법은 같은 방식으로 작동합니다. 정상적인 자바에서는 sendErrorsetStatus이 상태 설명을 설정합니다. 문제는 프로덕션 App Engine 서버는 상태 코드를 항상 각 코드의 표준 설명으로 설정한다는 것입니다.