[Network] HTTP 웹기본지식 (김영한)

bin1225·2024년 5월 24일
0

Network

목록 보기
1/7
post-thumbnail

김영한 HTTP웹 기본지식의 강의자료를 바탕으로 글을 작성하였다.

인터넷 통신

인터넷에서 두 컴퓨터는 서로 통신하며 데이터를 주고 받는다.
여기서 이용되는 것이 IP 프로토콜이다.

IP는 각 컴퓨터의 주소값으로 데이터 전송 시 도착지점의 IP값을 함께 전달함으로써 목적지까지 데이터를 전송한다.

IP프로토콜의 한계

IP만을 이용하여 데이터를 주고받는 방식은 한계점이 존재한다.

  1. 비연결성
    • 통신하는 두 컴퓨터는 연결돼있지 않다. 따라서 데이터를 받는 대상의 상태를 보장할 수 없다. 존재하지 않거나 작동이 불가능한 상태일 때에도 그에 대한 대처가 불가능하다.
  2. 비신뢰성
    • IP프로토콜에 포함되는 정보는 출발지와 목적지의 IP주소 뿐이다. 전송된 데이터가 전송과정에서 사라지는 경우에 대한 확인이 불가능하다. 또 여러개로 나누어 전송하는 경우 데이터의 순서를 보장할 수 없다.
  3. 프로그램 구분
    • 한 컴퓨터에서 여러개의 프로그램이 실행될 때 어떤 프로그램에 대한 데이터인지 구분할 수 없다.

이러한 한계점을 극복하기 위해 TCP/UDP 프로토콜을 추가로 사용한다.

TCP/IP

IP주소만 전달했을 때 발생하는 한계점을 극복하기 위해 TCP 프로토콜을 패킷에 추가한다.

  • Port : 항구로 생각하면 된다. 한 컴퓨터에서 여러개의 프로그램이 실행되는 경우 각 프로그램마다 Port가 배정된다.

  • 순서 : 여러개로 나누어 보내는 경우 순서를 확인할 수 있다. 순서가 틀리면 해당 데이터부터 다시 요청한다.

  • 전송 제어 : 각 컴퓨터가 통신할 때 서로의 연결상태를 확인하는 3 way handshake 과정을 거친다. (서로 접속 요청 및 수락하는 과정)

UDP (User Datagram Protocol)

IP와 거의 같은 프로토콜이다. 즉 기능이 거의 없다.
단순하고 빠르다.
사용자가 직접 기능을 세팅하여 이용한다.

DNS (Domain Name System)

IP주소는 숫자로 구성되어 기억하기 힘들다.
IP주소가 변경되는 경우 통신에 문제가 생긴다.

-> DNS를 통해 IP주소와 도메인 명을 매칭하고 변환하여 통신한다.

URI/URL/URN

URI는 URL(Locator), URN(Name)를 둘 다 포함하는 개념이다.

URI

  • Uniform: 리소스를 식별하는 통일된 방식
  • Resource: 자원
  • Identifier: 구분자

즉 통일된 리소스 구분방식이다.
URN은 이름을 통해 URL은 자원의 위치를 통해 구분한다.
URN은 방식이 보편화되지 않았다. 그래서 주로 URL을 사용한다.
URL = URI로 봐도 무방하다.

URL 문법

Scheme

프로토콜 : 어떤 방식으로 자원에 접근할것인가에 대한 규칙
ex) http, https, ftp

userinfo

URL에 사용자 정보를 포함하여 인증한다. 거의 사용하지 않는다.

host

호스트명 : 도메인명 또는 IP 주소

Port

접속 포트
일반적으로 생략시 http = 80, https = 443

path

리소스 경로

query

key = value 형태
?로 시작하고 &로 추가한다. ex) ?keyA=valueA&keyB=valueB

웹 브라우저 요청 흐름

HTTP (Hyper Text Transfer Protocol)

거의 모든 형태의 데이터를 HTTP로 주고 받는다.

HTTP 특징

클라이언트 서버 구조

요청하는 클라이언트와 요청을 받는 서버의 구조로 작동한다.

무상태 프로토콜

서로 통신하는 기기간에 상태를 유지하지 않는다.

  • 장점 : 상태를 유지하지 않기 때문에 어떤 서버와 통신하더라도 상관이 없다. 때문에 서버 확장성이 높아진다.
  • 단점 : 매 통신마다 작업에 필요한 데이터를 모두 보내줘야 한다.

비연결성

통신하는 기기간에 연결상태를 유지하지 않는다.

  • 연결을 유지하는 경우

    연결을 유지하는 경우, 지속적으로 서버에서 자원을 소모한다.

연결을 유지하지 않는다면 요청 응답 과정이 끝나면 연결을 끊음으로써 자원을 절약할 수 있다. 하지만 매 연결마다 TCP/IP 연결을 새로 맺어야 한다. 그리고 이 과정에서 자원이 소모된다.

현재는 HTTP 지속 연결로 문제가 해결됐다. 다량의 데이터를 전송하는 경우 TCP/IP 연결 후 모든 데이터를 전송할 때까지만 연결을 유지하는 방식으로 최적화 되었다.

HTTP 메시지

  • Start-Line
    요청 메시지 : HTTP메서드, 요청 대상, HTTP version
    응답 메시지 : HTTP 상태코드(요청 성공, 실패), HTTP version

  • Header
    HTTP 전송에 필요한 모든 부가정보
    ex) 메시지 바디의 내용, 크기, 압축, 인증, 요청 클라이언트 정보 등

  • Body
    실제 전송할 데이터

HTTP 메서드 종류

Get

단순 리소스 조회
서버에 전달하고 싶은 데이터는 query를 통해서 전달한다.

Post

데이터에 대한 처리
메시지 바디를 통해 서버에 데이터를 전달한다.
애매하면 Post로 요청한다.

Put

데이터에 대한 교체
리소스가 없으면 생성하고 있으면 대체한다.
클라이언트가 리소스의 위치를 알고 지정한다는 것이 Post와의차이점이다.

Patch

리소스를 부분적으로 변경한다.

Deete

리소스를 제거한다.

HTTP 메서드 속성

  • 안전(Save Methods)
    리소스가 변하지 않는다.
  • 멱등 (Idempot Methods)
    f(f(x)) = f(x)
    여러번 요청해도 한 번 요청한 것과 같은 결과를 반환한다.
  • 캐시가능(Cacheable Methods)
    응답 결과 리소스를 캐시해서 사용해도 되는가

HTTP 상태코드

  • 1xx (Informational): 요청이 수신되어 처리중
  • 2xx (Successful): 요청 정상 처리
  • 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
  • 4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
  • 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함

Redirection의 종류

  • 영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동한 경우
  • 일시 리다이렉션 - 일시적인 변경
    ex) 주문 후 새로고침시 중복 주문 방지를 위해 주문 결과 화면을 GET 메서드로 리다이렉트
  • 특수 리다이렉션 : 결과 대신 캐시를 사용한다.

HTTP 헤더

HTTP전송에 필요한 모든 부가정보를 포함한다.
ex) 메세지 바디의 내용, 크기, 압축, 인증, 요청클라이언트 등

표현

표현은 요청이나 응답에서 전달하는 HTTP Body의 실제 데이터이다.
표현 헤더표현 데이터를 해석할 수 있는 정보를 제공한다.

  • Content-Type: 표현 데이터의 형식
  • Content-Encoding: 표현 데이터의 압축 방식
  • Content-Language: 표현 데이터의 자연 언어
  • Content-Length: 표현 데이터의 길이

협상

클라이언트가 선호하는 표현 요청

  • Accept: 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어

Quality Values 값을 사용하여 우선순위를 정할 수 있다.
Quality Value: 0~1사이 값, 클수록 높은 우선순위, 생략하면 1

전송 방식

  • 단순 전송 (Content-Length): 기본 전송 방식

  • 압축 전송 (Content-Encoding): 헤더에 압축 방식에 대한 정보가 추가된다.

  • 분할 전송 (Transfer-Encoding)
    ex)

    5
    Hello
    5
    World
    0
    \r\n
  • 범위 전송 (Content-Range)
    ex)

    Content-Range: bytes 1001-2000 / 2000

일반 정보

• From: 유저 에이전트의 이메일 정보
• Referer: 이전 웹 페이지 주소
• User-Agent: 유저 에이전트 애플리케이션 정보
• Server: 요청을 처리하는 오리진 서버의 소프트웨어 정보
• Date: 메시지가 생성된 날짜

특별한 정보

• Host: 요청한 호스트 정보(도메인)
• Location: 페이지 리다이렉션
• Allow: 허용 가능한 HTTP 메서드
• Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

인증

  • Authorization: 클라이언트 인증 정보를 서버에 전달
  • WWW-Authenticate: 리소스 접근시 필요한 인증 방법 정의

쿠키

  • Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답시)
  • Cookie: 클라이언트에 저자된 쿠키를 HTTP요청시 서버로 전달

쿠키를 이용함으로써 모든 요청에 필요한 정보를 각 요청에 담을 필요가 없어진다. 쿠키값을 전달함으로써 요청과 응답에 해당 데이터를 포함하지 않고도 작업을 진행할 수 있다.
ex) 로그인 후 회원 정보 전달

  • 쿠키정보는 항상 서버에 전송된다.
    - 네트워크 트래픽 추가 유발-> 최소한의 정보만 사용한다(세션id, 인증 토큰)
    - 보안에 민감한 데이터는 저장하면 안된다.

캐시

캐시가 없는 경우 같은 요청에서 데이터가 변경되지 않아도 계속 같은 데이터를 다운로드 받아야 한다.

따라서 브라우저는 캐시를 적용하여, 저장소에 캐시 데이터를 저장해두고 사용한다. 캐시 가능 시간동안 네트워크를 사용하지 않고 데이터를 사용하기 때문에 로딩 속도가 빨라진다.

0개의 댓글