HTTP

HTTP 완벽 가이드 스터디 (5)

kchabin 2024. 10. 3. 22:31

https://drive.google.com/file/d/11VXHdKRae8hQD6nT-Rm0Iu6A0Ldf_zGG/view?usp=sharing

 

5장.drawio

 

drive.google.com


웹 서버

  • 소프트웨어와 웹 페이지 제공에 특화된 장비 양쪽 모두를 가리킴
  • 기능, 형태, 크기가 다양함.

서버의 동작

클라이언트 식별하기

역방향 DNS

클라이언트의 ip 주소 → 호스트명 변환

  • 구체적인 접근 제어, 로깅용
  • hostname lookup : 웹 트랜잭션을 느려지게 함.
  • 대용량 웹서버 → 특정 콘텐츠에 대해서만 hostname resolution 허용

ident 프로토콜(Identification Protocol)

“너의 포트 X에서 출력되어 내 포트 Y에 연결되는 연결을 초기화한 사용자는 누구인가?”

Common Log Format의 두 번째 필드는 각 HTTP 요청의 ident 사용자 이름을 담고 있음.

  • 없으면 - (하이픈) 처리함.
  • 클라이언트가 ident 프로토콜을 지원한다면, TCP 113번 포트 listen
<port-on-server> , <port-on-client>

 

  • 공공 인터넷에선 사용하지 않음
  • 대부분의 클라이언트 pc는 identd를 실행하지 않음
  • 유의미한 트랜잭션 지연
  • 방화벽이 ident 트래픽을 못들어오게 막는 경우가 많음
  • 안전하지 않고, 조작하기 쉽다.
  • 가상 IP 주소를 잘 지원하지 않음
  • 프라이버시 침해 우려 → 클라이언트 사용자 이름 노출

 

요청 메시지 수신

읽기 → 파싱 → 구성

내부 표현

  • 쉽게 다룰 수 있도록 내부 자료 구조에 저장
  • 파싱한 각 조각에 대한 포인터와 길이를 담을 수 있음
  • 헤더는 속도가 빠른 룩업 테이블에 저장되어 각 필드에 신속히 접근 가능함.

커넥션 입출력 아키텍처

  1. 단일 스레드 웹 서버 
    • 한 번에 하나씩 요청 처리
    • 구현 간단
    • 처리 도중에 모든 다른 커넥션 무시 → 성능 문제
  2. 멀티 프로세스와 멀티스레드 웹 서버
    • 여러 요청을 동시에 처리
    • 몇몇 서버는 매 커넥션마다 스레드/프로세스 할당
      • 수만 개의 동시 커넥션 처리 시 만들어진 스레드나 프로세스는 너무 많은 메모리나 시스템 리소스를 소비함. → 최대 개수 제한
  3. 다중 I/O 서버
    • 모든 커넥션은 동시에 활동을 감시당함.
    • 커넥션의 상태가 바뀌면 그에 대한 처리 수행
    • 유휴 상태의 커넥션 대기로 리소스 낭비하지 않음.
  4. 다중 멀티스레드 웹 서버
    • 멀티스레딩 + 다중화(multiplexing)
    • 각각 열려있는 커넥션 감시, 각 커넥션에 대해 조금씩 작업 수행

요청 처리

리소스 접근

리소스의 매핑과 접근

  • 정적 콘텐츠
  • 동적 콘텐츠 → 서버 위에서 동작하는 리소스 생성 애플리케이션을 통해 만들어짐

Docroot

가장 단순한 매핑 : 요청 URI를 웹 서버의 파일 시스템 안에 있는 파일 이름으로 사용

  • 파일 시스템의 특별한 폴더 예약 → 문서 루트 or docroot
  • docroot + URI

가상 호스팅된 docroot

가상 호스팅된 웹 서버는 각 사이트에 그들만의 분리된 문서 루트를 주는 방법으로 한 웹 서버에서 여러 개의 웹 사이트를 호스팅함.

호스트별로 docroot가 다름

  • apache → VirtualHost 블록

사용자 홈 디렉토리 docroot

디렉토리 목록

DirectoryIndex 설정 지시자를 사용해서 기본 디렉터리 파일로 사용될 이름의 집합을 설정

DirectoryIndex index.html index.htm home.html home,htm index.cgi

동적 콘텐츠 리소스 매핑

  • URI를 동적 리소스에 매핑
  • 애플리케이션 서버 - 웹 서버를 복잡한 백엔드 애플리케이션과 연결

클라이언트 요청 → 정적 콘텐츠만 제공 → CGI

  • 프로세스 사용
  • 동일 프로세스에도 CGI 객체 생성
  • 서버 리소스 부담 큼

아파치 - uri의 경로명이 실행 가능한 프로그램이 위치한 디렉터리로 매핑되도록 설정하는 기능 제공

ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-programs

서버사이드 인클루드(SSI)

거의 www에만 사용되는 간단한 해석 서버 사이드 스크립트 언어.

어떤 리소스가 ssi를 포함하고 있는 것으로 설정되어 있다면, 서버는 그 리소스의 콘텐츠를 클라이언트에게 보내기 전 처리함.

  • .shtml, .stm, .shtm 같은 특수한 파일 확장자로 끝나야 함.

접근 제어

http 인증 (12장)

  • 각각의 리소스에 접근 제어 할당 가능
  • 클라이언트의 IP 주소에 근거하여 접근 제어 or 접근하기 위한 비밀번호 물어볼 수 도 있음

응답 생성

  • content-type
  • content-length
  • 응답 본문 내용

MIME 타입 결정

  • mime.types : 확장자 별 MIME 타입이 담겨있는 파일 탐색
  • 매직 타이핑 : 파일 내용 검사 → 패턴 테이블에 해당하는 패턴 찾기 (hexd 파일 시그니처)
  • 유형 명시 : 특정 파일 or 디렉터리 내부 파일들이 확장자나 내용에 상관없이 어떤 MIME 타입을 갖도록 웹 서버 설정
  • 유형 협상 : 한 리소스가 여러 종류의 문서 형식에 속하도록 설정 가능.
    • 특정 파일이 특정 MIME 타입을 갖도록 설정할 수 있음.

리다이렉션

3XX 상태 코드 응답

  1. 영구 이동 - 301 Moved Permanently
  • 리소스의 이름이 바뀌었으므로, 북마크를 갱신할 수 있음

303 See Other, 307 Temporary Redirect

  1. 임시 이동 : 임시 위치로 리다이렉트. 나중엔 원래 URL로 찾아오고, 북마크도 갱신하지 말 것.
  2. URL 증강 : 트랜잭션 간 상태 유지.
    1. 문맥 정보를 포함시키기 위해 재 작성된 URL로 리다이렉트
    2. 상태 정보를 내포한 새 URL 생성 → 상태정보가 추가된 완전한 URL을 포함한 요청을 다시 보냄.
  3. 부하 균형 : 좀 덜 부하가 걸린 서버로 리다이렉트
  4. 친밀한 다른 서버가 있을 때
  5. 디렉터리 이름 정규화