///////
Search
🚁

HTTP는 무엇인가요?

HTTP란?

HTTP는 Hyper Text Transfer Protocol
인터넷에서 HTML문서와 같은 리소스를 주고받을 수 있는 프로토콜
모든 데이터 교환의 기초
클라이언트 - 서버 프로토콜
규칙에 맞춰 개발하기 때문에 정보를 교환할 수 있다
확장 가능한 프로토콜
TCP 또는 TLS(암호화된 TCP 연결)을 통해 전송

HTTP의 특징

간단함

HTTP는 사람이 읽을 수 있게 고안되었다
HTTP/2는 HTTP 메세지를 프레임 별로 캡슐화 → 간결함을 유지

확장 가능

HTTP 헤더를 통해 확장하고 실험하기 쉽다
→ 헤더를 통해 부가적인 정보를 전송할 수 있다
헤더의 시맨틱에 대해 클라이언트 - 서버 사이에 합의가 된다면, 새로운 기능을 추가할 수 있다
시맨틱 태그 : 이름만 봐도 해당 태그의 역할을 알 수 있다
(윗부분 생략) <header> (헤더 관련 코드 생략) </header> <main> (본문 관련 코드 생략) </main> <footer> (푸터 관련 코드 생략) </footer>
Java
복사

Stateless하지만 세션이 있다

HTTP는 상태를 저장하지 않는다(Stateless)
사용자와 페이지가 상호작용 하길 원하는 경우 HTTP 쿠키를 사용해 세션을 만든다
HTTP 헤더에 Set-Cookie 헤더를 통해 쿠키를 생성할 수 있다

TCP 표준에 의존한 연결

HTTP는 근본적인 전송 프로토콜을 요구하지 않는다
신뢰할 수 있고 메세지 손실이 없는 연결을 요구
→ TCP 표준에 맞춰 연결

HTTP를 통해 제어할 수 있는 것

1. 캐시

HTTP를 통해 문서가 캐시되는 방식을 제어할 수 있다
서버는 캐시 대상과 기간을 프록시와 클라이언트에 지시할 수 있다

2. 인증

페이지를 특정 사용자만이 접근할 수 있도록 설정 가능

3. 프록시와 터널링

서버 / 클라이언트는 인트라넷에 위치해 실제 주소를 숨기기도 한다
HTTP 요청은 네트워크 장벽을 무시하고 프록시를 통해 나간다

4. 세션

HTTP 쿠키를 통해 서버의 상태와 요청을 연결한다

HTTP 흐름

1. TCP 연결

TCP 연결은 요청을 보내거나 응답을 받는데 사용
클라이언트는 새 연결을 열거나, 기존 연결을 재사용하거나, 서버에 대한 여러 TCP 연결을 열 수 있다

2. HTTP 메시지를 전송

HTTP 메시지는 사람이 읽을 수 있다.
HTTP/2에서는 메시지가 프레임 속으로 캡슐화되어 직접 읽는게 불가능하지만 원칙은 동일
GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr
Java
복사

3. 서버에 의해 전송된 응답을 읽음

HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
Java
복사

4. 연결을 닫음 / 다른 요청을 위해 재사용

HTTP 메세지

HTTP 메세지는 사람이 읽을 수 있다
요청과 응답 (Request and Response) 두 가지 타입이 있다

요청(Request)

HTTP 메서드
클라이언트가 수행하고자 하는 동작 : GET, POST
Path
가져오려는 리소스의 경로
프로토콜, 도메인, TCP 포트를 제거안 리소스의 URL
위 사진에서는 developer.mozilla.org의 도메인
HTTP 프로토콜 버전
서버의 추가 정보를 전달하는 헤더

응답(Response)

HTTP 프로토콜의 버전
요청의 성공 여부를 보여주는 상태 코드
상태 코드의 짧은 설명을 나타내는 상태 메시지
요청 헤더와 비슷한 HTTP 헤더
선택 사항으로 가져온 리소스가 포함되는 본문

요약

HTTP란 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 요청과 응답 HTTP 메세지를 갖고있으며 각 메세지를 통해 요청과 응답에 대한 정보를 쉽게 이해할 수 있다. 또한 HTTP 헤더 덕분에 확장성이 높고 사용과 이해가 쉽다.

참고