2008-09-26 2 views
7

자바로 웹 서버를 만들고 HTTP 1.1 연결 유지 연결을 지원하고 싶습니다. 그러나 클라이언트가 주어진 연결에 대한 요청을 전송 한 시점을 어떻게 알 수 있습니까? (이중 줄 끝 또는 뭔가 같은).HTTP 1.1 연결 유지 연결을 닫을 시점을 어떻게 알 수 있습니까?

stackoverflow가이 매우 모호한 질문 - Google의 기술 사양 및 모호한 언어에 대한 답변에 어떻게 대처할 수 있는지 살펴 보겠습니다. 나는 C 프로그래머가 아닌 사람에게 평이한 영어 답을 원한다. :)


나는 본다. SocketTimeoutException에 의존해야한다는 내 의혹을 확인합니다. 하지만 클라이언트에서 의존 할 수있는 것이 있다면 연결이 완료되었다는 것을 알 수 없었습니다. 시간 제한을 기다리는 대신 대부분의 경우 더 빨리 연결을 닫을 수있었습니다. 감사합니다.

답변

8

표준을 충족시키기 위해 서버를 구축하는 경우 이미 여기에서 안내 할 수있는 많은 정보가 있습니다.

단순한 말은 입니다. 연결이 사용 된 이후의 시간을 기반으로해야하며 요청 데이터 수준에서는 그렇지 않습니다. 더 이상 숨이 방법으로

의 HTTP의 practical considerations section는/1.1 문서는 당신을 위해 몇 가지 지침이 있습니다

"서버는 일반적으로 몇 가지 시간 제한 값을해야합니다을 넘어서는 그들은 것이다 더 이상 프록시 서버는 연결을 유지합니다. 은 클라이언트가 동일한 서버를 통해 연결을 더 만들게 될 가능성이 높기 때문에 일 가능성이 높습니다. 요구 사항이 없습니다. 이 클라이언트 또는 서버 에 대한이 시간 제한 길이가 (또는 존재)입니다. "

또는

"클라이언트 또는 서버 시간 초과 기능을 사용하고자 할 때이 전송 연결에 우아한 가까이를 발행해야한다. 클라이언트와 서버 모두 전송의 반대편을 항상 감시해야하며 적절하게 에 응답해야합니다. 클라이언트 또는 서버 이 다른 팀의 가까운 즉시 을 감지하지 못하는 경우가 네트워크에 불필요한 자원 소모를 일으킬 수 있습니다 "

+0

고맙습니다. 나는 또한 그것을 읽었다. .. 여기의 의견은 나의 의혹을 확인한다 & 지금 나는 눈이 멀게되는 뒷골목을 쓰러지지 않고있다라는 것을 알고있다. 와우. Stackoverflow 작품! 감사합니다. – Bret

1

언제든지 닫을 수 있습니다. 헤더는 클라이언트가 연결을 열린 상태로 두길 원하지만 서버가이를 준수 할 필요는 없음을 나타냅니다. 대부분의 서버는 약 5-10 초 동안 열어두고 일부 서버는 전혀주의를 기울이지 않습니다.

1

Keep-Alive 기능을 다루는 RFC를 읽어야합니다. 그렇지 않으면 예상대로 작동하지 않는 서버로 종료 될 수 있습니다.

@ [Stephen]이 이미 지적했듯이 서버는 언제든지 원하는대로 연결을 닫을 수 있습니다 (그래도 요청/응답 쌍이 아님). 클라이언트 용 Ditto. 다른 솔루션을 사용하면 서버 또는 클라이언트가 상대방에 DoS를 수행 할 수 있습니다.

EDIT : Connection 헤더를 살펴보십시오. 클라이언트 (및 서버)는 헤더를 사용하여 정상적인 연결 종료를 요청할 수 있습니다. 예를 들어, 요청 내에 Connection: close은 응답을 보낸 후 연결을 닫도록 서버에 요청합니다.

+0

내가 묻는 이유는 .css/.js/etc 파일을 모두 사용한 후에도 대부분의 웹 브라우저 (특히 테스트 한 모든 브라우저)가 "Connection : keep-alive"헤더를 계속 전송한다는 것입니다. 요청 및 수신. 나는 아마 그것들이 그것보다 지적이고 내가 뭔가를 놓쳤다 고 생각했다. – Bret

+0

브라우저는 동일한 서버에 더 많은 요청을 보내야하는 경우 응답 시간을 늘리기 때문에 연결을 계속 유지하는 것이 좋습니다. 서버가 Keep-Alive 기능을 무시하고 요청할 때마다 연결을 닫을 수있는 방법은 없습니다. – Alexander

3

에 유래이 매우 모호한 질문을 처리하는 방법을 볼 수 있습니다 -.에 대한 답변을, 구글에

난 그냥 구글에 When should I close an HTTP 1.1 connection?을 넣어. 기술 사양 및 모호한 언어로 빠져 있으며, 세 번째 히트는 정말 쉬운 HTTP를 제작했다. 목차에서 Persistent Connections and the "Connection: close" Header을 제목의 섹션에 대한 링크가 . 이 섹션은 세 단락으로 매우 간단한 언어를 사용하고 정확히 알고 싶은 내용을 알려줍니다.

나는 비-C 프로그래머를위한 일반 영어 답 : 외람된

이 프로그램은 세부 상당한 문제가 기술적 노력이다 싶다. 기술 문서를 읽는 것은 절대적으로 필수적인 기술입니다. "일반 영어"사양에 대한 제 3 자 해석을 사용하면 불량 일을하게됩니다.

관련 문제