2008-10-02 4 views
3

POST 요청 (SOAP 서버)에 대한 응답으로 큰 본문을 반환하는 HTTP 서버가 있습니다. 이 몸체는 청크를 통해 "스트리밍"됩니다. 응답을 스트리밍하는 도중 오류가 발생하면 클라이언트에 오류를보고하고 연결을 계속 열어 둘 수 있습니까? 이 구현은 독점적 인 HTTP/SOAP 스택을 사용하므로 HTTP 프로토콜 수준의 응답에 관심이 있습니다.연결을 닫지 않고 청크라 진 ​​http repsonse를 통해 오류를보고하는 방법은 무엇입니까?

+0

마크, 내 원래의 게시물에 대한 업데이트를했다. 하지만 이미 답을 표시 했으므로 알 수 있는지 여부는 알 수 없습니다. 이 댓글은 귀하의 계정의 응답 탭에 표시되어 귀하의 관심을 끌기위한 것입니다 ... – Alexander

답변

2

서버가 상태 줄 (응답의 첫 번째 줄)을 클라이언트에 보내면 응답의 상태 코드를 더 이상 변경할 수 없습니다. 많은 서버는 버퍼가 가득 찰 때까지 내부적으로 버퍼링하여 응답을 보내는 것을 지연합니다. 버퍼가 채워지는 동안에도 응답에 대해 마음이 바뀔 수 있습니다.

클라이언트가 응답 헤더에 액세스 할 수있는 경우 청크 인코딩을 사용하면 서버가 청크 인코딩 된 본문 뒤에 헤더가있는 예고편을 추가 할 수 있습니다. 따라서 서버에서 오류가 발생하면 정상적으로 본문 전송을 중단 한 다음 일부 헤더를 일부 값으로 설정하는 예고편을 보낼 수 있습니다. 그러면 클라이언트는이 헤더의 존재를 오류가 발생했다는 신호로 해석합니다.

+0

"대체"상태 전달을 협상하기위한 협약이 있었으면합니다. 예 : 최종 0 크기 청크의 확장 (0 이후, \ r \ n \ r \ n 이전)으로 밀어 넣습니다. –

+0

예,이 아이디어는 나에게도 발생했습니다 (하지만 원래 게시물 직후). 내가 추가 한 두 번째 단락을보십시오. – Alexander

0

response.iscommitted()가 false를 반환하는 한 상태 코드를 변경할 수 있습니다. (자바에서는 HttpServletResponse이 (가) 있습니다. 다른 언어로도 해당되는 것이 틀림 없음)

2

청크 분할 응답에는 HTTP 헤더와 마찬가지로 "footers"이 포함될 수 있습니다. 실패하면 같은 바닥 글을 보낼 수 있습니다

X-RealStatus: 500 Some bad stuff happened

또는 당신은 성공할 경우 :

X-RealStatus: 200 OK
관련 문제