HTTP

chaerin·2021년 1월 26일
0

HTTP(HyperText Transfer Protocol)

  1. HyperText
    문서와 문서가 링크로 연결되도록 하는 태그로 구성된 언어인 HTML로 만든 웹 페이지를 어떻게 주고 받을 것인가?!

  2. Transfer
    "전송하다" => 보내는 주체와 받는 주체가 존재한다.

  3. Protocol
    협약, 통신 규약. 물리적으로 떨어진 컴퓨터끼리 어떻게 HTML파일을 주고 받을지에 대한 약속

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

웹 서버는 인터넷의 데이터를 저장하고, HTTP 클라이언트가 요청한 데이터를 제공한다.

클라이언트는 서버에게 HTTP 요청을 보내고 서버는 요청된 데이터를 HTTP 응답으로 돌려준다.

가장 흔한 클라이언트는 크롬이나 인터넷 익스플로러와 같은 웹 브라우저이다.

웹 브라우저는 서버에게 HTTP 객체를 요청하고 사용자의 화면에 보여준다.

2가지 특징

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

HTTP 통신의 핵심은 요청과 응답!

보내는 주체는 받는 주체에게 요청을 보내고, 받는 주체는 요청을 보낸 주체에게 응답을 보낸다.

2. Stateless : State(상태) + less(없음)

과거의 통신(요청/응답)에 대한 내용을 기억하지 못한다.(상태를 저장하지 않는다)

따라서 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다.

Request/Response

Request 메시지 구조

1️⃣ Start Line : 요청의 첫번째 줄

  • HTTP Method : 해당 요청이 의도한 액션을 정의하는 부분. GET, POST, DELETE 등이 쓰임
  • Request target : 어디에 요청할 것인지. request가 전송되는 목표 url
  • HTTP Version : HTTP 버전. 주로 1.1 버전이 쓰인다.
ex) GET/login HTTP/1.1
    ==> GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다

2️⃣ Headers : Key: Value 값으로 되어 있다.
Headers: {
☼ 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이다.

ex) 로그인 시에 서버에 보낼 요청의 내용
Body: {
	"user_email": "jun.choi@gmail.com"
	"user_password": "wecode"
}

Response 메시지 구조

1️⃣ Status Line : 응답의 상태 줄. 요청에 대한 처리상태를 클라이언트에게 알려주면서 시작한다.

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

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

2️⃣ Headers : 응답의 추가 정보(메타 데이터)를 담고 있는 부분

3️⃣ Body : 요청의 메소드에 따라 Body가 항상 존재하지 않듯이, 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다. 가장 많이 사용되는 Body의 데이터 타입은 JSON(JavaScript Object Notation) 이다.

HTTP Request Methods

GET : 서버에서 클라이언트로 지정한 리소스를 보내라
PUT : 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라
DELETE : 지정한 리소스를 서버에서 삭제하라
POST : 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라
HEAD : 저장한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라

GET vs POST

🔸 GET은 idempotent하도록 설계되었다. 즉 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아온다. GET은 서버의 데이터나 상태를 변경시키지 않아야 하기 때문에 주로 데이터를 조회할 때 사용된다.

브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 작업을 GET으로 요청한다.

🔸 POST는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답이 항상 다를 수 있다. 그래서 POST는 서버의 상태나 데이터를 변경시킬 때 사용된다.

POST는 생성, 수정, 삭제에 사용할 수 있지만 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드이다.

Response status code 종류

🔸 200:OK

  • 문제 없이 요청에 대한 처리가 백엔드 서버에서 이루어지고 나서 오는 응답코드

🔸 201:Created

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

🔸 400:Bad Request

  • 해당 요청이 잘못되었을 때 보내는 status code
  • 주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드

🔸 401:Unauthorized

  • 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미

🔸 403:Forbidden

  • 유저가 해당 요청에 대한 권한이 없다는 뜻
  • 접근 불가능한 정보에 접근했을 경우

🔸 404:Not Found

  • 요청된 URI가 존재하지 않는다는 의미

🔸 500:Internal Server Error

  • 서버에서 에러가 났을 때의 status code

0개의 댓글