제1장. 웹과 네트워크의 기본에 대해 알아보자
- WWW 구성
- 문서 기술 언어: HTML
- 문서 전송 프로토콜: HTTP
- 문서 주소 지정방법: URL
- 네트워크는 TCP/IP로 구축
- 애플리케이션 계층
- HTTP, FTP, DNS
- 트랜스포트 계층
- TCP, UDP
- 네트워크 계층
- 패킷의 이동
- 링크 계층
- 하드웨어
- IP/TCP/DNS
- IP 프로토콜
- IP 주소랑 다른거임
- 개개의 패킷을 상대방에게 전달
- IP 주소와 MAC 주소를 통해 패킷 전달
- ARP 프로토콜 활용
- 수신지의 IP 주소를 활용해 MAC 주소 조사
- TCP 프로토콜
- 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대에게 보내고, 정확하게 도착했는지 확인
- DNS 프로토콜
- 도메인 주소와 IP 대응
- URI는 리소스를 식별하기 위해 문자열 전반을 나타내는데 비해, URL은 리소스의 장소 나타냄
제2장. 간단한 프로토콜 HTTP
- Stateless, 이전 리퀘스트/리스폰스 기억 X
- 근데 상태 유지하고 싶어서 Cookie 도입
- HTTP 메서드
- GET: 리소스 획득
- POST: 엔티티 전송
- PUT: 파일 전송
- HEAD: 메시지 헤더 취득
- DELETE: 파일 삭제
- OPTIONS: 제공하고 있는 메서드의 문의
- 요청시 Allow: GET, POST, HEAD, OPTIONS 처럼 반환
- TRACE: 경로 조사
- 보안상의 문제 있어서 잘 안씀
- CONNECT: 프록시에 터널링 요구
- 프록시에 터널 접속 확립을 요함
- TCP 통신을 터널링 시키기 위해 사용
- 초기에는 HTTP 통신 한번에 TCP 통신 한번 연결/종료 했어야 했음
- 웹 발생하면서 오버헤드 커짐
- HTTP/1.1부터 Persistent Connections 방법 고안
- 한쪽이 명시적으로 연결 종료하지 않는다면, TCP는 연결 유지함
제3장. HTTP 정보는 HTTP 메시지에 있다
- 메시지 헤더
- 서버와 클라이언트가 꼭 처리해야하는 리퀘스트와 리스폰스 내용과 속성 등
- 메시지 바디
- 전송되는 데이터 그 자체
- HTTP로 데이터 전송할 경우 인코딩을 통해 전송 효율 높일 수 있음
- 다량의 액세스를 효율 좋게 처리 가능
- 메시지: HTTP 통신의 기본 단위, 통신을 통해 전송
- 엔티티: 리퀘스트/리스폰스의 부가물로, 엔티티 헤더필드와 엔티티 바디로 구성
- HTTP 메시지 바디의 역할: 리퀘스트/리스폰스에 관한 엔티티 바디 운반
- 콘텐츠 코딩
- 엔티티에 적용하는 인코딩으로, 엔티티 정보를 유지한채 압축
- 청크 전송 코딩
- 사이즈가 큰 데이터를 전송하는 경우, 데이터를 분할해서 조금씩 전송
- 엔티티 바디를 분할하는 기능을 청크 전송 코딩
- 엔티티 바디를 청크로 분해 + CRLF 추가해서 기록
- 멀티파트
- 하나의 메시지 바디 내부에 엔티티를 여러개 포함시켜 보낼 수 있음
- 레인지 리퀘스트
- 엔티티의 범위를 지정해서 다운로드
- 응답 상태코드는 206 partial content
- 콘텐츠 네고시에이션
- 클라이언트와 서버가 제공하는 리소스의 내용에 대해 교섭하는것
- 클라이언트에 더욱 적합한 리소스 제공
- 언어/문자 세트/인코딩 방식을 변경
제4장. 결과를 전달하는 HTTP 상태 코드
- 상태 코드: 클라이언트가 서버를 향해 리퀘스트 보낼 때, 서버에서 결과가 어떻게 되었는지 알려주는 것
- 1xx (Informational) : 리퀘스트 받아들여 처리중
- 2xx (Success) : 리퀘스트 정상적으로 처리함
- 200(Success): 리퀘스트가 정상으로 처리됨
- 204(No Content): 클라이언트에서 서버에 정보를 보내는 것으로 족하고, 클라이언트에 대해서 새로운 정보를 보낼 필요가 없는 경우 사용
- 206(Partial Content): Range에 의해 범위가 지정된 리퀘스트에 의해 서버가 부분적 GET 리퀘스트를 받은 것
- 3xx (Redirection) : 리퀘스트 완료하기 위해 브라우저에서 추가 동작이 필요
- 301(Moved Permanently): 요청된 리소스에 새로운 URI가 부여되어 있어, 이후로는 그 URI를 사용해야 함을 알려줌
- 302(Found): 일시적으로 URI가 이동했으니, 거길 참조하세요
- 303(See Other): URI가 이동했으니, 거길 "GET"메서드를 통해 참조하세요
- 4xx (Client Error) : 서버는 리퀘스트 이해 불가능
- 400(Bad Request): 리케스트 구문이 잘못되었음
- 401(Unauthorized): 유저 인증에 실패! WWW-Authenticate 헤더 필드를 포함하세요
- 403(Forbidden): 리퀘스트 된 리소스의 액세스가 거부되었음
- 404(Not Found): 리퀘스트 한 리소스 서버상에 없음
- 5xx (Server Error) : 서버는 리퀘스트 처리 실패
- 500(Internal Server Error): 서버에서 리퀘스트 처리 도중 에러 발생함
- 503(Service Unavailable): 서버 과부하 상태이거나 점검 중임