https://drive.google.com/file/d/11VXHdKRae8hQD6nT-Rm0Iu6A0Ldf_zGG/view?usp=sharing
웹 서버
- 소프트웨어와 웹 페이지 제공에 특화된 장비 양쪽 모두를 가리킴
- 기능, 형태, 크기가 다양함.
클라이언트 식별하기
역방향 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 주소를 잘 지원하지 않음
- 프라이버시 침해 우려 → 클라이언트 사용자 이름 노출
요청 메시지 수신
읽기 → 파싱 → 구성
내부 표현
- 쉽게 다룰 수 있도록 내부 자료 구조에 저장
- 파싱한 각 조각에 대한 포인터와 길이를 담을 수 있음
- 헤더는 속도가 빠른 룩업 테이블에 저장되어 각 필드에 신속히 접근 가능함.
커넥션 입출력 아키텍처
- 단일 스레드 웹 서버
- 한 번에 하나씩 요청 처리
- 구현 간단
- 처리 도중에 모든 다른 커넥션 무시 → 성능 문제
- 멀티 프로세스와 멀티스레드 웹 서버
- 여러 요청을 동시에 처리
- 몇몇 서버는 매 커넥션마다 스레드/프로세스 할당
- 수만 개의 동시 커넥션 처리 시 만들어진 스레드나 프로세스는 너무 많은 메모리나 시스템 리소스를 소비함. → 최대 개수 제한
- 다중 I/O 서버
- 모든 커넥션은 동시에 활동을 감시당함.
- 커넥션의 상태가 바뀌면 그에 대한 처리 수행
- 유휴 상태의 커넥션 대기로 리소스 낭비하지 않음.
- 다중 멀티스레드 웹 서버
- 멀티스레딩 + 다중화(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 상태 코드 응답
- 영구 이동 - 301 Moved Permanently
- 리소스의 이름이 바뀌었으므로, 북마크를 갱신할 수 있음
303 See Other, 307 Temporary Redirect
- 임시 이동 : 임시 위치로 리다이렉트. 나중엔 원래 URL로 찾아오고, 북마크도 갱신하지 말 것.
- URL 증강 : 트랜잭션 간 상태 유지.
- 문맥 정보를 포함시키기 위해 재 작성된 URL로 리다이렉트
- 상태 정보를 내포한 새 URL 생성 → 상태정보가 추가된 완전한 URL을 포함한 요청을 다시 보냄.
- 부하 균형 : 좀 덜 부하가 걸린 서버로 리다이렉트
- 친밀한 다른 서버가 있을 때
- 디렉터리 이름 정규화
'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 |