8/06/2023

HTTP

Request & Response

HTTP 통신의 핵심은 요청과 응답이다. 송신하는 주체는 수신하는 주체에게 요청을 보내고 수신하는 주체는 요청을 송신하는 주체에게 응답을 보낸다.

Request Structure

  • Start Line: 요청의 첫번째 줄에 해당하며 세 부분(HTTP 메소드, 요청 대상, HTTP 버전)으로 구성되어 있다(e.g., GET /signin HTTP/1.1 -> GET 메소드로 login 이라는 요청 대상에 HTTP 1.1 버전으로 요청을 보내겠다는 의미).
  • Headers: 요청에 대한 메타 정보를 담고있는 부분으로 데이터는 '키: 값'의 구조를 가진다(e.g., Headers: { Host: www.kt.com, User-Agent: Chrome/115.0.0.0, Content-Type: application/json, Content-Length: 19203, Authorization: "asjdhfkjahsfdkj1029fjkasdhfkjaksjdnfkjahsdkjfasd").
    • Host: 요청을 보내는 대상의 주소로 보내는 웹 브라우저의 기본 주소
    • User-Agent: 요청을 보내는 클라이언트(Chrome, Firefox, ...)에 대한 정보
    • Content-Type: 요청이 보내는 메시지 바디(body)의 타입 정보
    • Content-Length: 바디에 담기는 데이터의 길이
    • Authorization: 인증/인가를 처리하기 위해 토근이 담기는 속성
  • Body: 요청의 실제 내용을 담고 있는 부분으로 주로 POST 메소드를 사용하지만 다른 메소드의 경우 존재하지 않을 수 있다(e.g., Body: { "username": "sunshim66", "password": "123445!@FSa" }).
  • Method
    • GET: 데이터를 서버에서 받아올 때 주로 사용하는 메소드
    • POST: 데이터를 생성/수정 시 주로 사용하는 메소드, 대부분의 요청에 바디가 포함
    • DELETE: 서버에서 삭제 요청을 전송할 때 사용하는 메소드

Response Structure

  • Status Line: 요청에 대한 응답의 상태를 나타내는 부분으로 요청의 Start Line처럼 세 부분(HTTP 버전, 상태 코드, 상태 메시지)으로 구성되어 있다(e.g., HTTP/1.1 200 SUCCESS).
  • Headers: 응답에 대한 메타 정보를 담고있는 부분으로 응답에서만 사용되는 헤더의 정보(e.g., Server, Expires)들이 존재한다.
  • Body: 요청의 바디와 동일하며 요청의 메소드에 따라 바디가 존재하지 않을 수 있다. 가장 많이 사용되는 바디의 데이터 타입은 JSON이다.
  • Status Code
    • 200 OK: 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 반환되는 상태 코드. 데이터 조회에 성공했을 때 주로 사용되지만, 생성, 수정, 그리고 삭제 요청에 대해서 성공했을 때에도 사용 가능
    • 201 Created: 요청으로 보낸 데이터가 잘 생성되었을 때에 반환되는 상태 코드. 대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 전송
    • 400 Bad Request: 요청이 잘못되었을 때 보내는 상태 코드. 주로 요청시 바디에 보내는 내용이 잘못되었을 때 반환
    • 401 Unauthorized: 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미의 상태 코드
    • 403 Forbidden: 유저가 해당 요청에 대한 권한이 없다는 상태 코드. 접근 불가능한 정보에 접근했을 경우 반환
    • 404 Not Found: 요청된 URI 혹은 데이터가 존재하지 않는다는 것을 의미하는 상태 코드
    • 500 Internal Server Error: 요청을 처리하는 중에 서버 문제로 에러가 발생했을 때 반환되는 상태 코드


Stateless

각각의 HTTP 통신(요청/응답)은 독립적이기 때문에 과거의 통신(요청/응답)에 대한 내용을 전혀 알지 못하는 특징을 의미한다. 즉, 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다는 것이다. 따라서, 만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우(e.g., 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 필요하다.

Update: 2023-09-13

댓글 없음:

댓글 쓰기