
1. HTTP(HyperText Transfer Protocol)란?
▶ 정의
서버와 클라이언트 사이에 데이터를 주고 받기 위한 통신 규약
웹 상에서 네트워크를 통해 서버 사이에 통신할 때 어떠한 형식으로 서로 통신하자고 규정해놓은 "통신 형식", "통신 구조"
서버와 클라이언트가 html,css 등의 컨텐츠를 서로 주고 받으려면 공통으로 약속된 메세지가 필요
바로 그 메세지가 http 이고, http 는 Request와 Response 를 위한 메세지로 구분되어 있음.

* 페이지에서 개발자 도구 - network 탭에 들어가면 웹 브라우져와 서버가 통신하는 것을 확인 할 수 있다!

▶ 특징
1) 요청과 응답 :
http는 기본적으로 요청고 응답의 구조로 되어 있다.
클라이언트가 먼저 http 요청을 서버에 보내면 서버는 요청을 처리한 뒤 결과에 따른 http 응답을 클라이언드에게 보낸다.

2) Stateless : HTTP 개별 통신은 모두 독립적이어서, 과거의 HTTP 통신의 결과(상태)를 보존하지 않음
장점 : 정보를 다 저장할 필요가 없기 때문에 디자인도 쉬워지고, 서버 관리가 용이해짐
단점 : 매 통신마다 사전에 필요한 모든 정보(토큰)를 담아서 요청을 보내야 함
+ access token : 로그인하면 서버가 유효한 사용자라는 토큰을 발행하여 프론트에게 전송,
프론트는 HTTP 서버에 요청시 토큰을 첨부해서 보낸다. 즉, 토큰을 통해 해당 사용자의 로그인 여부를 알 수 있는 것.


→ 이러한 점을 해결하기 위해 쿠키(cookie)나 세션(session)을 사용하여 http요청을 처리할 때 필요한 데이터를 저장.
쿠키 / 세션 / 웹스토리지(세션스토리지 / 로컬스토리지) / 캐쉬 알아보기
엑세스 토큰 & JWT & 로그인 데코레이터 함수 알아보기
2. Request
▶ 구조
1) Start Line : HTTP 메소드 + Request Target + HTTP version
* HTTP 메소드 : 요청이 의도하는 액션을 정의 ex) GET or POST or PUT or DELETE 등
* Request Target : HTTP 요청이 전송되는 목표 주소 ex) /users/login
* HTTP version : 해당 요청의 HTTP 버전 ex) HTTP/1.1
2) Headers : HTTP Request 그 자체에 대한 정보를 {key : value} 형태로 담고 있음
* HOST : 호스트의 url 주소
* User-Agent : 요청을 보내는 클라이언트에 대한 정보
* Accept : 응답 body 데이터 타입
* Connection : 요청이 끝난 뒤 클라이언트와 서버가 계속 네트워크 연결을 유지할 것인가 아니면 끊을 것인가에 대해 알려줌
* Content-type : 요청 body 데이터 타입
* Content-Length : 요청이 보내는 메시지 body의 총 사이즈
3) Body : 요청의 실제 내용으로 전송하는 데이터가 없다면 비어있게 된다.

▶ method
1) GET : 데이터를 서버로부터 요청할 때 주로 사용
2) POST : 데이터 생성, 수정, 삭제 등 데이터 전송 / 항상 body 에 데이터가 담겨있음
3) OPTION : 특정 엔드포인트에서 허용하는 메소드들이 무엇이 있는지 알고자 하는 요청에서 사용
4) PUT : 데이터를 새로 생성할 때 사용 / PUT을 사용하지 않고 POST로 통일해서 사용하는 시스템이 늘고 있음.
5) DELETE : 데이터 삭제 요청
3. Response
▶ 구조
1) Status Line : HTTP version + Status Code + Status Text
* HTTP version : HTTP 버전 ex) HTTP/1.1
* Status Code : 응답 상태를 숫자로 된 코드로 나타내줌 ex) 200
* Status Text : 응답 상태를 간략하게 글로 설명해주는 부분 ex) OK
2) Headers : 응답 그 자체에 대한 정보를 {key : value} 형태로 담고 있음
※ HTTP 응답에는 User-Agent 대신 server 헤더가 사용됨.
3) Body : 요청의 실제 내용으로 전송하는 데이터가 없다면 비어있게 된다.

▶ Status code

1) 성공
* 200 : OK
* 201 : Created
2) 리다이렉션 완료
* 301 : Moved Permanently, 요청을 보낸 엔드포인트 url 주소가 바뀌었다는 것을 나타냄,
요청을 받은 클라이언트는 Location 헤더의 엔드포인트의 새로운 주소에 해당 요청을 다시 보내는 redirection 과정을 수행.
3) 요청오류
* 400 : Bad Request, 요청에 포함된 인풋 값들에 잘못된 값들이 보내졌을 때 사용
* 401: Unauthorized, 해당 요청을 보내는 주체의 확인이 요구되나 확인할 수 없었을 때 보내는 응답
* 403 : Forbidden, 요청을 보내는 주체가 해당 요청에 대한 권한이 없음을 나타냄
* 404 : Not Found, 요청을 보내고자 하는 URI가 존재하지 않을 때
4) 서버오류
* 500 : Internal Server, 내부 서버 오류가 발생함
▣ 출처
생활코딩
책 깔끔한 파이썬 탄탄한 백엔드
https://untitledtblog.tistory.com/47
'Network' 카테고리의 다른 글
[GraphQL] GraphQL (0) | 2021.11.05 |
---|---|
[HTTP] 쿠키 / 세션 / 웹스토리지 / 캐쉬 /프록시 (0) | 2021.10.18 |
[인증] 로그인 / 인증 / 암호화 / bcrypt (0) | 2021.10.13 |
[인가] access token / JWT / 데코레이터 / 토큰 만료 시간 (0) | 2021.09.03 |
[HTTP] RESTful API (0) | 2021.09.02 |