[HTTP]HTTP 기초

박민하·2022년 6월 3일
0

WEB

목록 보기
3/5
post-thumbnail
post-custom-banner

✅ HTTP?

  HTTP(HyperTextTransferProtocol)는 컴퓨터들끼리 HTML파일을 주고받을 수 있도록 하는 소통방식 또는 약속이다.

  • HyperText : 문서와 문서가 링크로 연결되어 있음을 뜻한다.
  • Transfer : html로 만든 웹페이지 문서(파일)를 보낸다.
  • Protocol : 컴퓨터끼리 어떻게 html 파일을 주고 받을지에 대한 소통 방식 또는 약속.

✅ HTTP 두가지 특징

1. Request / Response(요청/응답)

  소통의 핵심은 요청과 응답이다. 인간의 소통방식이 컴퓨터끼리의 소통 방식에도 적용된 것이다. 말이 아닌 메시지의 형식으로 요청하고 응답한다.

2. Stateless(상태 없음)

  HTTP 개별통신은 모두 독립이어서 과거의 HTTP 통신의 결과(상태)를 보존하지 않는다. 매 통신마다 사전에 필요한 모든 정보를 담아서 요청을 보내야만 한다.

  만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 만들어졌다. 예를 들어 데이터 요청 시 토큰에 정보를 담아 서버에 전달하면, 서버는 토큰에 담긴 정보를 보고 유저가 맞는지 판단 후에 응답하게 된다.

✅ HTTP 메시지 구조

1. Request 메시지 구조

  HTTP 요청은 프론트엔드(클라이언트) 에서 백엔드(서버)에 일(데이터 처리)을 시작하게 하기 위해 보내는 메세지다.

1.  Start Line : 요청의 첫번째 줄.

  • HTTP Method : 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰인다.
  • Request target : 해당 request가 전송되는 목표 url이다.
  • HTTP Version : 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전, 2.0 버전이 쓰이고 있다. 어떤 버전이 얼마나, 어느나라에서 많이 쓰이는지는 주기적으로 확인하자.
GET /login HTTP/1.1
# 해석: GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다!

2.  Headers : 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.

  • Key : Value 값으로 되어있다(JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다).
  • Host : 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다.
    • (ex. www.apple.co.kr)
  • User-Agent : 요청을 보내는 클라이언트의 대한 정보다.
    • (ex. chrome, firefox, safari, explorer)
  • Content-Type : 해당 요청이 보내는 메세지 body의 타입이다.
    • (ex. application/json)
  • Content-Length : body 내용의 길이.
  • Authorization : 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다. 토큰이 있어야 stateless한 특징에서 벗어날 수 있다.

3.  Body : 해당 요청의 실제 내용. 주로 Body를 사용하는 메소드는 POST 다.

2. Response 메시지 구조


응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작한다.

1.  Status Line : 응답의 상태 줄.

  • HTTP Version : 요청의 HTTP버전과 동일하다.
  • Status Code : 응답 메세지의 상태 코드다.
  • Status Text : 응답 메세지의 상태를 간략하게 설명해주는 텍스트다.
HTTP/1.1 404 Not Found
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서
# 유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.

HTTP/1.1 200 SUCCESS
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청에 대해서 성공했기 때문에
# 200 상태 메세지를 보낸다.

2.  Headerse : 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.

  • Key : Value 값으로 되어있다(JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다).
  • Host : 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다.
    • (ex. www.apple.co.kr)
  • User-Agent : 요청을 보내는 클라이언트의 대한 정보다.
    • (ex. chrome, firefox, safari, explorer)
  • Content-Type : 해당 요청이 보내는 메세지 body의 타입이다.
    • (ex. application/json)
  • Content-Length : body 내용의 길이.
  • Authorization : 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다.

3.  Body : 해당 요청의 실제 내용. 주로 Body를 사용하는 메소드는 POST

✅ HTTP Request Methods

1. GET

  데이터를 받아오기만 할 때 사용. 웹페이지에 접속해서 필요한 데이터를 불러올 때 사용한다.

2. POST

  데이터를 생성/수정할 때 사용. 부분의 경우 요청에 body가 포함되서 보내진다.

3. DELETE

  서버에 저장된 특정 데이터를 삭제할 때 사용한다.

✔ Request 예시

✅ Status code

1. Success

  • 200 : OK
    가장 자주 보게되는 Status Code. 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드다.
    • GET - 리소스 반환
    • PUT/PATCH - 상태 메세지 또는 리소스 반환
  • 201 : Created
    무언가가 잘 생성되었을 때에(Successfully Created) 오는 Status Code. 대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드다.
    • POST - 상태 메세지 또는 새로 생성된 리소스 반환
  • 204 : No Content
    요청이 성공했으며 제공할 응답메세지가 없을 경우 사용하는 Status Code. 주로 DELETE 메소드의 요청으로 성공적으로 삭제되어서 응답으로 제공할 컨텐츠가 없을 때 사용된다.
    • DELETE - 성공적으로 삭제된 요청의 응답

2. Client Error

  • 400 : Bad Request
    해당 요청이 잘못되었을 때 보내는 Status Code. 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드다.
    ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우
    • ALL - 요청에 잘못된 값들이 포함됨
  • 401 : Unauthorized
    인증을 요청 했으나 사용자가 인증 요건을 충족하지 못한 경우에 나타난다.
    ex) 로그인이 필요한 경우(wish list, 좋아요 기능은 회원이 아니면 요청을 보낼 수 없습니다).
  • 403 : Forbidden
    사용자가 허용되지 않은 컨텐츠로 접근을 시도, 즉 유저가 해당 요청에 대한 권한이 없다는 의미를 나타낸다. 접근 불가능한 정보에 접근했을 경우를 의미한다.
    ex) 비용을 지불한 사용자가 아닌 경우(유료회원만 접근할 수 있는 데이터를 요청).
  • 404 : Not Found
    요청된 URI가 존재하지 않는다(리소스가 없다)는 의미를 나타내는 Status Code.
  • 405 : Method Not Allowed
    허기되지 않은 HTTP Method로 시도된 경우, 즉 요청한 메소드는 서버에서 알고 있지만 제거되어 사용할 수 없는 경우를 나타낸다.
  • 409 : Conflict
    서버의 현재 상태와 요청이 충돌. 서버에 이미있는 파일보다 오래된 파일을 업로드하면 버전 제어 충돌이 발생한 경우를 나타낸다.

3. Server Error

  • 500 : Internal Server Error
    서버에서 에러가 났을 경우다.
profile
backend developer 🐌
post-custom-banner

0개의 댓글