Firefox를 사용하고 있지만 브라우저에서 일반적으로 어떻게 결정하는지 알고 싶습니다.브라우저가 여러 요청에 대해 TCP 연결을 다시 사용하려고 할 때 어떤 상황입니까?
짧은 시간 내에 동일한 URL에 두 번 액세스하면 브라우저가 두 요청에 대해 동일한 TCP 연결을 다시 사용하려고 시도합니다 (이것을 keep-alive라고 함). 그러나 두 개의 다른 URL에 액세스 할 때 (은 여전히 동일한 서버) 브라우저 은 각 요청에 대해 새 연결을 열어보기로 결정합니다. 분명히 브라우저는 URL 당 1 연결 정책을 사용하지 않습니다.
긴 폴링을 사용하는 웹 서비스를 구현하려고하기 때문에이 질문을하고 있습니다. 사용자가 동일한 브라우저의 여러 탭에서이 서비스를 열어 볼 수도 있습니다. 그러나 keep-alive를 사용하면 두 번째 긴 폴링 요청은 브라우저가 두 소켓을 모두 같은 소켓에 밀어 넣으려고하기 때문에 첫 번째 포트가 완료 될 때까지 전송되지 않습니다 (Firefox에서 적어도). 서비스를 설계했습니다. 브라우저가 파이프 라이닝을 구현한다고하더라도 HTTP가 첫 번째 요청에 응답하기 전에 두 번째 요청에 응답 할 수있는 방법이 없습니다. HTTP에서 순서대로 응답을 완료해야하기 때문입니다.
파이어 폭스에 서버에 두 번째 요청을 보내지 만 첫 번째 요청이 끝날 때까지 기다려서 연결을 다시 사용할 수 있기 때문에 실제로 요청을 보내지 않는다고 생각합니다. 이것은 기능이 아니라 버그입니다. – Mark
아마도 동일한 URL의 경우 동일한 연결을 사용하려고 시도하지만 URL의 경우 풀의 다른 연결을 선택하려고합니까? – Mark
테스트가 2 개의 동시 HTTP 요청을 동일한 URL로 보내면 "직렬화"되거나 2 개의 다른 TCP 연결을 통해 보낼 수 있습니다. 하지만 파이프 라인을 보지 못하고 있습니다. 어떻게 될지, 구현에 따라 달라집니다. 브라우저는 풀에서 연결을 재사용하거나 새로운 연결을 통해 두 번째 요청을 보낼 수 있습니다. 두 접근법은 HTTP가'stateless' 프로토콜이기 때문에 정확합니다. 구현 내용이 이러한 세부 사항에 달려 있다면 IMHO가 있습니다. 디자인에 결함이 있습니다. 달성하고자하는 것에 대해 더 많이 작성해야 할 수도 있습니다. – Cratylus