개발도서 읽기/HTTP 완벽 가이드

[2. HTTP 아키텍처] 5장) 웹 서버

까연 2021. 4. 25. 17:35

웹 서버

  • HTTP 및 그와 관련된 TCP처리를 구현한 것
  • 모든 웹 서버는 리소스에 대한 HTTP 요청을 받아서 콘텐츠를 클라이언트에게 돌려준다.
  • 자신이 제공하는 리소스를 관리하고 웹 서버를 설정, 통제, 확장하기 위한 관리 기능을 제공

- 웹 서버의 형태

  • 다목적 소프트웨어 웹 서버를 표준 컴퓨터 시스템에 설치하고 실행할 수 있다.
  • 전자기기 안에 몇 개의 컴퓨터 칩만으로 구현된 웹 서버를 내장시켜서 관리 콘솔로 제공

- 웹 서버가 하는 일

  1. 커넥션을 맺는다. -- 클라이언트의 접속을 받아들이거나, 닫는다.
  2. 요청을 받는다. -- 요청 메시지를 네트워크로부터 읽어들임
  3. 요청 처리 -- 메시지를 해석하고 행동
  4. 리소스에 접근
  5. 응답 생성
  6. 응답을 보낸다.
  7. 트랜잭션을 로그로 남긴다.

 

(5) 응답 만들기

: 응답 상태코드, 응답 헤더, 응답 본문 포함

 

- 응답 엔터티

  • Content-type 헤더: 응답 본문의 MIME 타입 서술
  • Content-Length 헤더: 응답 본문 길이 서술
  • 실제 응답 본문 내용

- MIME 타입과 리소스를 연결하는 방법

  • mime.types: 확장자 기반 타입 연계 ex) image/gif
  • 매직 타이핑: 타입을 알아보기 위해 파일 내용을 검사해 매직 파일에 해당하는 패턴을 찾음
  • 유형 명시: 확장자나 내용에 상관없이 명시
  • 유형 협상: 웹 서버가 사용자와의 협상으로 타입 판별

리다이렉션

: 웹 서버는 요청을 수행하기 위해 브라우저가 다른 곳으로 가도록 리다이렉트 할 수 있다.

리다이렉션 응답의 상태코드 = 3XX

 

- 리다이렉트 사용

  • 영구히 리소스가 옮겨진 경우
  • 임시로 리소스가 옮겨진 경우: (303 See Other, 307 Temporary Redirect)
  • URL 증강: 문맥 정보를 포함시키기 위해 재 작성된 URL로 리다이렉트 (303, 307 상태코드)
  • 부하 균형: 과부화된 서버가 요청을 받으면, 클라이언트를 좀 덜 부하가 걸린 서버로 리다이렉트 (303, 307 상태코드)
  • 친밀한 다른 서버가 있을 때: (303, 307 상태코드)
  • 디렉터리 이름 정규화: /를 빠뜨렸을 때, 정상 도착을 위해 /를 추가한 URL로 리다이렉트

(6) 응답 보내기

: 비지속적인 커넥션이라면 서버는 모든 메시지를 전송했을 때 자신 쪽 커넥션을 닫고, 지속적인 커넥션이라면 서버가 Content-Length 계산이나 클라이언트 응답이 언제 끝나는지 알 수 없는 경우 커넥션은 열린 상태를 유지한다.

 

(7) 로깅

: 트랜잭션이 완료되었을 때 웹 서버는 트랜잭션이 어떻게 수행되었는지에 대한 로그를 로그파일에 기록