본문 바로가기

Network

[HTTP] HTTP란? / request & response / method / status code

 

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