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. 디렉터리 이름 정규화

'HTTP' 카테고리의 다른 글

HTTP 완벽 가이드 스터디 (6)  (0) 2024.10.08
HTTP 완벽 가이드 (4)  (0) 2024.10.02
HTTP 완벽 가이드 (3)  (0) 2024.10.02
HTTP 완벽 가이드 스터디 (2)  (0) 2024.10.02
HTTP 완벽 가이드 스터디 (1)  (0) 2024.10.02