HyperText
문서와 문서가 링크로 연결되도록 하는 태그로 구성된 언어인 HTML로 만든 웹 페이지를 어떻게 주고 받을 것인가?!
Transfer
"전송하다" => 보내는 주체와 받는 주체가 존재한다.
Protocol
협약, 통신 규약. 물리적으로 떨어진 컴퓨터끼리 어떻게 HTML파일을 주고 받을지에 대한 약속
🔆 컴퓨터들끼리 HTML 파일을 주고 받을 수 있도록 하는 소통방식 또는 약속
웹 서버는 인터넷의 데이터를 저장하고, HTTP 클라이언트가 요청한 데이터를 제공한다.
클라이언트는 서버에게 HTTP 요청을 보내고 서버는 요청된 데이터를 HTTP 응답으로 돌려준다.
가장 흔한 클라이언트는 크롬이나 인터넷 익스플로러와 같은 웹 브라우저이다.
웹 브라우저는 서버에게 HTTP 객체를 요청하고 사용자의 화면에 보여준다.
1. Request/ Response(요청/응답)
HTTP 통신의 핵심은 요청과 응답!
보내는 주체는 받는 주체에게 요청을 보내고, 받는 주체는 요청을 보낸 주체에게 응답을 보낸다.
2. Stateless : State(상태) + less(없음)
과거의 통신(요청/응답)에 대한 내용을 기억하지 못한다.(상태를 저장하지 않는다)
따라서 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다.
1️⃣ Start Line : 요청의 첫번째 줄
GET
, POST
, DELETE
등이 쓰임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"
}
1️⃣ Status Line : 응답의 상태 줄. 요청에 대한 처리상태를 클라이언트에게 알려주면서 시작한다.
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) 이다.
GET
: 서버에서 클라이언트로 지정한 리소스를 보내라
PUT
: 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라
DELETE
: 지정한 리소스를 서버에서 삭제하라
POST
: 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라
HEAD
: 저장한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라
🔸 GET은 idempotent하도록 설계되었다. 즉 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아온다. GET은 서버의 데이터나 상태를 변경시키지 않아야 하기 때문에 주로 데이터를 조회할 때 사용된다.
브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 작업을 GET으로 요청한다.
🔸 POST는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답이 항상 다를 수 있다. 그래서 POST는 서버의 상태나 데이터를 변경시킬 때 사용된다.
POST는 생성, 수정, 삭제에 사용할 수 있지만 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드이다.
🔸 200:OK
🔸 201:Created
🔸 400:Bad Request
🔸 401:Unauthorized
🔸 403:Forbidden
🔸 404:Not Found
🔸 500:Internal Server Error