브라우저에 URL을 입력하면 브라우저가 HTTP 요청을 제출한다고 가정해 보겠습니다. 원격 HTTP 서버는 요청을 수락하고 요청을 처리하기 위해 긴 작업을 시작합니다.
요청이 완료되기 전에 종료하는 경우(예: Esc 키를 누르거나 Firefox에서) 요청은 어떻게 종료되나요? 브라우저가 이 중단 요청을 서버에 전달합니까(아닐 것 같습니다)?
아니오라고 가정하면, 긴 작업이 완료되면 서버는 그 결과로 무엇을 하게 될까요? 어쨌든 다시 보내주나요? 그렇다면 어떻게 될까요? 내 PC까지 도달하나요? 아니면 도중에 길을 잃었나요?
이것은 단지 나의 호기심을 위한 것입니다.
시간 내 줘서 고마워 :)
답변1
글쎄요, 그것은 모두 서버가 무엇을 하는지에 달려 있습니다. 일반적으로 전송이 시도될 때까지 종료된 요청을 "감지"하지 않습니다. 그 시점에서 스크립트는 웹 서버로부터 user_abort 메시지를 받게 됩니다(PHP에서는 를 사용하여 사용자 중단을 무시하도록 지시할 수 있습니다 ignore_user_abort(true);
). 클라이언트에 데이터를 보내려고 시도하지 않으면 서버가 요청이 중단되었음을 알 수 있는 방법이 없습니다.
닫힌 TCP 연결로 요청을 보내려고 할 때 일어나는 일은 전적으로 서버 소프트웨어에 따라 다릅니다. Apache는 다음과 같이 작동합니다. 동적 스크립트가 처리되는 동안 전송된 데이터가 아직 남아 있으면 스크립트에 중단에 대해 알리고 원하는 대로 처리하도록 합니다(PHP는 기본적으로 종료됩니다). 스크립트가 완료되었거나 정적 파일 요청인 경우 닫힌 연결을 무시하고 반환됩니다.
답변2
전기를 생각하면 될 것 같아요. 요금. 일부 연결이 종료되면 전송되는 데이터는 요금이 부과되며 해당 특정 전송에 사용할 수 있는 청취 소켓이 없기 때문에 사라집니다. 소켓이 있는 경우에만 일부 통신이 발생합니다.
예:
우리는 http://localhost
apache2 httpd를 찾았습니다. 실행 중이 아니라고 가정해 보겠습니다. 브라우저는 소켓을 열고 포트 80(기본값)으로 메시지를 보내고 응답이 있는지 확인합니다. Apache가 실행되지 않아 리스너가 없기 때문에 이 ping 요청은 전혀 응답을 받지 못합니다. 적어도 200번은 괜찮습니다. 아니면 어떤 종류의 악수라도 합니다. 그러면 우리 핑은 어떻게 되나요? http는 다음과 같은 내용을 보냅니다. GET http://localhost 80
... 등. 이 줄은 어떻게 되나요? GET http://localhost 80
? 그것은 단지 청구일 뿐이며 사라집니다.
이것은 단지 나의 믿음일 뿐이며, 먼저 참고해야 할 점은 다음과 같습니다.TCP더 명확하게하기 위해. 그래야만 인터넷 프로토콜과 그에 따른 http가 어떻게 작동하는지 이해할 수 있습니다. 궁극적으로 조기 종료된 http 요청에 대한 구체적인 정의는 없는 것 같습니다. 그래서 조기종료라고 합니다.