12. 웹 서버 처리 과정
1. HTTP Session(논리적 연결) 생성
2. 브라우저 내부 Thread가 Client Socket을 만들어
Server Socket 과의 연결을 수행한다
3. 브라우저와 웹 서버는 HTTP Request 및 Response를 수행한
다.
4. Server Socket Close
5. Client Socket Close 및 브라우저 쓰레드 종료.
6. HTTP Session Close
15. - HTTP 메시지는 원격 기계에 있는 문서의 위
치와 메시지를 지정하는 방법이다.
- HTTP 메시지는 아스키코드 13번인 "캐리지
리턴(r)"과 10번인 "라인피드(n)"의 조합으로
각 행을 구분한다.(CRLF)
- HTTP 메시지는 시작행과 부가정보(선택적
으로 추가 가능한 메시지 헤더와 메시지 바디)
로 구성된다.
17. - 시작 행은 HTTP 메시지의 가장 첫 행에 존재한다.
- 시작 행은 HTTP (메서드/URL/버전/응답코드) 등
의 정보로 구성된다.
- HTTP GET 요청 시 시작 행을 가장 먼저 읽어드린
웹 서버는 "메시지 바디"가 존재하지 않는다는 것을
예상한다.
- HTTP POST 요청 시 시작 행을 가장 먼저 읽어드
린 웹 서버는 "메시지 바디"가 들어올 것을 예상 후
메시지 헤더의 Content-Length 길이를 읽어드려 메
시지 바디 크기를 파악한다.
19. - 메시지 헤더는 콜론(:)으로 구분된 이름/값 쌍으로 정의
된다.
- 메시지 헤더는 여러 개일 수 있으며, 가장 마지막에 내용
없는 메시지 헤더를 추가해 더 이상의 메시지 헤더가 없
음을 알린다.
- 메시지 바디의 끝을 알리는 방법으로 Content-Length
메시지 헤더를 사용한다.(POST 요청 시 해당)
만약 이 값이 지정된 경우는 메시지 헤더 전송이 모두 완
료된 후 해당 크기 만큼의 메시지 바디가 따라온다는 의
미를 가지게 된다.(Chunked 인코딩 방식 제외)
- Chunked 인코딩 방식에서는 크기가 0인 청크를 사용해
메시지 바디의 끝을 알린다.
즉 메시지 바디의 종료 시점은 크기가 0인 청크를 만날 때
이다.
21. - 메시지 헤더 종료 후 메시지 헤더의 Content-
Length 길이를 통해 메시지 바디를 얼마나 읽어야
되는지 판단한다.
- 메시지 헤더의 Content-Length로 전달받은 크기
에 도달하면 메시지 읽기를 종료한다.
이후 모든 내용(시작 행 + 부가정보)을 취합해 클라
이언트로 응답한다.(정적 HTML 등)
- 만약 바이너리(mime-type: multipart/form-data)
데이터 전송 시 메시지 바디는 임의의 문자열인
"7dd3ba3a4316ee"로 각 행이 구분된다.