(TIL13) HTTP 구조 및 요소

SooHyung Kim·2020년 4월 8일
0

Today I learned

목록 보기
13/25

HTTP 구조 및 핵심 요소

HTTP(HyperText Transfer Protocol)

  • 하이퍼텍스트(링크를 통해 이동하는) 문서를 교환하기 위해 만들어진 통신규약
    • 웹 상에서 네트워크로 서버끼리 통신할 시 '어떠한 형식으로 통신을 하자!' 라고 규정해 놓은 통신 구조
    • 프론트엔드와 클라이언트, 백엔드와 프론트엔드 서버간의 통신에 사용
  • HTTP는 TCP/IP 기반으로 되어 있음
  • 비트로 구성된 컴퓨터 언어가 오고가는 데 서버끼리 주고 받을 수 있는 규약을 제정하여 그에 맞는 메시지를 주고 받음

HTTP 핵심 요소

HTTP 통신 방식

  • 기본적으로 request / response 구조로 되어 있음

    • 클라이언트가 HTTP request를 서버에 보내면 HTTP response를 보내는 구조
  • 상태를 저장하지 않는 형식을 가지고 있음(Stateless)

    • 각각의 요청/응답은 독립 상태로, 여러 요청/응답끼리 연결되지 않음
      (클라이언트가 요청을 보내고 응답을 받은 후, 다시 요청을 보내면 그 전의 상태를 알지 못함)

    • 만약 여러 요청/응답의 진행 과정, 데이터가 필요할 때는 쿠키, 세션 등을 사용
      (ex. 과거 로그인을 했을 경우 매번 새로 진행해야하기 때문에 과거의 로그인 정보를 첨부하여 쿠키 등에 포함해 request를 진행해야 함)

HTTP Request 구조

  • HTTP request는 크게 3부분으로 구성
    1) Start LIne
    2) Headers
    3) Body

    Start Line

  • HTTP의 첫 라인으로 이 또한 3부분으로 구성되어 있음

    • HTTP Method

      • 해당 request가 의도한 action을 정의

      • GET, POST, PUT, DELETE, OPTIONS 등이 있음

      • 주로 GET, POST가 쓰임

        1) GET

        1. 서버로부터 데이터를 그대로 받아 올 때 주로 사용하는 메소드
        2. 데이터 생성/수정/삭제 없이 받아오기만 할 때 사용
        3. 가장 간단하고 많이 사용되는 HTTP 메소드
        4. 데이터를 받아올 때 사용되기 때문에 request에 body를 안보내는 경우가 많음

        2) POST

        1. 데이터를 생성/수정/삭제 할 때 주로 사용되는 메소드
        2. 데이터를 생성/수정할 때 많이 사용하기 때문에 대부분의 경우 request body를 안보내는 경우가 많음

        3) PUT

        1. POST와 비슷하며 데이터를 생성할 때 사용되는 메소드
        2. 최근에는 POST에 밀려 사용 빈도가 줄어듦

        4) DELETE

        1. 특정 데이터를 서버에서 삭제 요청할 때 쓰이는 메소드
        2. 최근에는 POST에 밀려 사용 빈도가 줄어듦
    • Request target

      • 해당 request가 전송되는 목표 uri
      • ex. /login, /user 등
    • HTTP Version

      • 사용되는 HTTP 버전을 1.0, 1.1, 2.0 등이 있음
      GET / search HTTP / 1.1

    Headers

  • 해당 request에 대한 추가 정보를 담고 있는 부분으로 key:value형태로 되어 있음
    (HOST: google.com -----> key : HOST, value = google.com)

  • headers 역시 general headers, request headers, entity headers로 구성

  • headers에는 아래의 정보가 담겨 있음(주로 메타 정보)

    • Host : 요청이 전송되는 target의 host url (ex. google.com)

    • User-Agent : 요청을 보내는 클라이언트에 대한 정보(ex. 웹브라우저 정보)

    • Accept : 해당 요청이 받을 수 있는 응답(response) 타입

    • Connection : 해당 요청이 끝난 후 클라이언트와 서버가 계속해서 커넥션을 유지할 것인지를 지시하는 부분

    • Content-Type : 해당 요청이 보내는 메세지 body의 타입(ex. application/json)

    • Content-Length : 메세지 body의 길이

      Accept: */*
      Accept-Encoding: gzip, deflate
      Connection: keep-alive
      Content-Type: application/json
      Content-Length: 257
      Host: google.com
      User-Agent: HTTPie/0.9.3

    Body

  • 해당 request의 실제 메세지 / 내용

  • Body가 없는 request도 많음
    (GET request들은 대부분 body가 없는 경우가 많음)

    POST /payment-sync HTTP/1.1
    
    Accept: application/json
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Content-Length: 83
    Content-Type: application/json
    Host: intropython.com
    User-Agent: HTTPie/0.9.3
    
    {
       "imp_uid": "imp_1234567890",
       "merchant_uid": "order_id_8237352",
       "status": "paid"
    }

    HTTP Response

  • Request와 마찬가지로 3부분으로 구성
    1) Status line
    2) Headers
    3) Body

    Status Line

  • Response의 상태를 간략하게 나타내주며 3부분으로 구성
    1) Http version
    2) Status code : 응답 상태를 나타내는 숫자 코드(200, 301, 400 등)

    - 200 OK : 문제가 잘 실행 되었을 때 보내는 코드
    
    - 301 Moved Permanenely : 해당 URI가 다른 주소로 바뀌었을 때 보내는 코드
    
    - 400 Bad Request
     
      - 해당 요청이 잘못된 요청일 때 보내는 코드
      - 주로 요청에 포함된 input 값들이 보내졌을 때 사용되는 코드
      
    - 401 Unauthorized : 로그인, 회원 가입 등 유저가 해당 요청이 필요하다는 것을 나타내는 코드
    
    - 403 Forbidden : 유저가 해당 요청에 대한 권한이 없다는 뜻(유료 컨텐츠 등)
    
    - 404 Not Found : 요청된 uri가 존재하지 않는다는 뜻
    
    - 500 Internal Server Error : 서버에서 에러가 났을 때 사용하는 코드(백엔드 에러)

    3) Status text : 응답 상태를 간략하게 설명해주는 부분(Not Found 등)

    Headers

  • Request의 header와 동일하나, user-agent 대신에 server가 사용

    Body

  • Request와 마찬가지로 데이터를 전송할 필요가 없을 경우 body가 비어있게 됨

profile
Slow and steady win the race

0개의 댓글