인프런 - 모든 개발자를 위한 HTTP 웹 기본지식 강의를 수강하며 수강섹션에 따라 총 8개의 파트로 분리하여 정리해 보려 합니다.
- 인터넷 네트워크
- URI와 웹 브라우저 요청흐름
- HTTP 기본
- HTTP 메서드
- HTTP 메서드 활용
- HTTP 상태코드
- HTTP헤더1 - 일반 헤더
- HTTP헤더2 - 캐시와 조건부 요청
이번에는 그 세번째 섹션인 HTTP 기본 에 대해 정리하겠습니다.
• HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더X
• HTTP/1.0 1996년: 메서드, 헤더 추가
• HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전
• RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014)
• HTTP/2 2015년: 성능 개선
• HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선
• TCP: HTTP/1.1, HTTP/2
• UDP: HTTP/3
• 현재 HTTP/1.1 주로 사용
• HTTP/2, HTTP/3 도 점점 증가
• 클라이언트 서버 구조
• 무상태 프로토콜(스테이스리스), 비연결성
• HTTP 메시지
• 단순함, 확장 가능
상태유지는 요청과 응답중간에 다른 서버로 변경이 되면 안됩니다. 중간에 다른 서버로 바뀔때 상태 정보를 다른 서버에게 미리 알려줘야합니다.
무상태는 중간에 다른 서버로 바뀌어도 됩니다. 그래서 응답 서버를 쉽게 바꿀수 있습니다.이는 무한한 서버 증설이 가능하다는 것을 의미합니다.
상태유지 프로토콜은 요청과 응답과정중 서버에 장애가 발생한다면 응답을 받지 못하게 됩니다.
하지만 무상태 프로토콜을 클라이언트의 상태를 보관하고 있지 않기 때문에 어떤 서버로도 응답이 가능하게 됩니다.이러한 특성덕분에 무상태는 수평적인 확장에 유리합니다. 하지만 단점도 물론 존재합니다.무상태 프로토콜의 한계는 다음과 같습니다.
비연결성의 특징은 다음과 같습니다.
요청 메시지 - HTTP 메서드
GET /search?q=hello&hl=ko HTTP/1.1
요청 메시지 - 요청 대상
GET /search?q=hello&hl=ko HTTP/1.1
요청 메시지 - HTTP 버전
GET /search?q=hello&hl=ko HTTP/1.1
응답 메시지
• start-line = request-line / status-line
• status-line = HTTP-version SP status-code SP reason-phrase CRLF
• HTTP 버전
• HTTP 상태 코드: 요청 성공, 실패를 나타냄
• 200: 성공
• 400: 클라이언트 요청 오류
• 500: 서버 내부 오류
• 이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명 글
• header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
• field-name은 대소문자 구문 없음
• HTTP 전송에 필요한 모든 부가정보
• 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,
서버 애플리케이션 정보, 캐시 관리 정보...
• 표준 헤더가 너무 많음
• https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
• 필요시 임의의 헤더 추가 가능
• helloworld: hihi
• 실제 전송할 데이터
• HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능