HTTP
HyperText Transfer Protocol
- HyperText
HTML (HyperText Markup Language)
Hyper Text = 문서와 문서가 링크로 연결되어 있음을 뜻함
- Trnasfer
'전송하다' '물건이나 편지 따위를 보내다'
HTML로 만든 웹페이지 문서(파일)을 보낸다.
보내는 주체와 받는 주체가 있다는 것이 특징이다.
- Protocol
컴퓨터끼리 어떻게 HTML 파일을 주고 받을지에 대한 소통 방식 또는 약속
➡️ HTTP는 컴퓨터들끼리 HTML파일을 주고받을 수 있도록 하는 소통방식 또는 약속이다.
HTTP의 특징
- request(요청) / response(응답)
- 소통의 핵심은 요청과 응답
- 인간의 소통방식이 컴퓨터끼리의 소통방식에 적용된 것으로 말이 아닌 메세지의 형식으로 요청하고 응답한다.
클라이언트: "서버야, 나는 00이야. 로그인 시켜줄래?"
서버: "로그인 성공했습니다! 서비스를 누리세요"
- Stateless (상태 없음)
- HTTP 개별 통신은 모두 독립적이어서, 과거의 HTTP 통신의 결과(상태)를 보존하지 않는다.
클라이언트: "영상 보여줄래?"
서버: "로그인 해주세요"
클라이언트: "나 아까 로그인했어. 영상 보여줄래?"
서버: "모르겠습니다. 로그인해주세요"
장점: 각각의 통신들의 상태를 저장할 필요가 없기 때문에(정보가 많지 않기 때문에) 서버 디자인이 간단해지는 장점이 있다. 개별 응답에만 요청하면 된다.
단점: 매 통신마다 사전에 필요한 모든 정보를 담아서 요청을 보내야만 한다.
➡️ 따라서, 만일 여러번의 통신(요청/응답)의 진행과정에서 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술이 필요에 의해 만들어졌다.
Request / Response
request 메세지 구조
-
Start Line: 요청의 첫번째 줄
1) HTTP method: 요청이 의도한 액션을 정의 (GET, POST, DELETE)
2) Request target: 요청이 전송되는 목표 url
3) HTTP version: HTTP 버전
ex: GET/login HTTP/1.1 : GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다!
-
Headers: 요청의 추가 데이터(메타 데이터)를 담고 있는 부분으로 {key: value} 값으로 되어있다.
Header : {
Host: www.wecode.co.kr
User-Agent : chrome
Content-Type : application/json
Content-length
..
}
-
Body: 요청의 실제 내용. 주로 POST 메소드가 사용된다.
Body : {
"username" : "wecode"
"email" : wecode@gmail.com
}
HTTP Request methods
- GET
데이터를 받아오기만 할 때, 웹페이지에 접속해서 필요한 데이터를 불러올 때 사용
- POST
데이터를 생성/수정할때 사용. 바디에 담는 내용이 핵심!
- DELETE : 서버에 저장된 특정 데이터를 삭제할 때 사용
response 메세지 구조
- Start Line: 요청에 대한 처리상태를 클라이언트에게 알려줌
ex: HTTP/1.1 404 Not Found
HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서 유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.
status code
success
200:ok
201: created
Error
400: Bad requeset
401: unauthorized 권한없음 누군지 몰라
403: forbidden 권한없음 누군지 알아
404: not found
server error
500 Internal server error 서버 터짐..
- Header: 응답에서만 사용하는 헤더 정보 (user-agent 대신 server 헤더 사용)
- Body: 요청의 Body와 일반적으로 동일. 요청의 메소드에 따라 Body가 항상 존재하지 않듯이 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다. 가장 많이 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 이다.
- HTTP 는 컴퓨터 끼리의 소통을 위한 통신규약이다.
- HTTP 통신은 Request(요청)과 Response(응답)으로 이루어 진다.
- HTTP 통신의 매 요청과 응답은 이전 상태를 알지 못 한다. (Stateless)