HTTP

소재현·2022년 7월 28일
0

01.통신과 HTTP

HTTP란

  • 컴퓨터들끼리 HTML파일을 주고받을 수 있도록 하는 소통방식 또는 약속입니다.

Hyper Text

  • HTML문서와 문서가 링크로 연결되어 있음을 뜻함

Transfer

  • 사전적 의미로 "전송하다" 라는 의미를 가집니다. 전송에 큰 의미가 있습니다. 전송은 쉬운말로 "물건이나 편지 따위를 보낸다." 라는 의미입니다.

Protocol

  • 프로토콜은 협약, 통신 규약 이라는 의미를 가집니다. 물리적으로 떨어진 컴퓨터 끼리 어떻게 HTML파일(HyperText)을 주고 받을지에 대한 약속입니다.

HTTP의 두가지 특징

stateful

Stateless

HTTP 통신(요청/응답)은 독립적 이기 때문에 과거의 통신(요청/응답)에 대한 내용을 전혀 알지 못 한다
매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 합니다

HTTP 메시지 구조

start line

요청의 첫번째 줄에 해당합니다. 이 시작 줄도 세 부분으로 구성되어있습니다.

  • HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰임
  • Request target: 해당 request가 전송되는 목표 url
  • HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전이 널리 쓰임

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 에 담는다

Body

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

Response 메시지 구조

Status Line

응답의 상태 줄입니다.

  • 응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작합니다. 마치, 편지의 응답에 "응. 잘 지냈어" 라고 안부 인사를 건네는 것과 같습니다. 응답의 Status Line 도 세 부분으로 구성됩니다.
  • HTTP Version: 요청의 HTTP버전과 동일
  • Status Code: 응답 메세지의 상태 코드
  • Status Text: 응답 메세지의 상태를 간략하게 설명해주는 텍스트

Headers

요청의 헤더와 동일합니다. 응답의 추가 정보(메타 데이터)를 담고있는 부분입니다.

  • 다만, 응답에서만 사용되는 헤더의 정보들이 있습니다. (ex. 요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용됩니다.)

Body

  • 요청의 Body와 일반적으로 동일합니다.
    요청의 메소드에 따라 Body가 항상 존재하지 않듯이 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있습니다.
  • 가장 많이 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 입니다.
  • 로그인 요청에 대해 성공했을 때 응답의 내용

HTTP Requset Methods

Get

데이터를 받아오기만 할 때 사용
웹페이지에 접속해서 필요한 데이터를 불러올 때 사용
ex)장바구니에 담은 제품을 조회한다

// (축약된 요청 메세지)
GET /shop/bag HTTP/1.1
Headers: {"HOST": "https://www.apple.com/kr",
    "Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}

// (축약된 응답 메시지) 
HTTP/1.1 200 OK
Body: {
    "message": "SUCCESS",
    "carts": [
        {
          "productId": 10
          "name": "Pro Display XDR - Nano-texture 글래스"
          "price": "₩7,899,000"
          "quantity": 1
       },
       {
         "productId": 20
         "name": "Mac Pro"
         "price": "₩73,376,000"
         "quantity": 2
       } 
    ]
}

Post

데이터를 생성/수정할 때 사용
body에 담는 내용이 핵심
ex)장바구니에 맘에 드는 상품을 담는다

// (축약된 요청 메세지)
POST /shop/bag HTTP/1.1
Headers: {
  "HOST": 
  "https://www.apple.com/kr"
  "Authroization": 
  "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
Body: {
  product: {
    "productId": 30
    "name": "12.9형 iPad Pro Wi-Fi + Cellular 128GB"
    "color": "스페이스 그레이"
    "price": "₩1,499,000"
    "quantity": 1
  }
}

// (축약된 응답 메시지)
HTTP/1.1 201 Created
Body: {
  "message": "SUCCESSFULLY CARTS UPDATED"
}

Delete

서버에 저장된 특정 데이터 삭제할 때 사용
ex)장바구니에서 제품을 삭제한다

// (축약된 요청 메세지)
DELETE /shop/bag HTTP/1.1
Headers: {
  "HOST": "https://www.apple.com/kr"
  "Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
Body: {
  productId: 30
}

// (축약된 응답 메시지)
HTTP/1.1 204 No Content

Status Code

Success

200: OK

  • 가장 자주 보게되는 Status Code
  • 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드

201: Created

  • 무언가가 잘 생성되었을 때에(Successfully Created) 오는 Status Code
  • 대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드

204: No Content

  • 요청이 성공했으며 제공할 응답메세지가 없을 경우 사용하는 Status Code
  • 주로 DELETE 메소드의 요청으로 성공적으로 삭제되어서 응답으로 제공할 컨텐츠가 없을 때 사용

Client Error

400: Bad Request

  • 해당 요청이 잘못되었을 때 보내는 Status Code
  • 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드
    ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우

401: Unauthorized

  • 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미를 나타내는 Status Code
  • ex) wish list, 좋아요 기능은 회원이 아니면 요청을 보낼 수 없습니다.

403: Forbidden

  • 유저가 해당 요청에 대한 권한이 없다는 의미를 나타내는 Status Code
  • 접근 불가능한 정보에 접근했을 경우를 의미.
  • ex) 오직 유료회원만 접근할 수 있는 데이터를 요청 했을 때

404: Not Found

  • 요청된 URI 가 존재하지 않는다는 의미를 나타내는 Status Code

Server Error

500: Internal Server Error

  • 서버에서 에러가 났을 때의 Status Code

0개의 댓글