웹개발을 할때 항상 사용하지만 늘 알쏭달쏭한... HTTP에 대한 모든 것을 한번 정리해보자!!

 

인터넷 네크워크

 

인터넷네트워크의 흐름

 

IP (INTERNET PROTOCOL)

  • 지정한 IP주소에 데이터 전달
  • 패킷이라는 통신 단위로 데이터 전달
  • 한계점
    • 비연결성 (패킷을 받을 대상이 없거나 서비스 불능 상태인지 판단할 수 없다)
    • 비신뢰성 (패킷의 도착순서, 패킷이 도착했는지 확인할 수 없다)
    • 프로그램 구분 (같은 IP에서 어떤 프로그램과 통신해야 하는지 알 수 없다)

 

TCP (Transmission Control Protocol)

  • IP의 패킷의 한계점을 보완
  • TCP 3 way handshake
    • 출발지와 목적지 간의 연결 상태를 먼저 확인한다.
    • SYN, SYN + ACK, ACK 3단계로 이루어진다.
  • 데이터 전달 보증
    • 데이터를 잘 받았는지 응답을 보내준다.
  • 순서 보장
    • 순서 정보를 패킷에 담아서 보낸다.

 

UDP

  • IP와 거의 같고, PORT 정보 정도만 추가되는 형태이다.
  • HTTP3에서 TCP의 3way handshake 등의 과정을 최적화 하려다보니 최근 주목을 받고있음.

PORT

  • 0 ~ 65535 할당 가능
  • 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
  • IP가 아파트라면 PORT는 몇동 몇호 인지

 

 

DNS (Domain Name System)

  • IP주소는 기억하기 어렵다
  • IP주소는 변경될 수 있다
  • 도메인명을 IP주소로 변환해준다
    1. 도메인명으로 접속
    2. DNS서버에서 해당 도메인의 IP주소를 리턴
    3. 해당 IP주소를 가지고 접속

 

 

URI (Uniform resource Identifier)

  • 리소스를 식별하는 유일한 식별자
  • 주로 URL을 의미한다
    • URL (Uniform resource Locator) 리소스의 위치
  • URL문법형식
    • scheme://[userinfo@]host:port/path?query
    • http://www.google.com:443/search?q=hello&hl=ko
    • 프로토콜, 호스트명, 포트, 패스, 쿼리파라미터
    • 포트는 주로 생략가능 (프로토콜마다 주로 사용하는 포트가 있다)

 

 

웹 브라우저 요청 흐름

 

 

HTTP (HyperText Transfer Protocol)

  • HTTP 메시지로 모든것을 전송 가능
    • HTML, TEXT, 이미지, 음성, 영상, 파일, JSON, XML 등 거의 모든 형태의 데이터
  • HTTP/1.1 우리가 주로 사용하는 버전 (HTTP/2, HTTP/3도 점점 증가중)
  •  
  • 클라이언트 서버 구조
    • 클라이언트는 요청, 서버는 응답
    • UI와 사용성은 클라이언트에서 / 로직과 데이터는 서버에서
    •  
  • 무상태 프로토콜 (Stateless)
    • 클라이언트의 상태를 서버가 보존하지 않는다는 의미
    • 가능한 무상태로 설계하는 것이 좋다
    • 상태유지 ex) 로그인 정보 / 무상태 ex) 단순 소개 페이지
      • 상태유지는 브라우저 쿠키서버 세션등을 사용해서 상태 유지한다.
    • 클라이언트 쪽에서 서버가 필요한 정보를 한번에 전송해준다.
    • 서버 확장성이 높다. (scale out)
    • 서버장애발생시
      • 상태유지 (Stateful)
        • 클라이언트 -> 서버1 (항상 서버1 쪽으로 요청해야한다)
        • 통신중 서버1 장애가 발생하면?
        • 클라이언트 -> 서버2 처음부터 다시 요청해야한다.
      • 무상태
        • 통신중 서버1 장애가 발생하면?
        • HTTP 요청 메시지를 그냥 서버2로 전달하면된다.
        •  
  • 비 연결성
    • 서버에 요청해서 응답 받으면 서버와의 연결 종료
    • 서버와의 연결상태를 유지하지 않아서 서버자원 효율적으로 사용가능
    • TCP/IP 연결을 계속 새로 맺는데 걸리는 시간 문제
    • HTTP 지속연결로 문제 해결
      • 기존방식 -> 연결, HTML요청/응답, 종료 | 연결,이미지요청/응답, 종료 ....
      • 지속연결 -> 연결, (HTML, 이미지 등)요청/응답, 종료

 

HTTP 메시지

 

HTTP메시지 구성

  요청메시지 응답메시지
시작라인 HTTP메서드 요청대상 HTTP버전
ex) GET /search?q=hello&hl=ko HTTP/1.1
HTTP버전 HTTP상태코드 이유문구
ex) HTTP/1.1 200 OK
헤더 Host:도메인명
ex) Host: www.google.com
HTTP전송에 필요한 모든 부가정보..
ex) Content-Type: text/html;charset=UTF-8;Content-Length: 3423
바디 있어도 되고 없어도됨. 보통 넣지않는다. 실제 전송 데이터
ex)...

 

 

 


참고

인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식(김영한님)

+ Recent posts