HTTP

[HTTP] 웹 기본 지식 정리 - HTTP 기본

aaaahy 2023. 1. 9. 18:40

- 이 게시글은 인프런 "모든 개발자를 위한 HTTP 웹 기본지식"의 김영한님 강의를 보고 요약한 내용입니다.


1. HTTP(HyperText Transfer Protocol)

HTTP 메시지에 모든 것을 전송한다 !!

  • HTML
  • Text
  • Image
  • 음성, 영상, 파일
  • JSON
  • XML(API) 

→ 거의 모든 형태의 데이터 전송이 가능

 

HTTP 역사

- HTTP/0.9 : 1991년, GET메서드만 지원하며 HTTP 헤더 없음
- HTTP/1.0 : 1996년, 메서드와 헤더 추가
HTTP/1.1 : 1997년, 가장 많이 사용하며 우리에게 중요한 버전
- HTTP/2 : 2015년, 성능 개선에 초점
- HTTP/3 : 진행 중, TCP 대신 UDP 사용, 성능 개선에 초점

 

기반 프로토콜

- TCP : HTTP/1.1, HTTP/2

- UDP : HTTP/3 → 성능 최적화를 위해

 

HTTP 특징
클라이언트 서버 구조
무상태 프로토콜(Stateless), 비연결성
HTTP 메시지를 통해 통신
- 단순하며 확장 가능함

 

2. 클라이언트 서버 구조

- 클라이언트가 요청을 보내고 응답을 대기

- 서버가 요청에 대한 결과를 만들어서 응답

- Request Response 구조

클라이언트 : 사용성과 UI에 집중

서버 : 복잡한 비즈니스 로직이나 데이터 등을 처리

클라이언트와 서버를 분리하여 독립적으로 진화하도록 !

 

3. 무상태 프로토콜(Stateless)

무상태(Stateless)와 상태유지(Stateful) 차이는?

 

- 무상태(Stateless)   

  • 서버가 클라이언트의 이전 상태를 보존하지 않는다.
  • 응답 서버를 쉽게 바꿀 수 있다. → 무한한 서버 증설 가능
  • 스케일 아웃 → 수평 확장 유리

 

- 상태유지(Stateful)

  • 서버가 클라이언트의 이전 상태를 보존한다.
  • 항상 같은 서버가 유지되어야 한다.

 

* 무상태와 상태유지의 이해에 관한 자세한 예시는 강의 참고

 

무상태(Stateless)의 실무 한계

- 단순한 서비스 소개화면은 무상태로 가능하지만 로그인 서비스와 같이 상태를 유지해야하는 경우에는 불가능

→ 일반적으로 쿠키와 서버 세션 등을 사용하여 상태 유지

- 상태유지는 최소한만 사용

- 클라이언트가 추가 데이터를 전송하므로 데이터를 너무 많이 보냄

 

4. 비연결성

* 클라이언트와 서버 TCP/IP 연결을 유지하는 모델 

  • 서버는 연결을 계속 유지하므로 서버 자원이 소모

 

* 클라이언트와 서버 TCP/IP 연결을 유지하지 않는 모델

  • 클라이언트가 요청을 보내고 서버가 응답하면 바로 연결을 끊음
  • 서버는 연결을 유지하지 않으며 최소한의 자원을 유지

 

- HTTP는 기본적으로 연결을 유지하지 않는 모델 !

- 일반적으로 초 단위 이하의 빠른 속도로 응답

- 서버 자원을 매우 효율적으로 사용 가능

 

비연결성 한계와 극복

- TCP/IP 연결을 새로 맺어야 함 → 3 way handshake 시간이 추가됨

- 웹 브라우저 사이트 요청 시 html뿐만 아니라 수 많은 자원(javascript, css, image 등)이 함께 다운로드됨

 

- 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결

- HTTP/2, HTTP/3 에서는 더 많은 최적화

 

내부 메커니즘에 따라 연결시간 유지

 

5. HTTP 메시지

  • HTTP 메시지 구조
start-line 시작라인
header 헤더
empty line 공백 라인(CRLF)
message body

 

- HTTP 요청 메시지 예시 

GET/search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
 

* 요청 메시지도 body 본문을 가질 수 있음

* HTTP 요청 메시지 시작라인

  • HTTP 메서드 : 서버가 수행해야 할 동작 지정(GET: 리소스 조회, POST: 요청 내역 처리, PUT, DELETE...)
  • 요청 대상 : 절대 경로 = "/"로 시작하는 경로
  • HTTP Version

 

- HTTP 응답 메시지 예시

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
 
<html>
    <body>...</body>
</html>

* HTTP 응답 메시지 시작라인

  • HTTP Version
  • HTTP 상태 코드 : 요청 성공, 실패를 나타냄(200: 성공, 400: 클라이언트 요청 오류, 500: 서버 내부 오류)
  • 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드의 설명 글

 

- HTTP 헤더

  • field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)
  • field-name 은 대소문자 구분이 없음

    * 용도

        ① HTTP 전송에 필요한 모든 부가정보(메타 정보가 다 들어있음)

     ex) 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등

        ② 표준 헤더 많이 존재

        ③ 필요시 임의의 헤더 추가 가능

 

- HTTP 바디

    * 용도

        ① 실제 전송할 데이터

        ② HTML 문서, 임지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능

 

 

이번 수업내용의 최종 결론은?

 

지금은 HTTP 시대 !