본문 바로가기
서버 & 네트워크

HTTP

by 자바지기 2021. 10. 2.

HTTP는 Hyper Text Transfer Protocol의 줄임말이다. 즉 html문서를 주고받기 위한 프로토콜이라고 생각하면 된다.

 

HTTP는 Request/Response (요청 / 응답) 동작에 기반하여 서비스를 제공한다.

 

HTTP 1.0은 클라이언트에게 HTTP 요청을 받으면 클라이언트와 서버 연결을 통한 요청에 대한 응답이 있고 응답 후 연결을 해제한다. 다음 요청이 들어오면 다시 연결을 한다.

쉽게 말해 요청-연결-응답-연결해제-요청-연결-응답-연결해제..  이런 구조인 것이다. 

연결을 맺고 끊는 작업은 TCP 통신 과정에서 가장 많은 비용이 소비되는 작업이다. 따라서 이는 통신 부하 문제가 발생할 수 있다.

 

따라서 HTTP 1.1에서는 이 문제를 해결하기위해 keep-alive 기능을 지원한다.

keep-alive 기능은 한 번의 연결로 여러 요청을 처리한다.

이는 이미 연결되어있는 TCP 연결을 재사용한다. 

이는 앞서 요청 시마다 연결 작업을 해야 하는 1.0보다 효율적이다.

그런데 연결이 길어지면 그만큼 동시간대 연결이 늘어난다. 연결이 많아지면 서버가 더 이상 연결을 받을 수 없게 된다.

따라서 keep-alive는 timeout을 통해 연결 시간을 설정한다.


HTTP 요청 프로토콜

HTTP 요청 프로토콜의 구조는 다음과 같다.

Request Line
Headers
공백
Body

Reqest Line과 Headers의 예는 다음과 같다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

Method : 클라이언트가 수행하고자 하는 동작을 정의한다.

Path: 가져오려는 리소스의 경로를 나타낸다.

Version of the protocol : HTTP 프로토콜의 버전

 

Request Line은 다음과 같은 구조로 이루어진다.

Method 공백 URI 공백 HTTP 버전

 

Headers : 서버에 대한 추가 정보를 전달한다.


Request LineMethod에 관하여 더 살펴보자.

HTTP Method 요청 방식은 다음과 같다.

메소드 종류 설명 
GET 클라이언트가 서버로부터 문서를 읽어오려 할 때 사용
HEAD 클라이언트가 문서가 아닌 문서에 대한 특정 정보를 원할 경우 사용
POST 클라이언트가 서버에게 어떤 정보를 전송할 때 사용
PUT 클라이언트가 서버에 특정 자원을 업로드할 때 사용
PATCH PUT과 비슷함, 기존 파일에서 변경사항만을 포함
COPY 파일을 다른 위치로 복사하기 위해 사용
MOVE 파일을 다른 위치로 이동하기 위해 사용
DELETE 서버에서 문서를 제거하기 위해 사용
LINK 문서에서 다른 위치로의 링크를 생성하기 위해 사용
UNLINK LINK Method에 의해 생성된 링크를 삭제하기 위해 사용
OPTION 클라이언트가 서버에게 사용 가능한 옵션을 질의하기 위해 사용

 

이 Method들 중 GETPOST에 주목하자

 GET 요청 방식과 POST 요청 방식은 얼핏 보면 비슷하다.

그러나 요청 방식에 차이가 있다.

 

GET 요청 방식은 특정 데이터를 서버로 보낼 때 URI 부분에 포함시켜서 보낸다.

 

POST 요청 방식은 특정 데이터를 서버로 보낼 때 HTTP 요청 프로토콜의 BODY에 포함시켜서 보낸다.

 

이 두 방식은 보안의 차이가 있다. 

예를 들어 GET 방식을 통해 로그인 작업을 요청한다고 하면

나의 ID와 비밀번호가 URI에 그대로 나타나게 된다. 

하지만 POST 방식을 통해 요청을 하면 ID와 비밀번호가 외부에 노출되지 않은 채 BODY에 숨겨서 서버로 전달된다.

따라서 GET 방식은 노출이 되어도 상관없는 데이터를 요청할 때 사용하고

POST 방식은 노출이 되면 안 되는 데이터를 요청할 때 사용한다.

그러나 HTTP의 POST 방식은 결국 데이터가 노출될 수 있다. 따라서 HTTPS를 통해 보안을 강화하자.


HTTP 응답 프로토콜

HTTP 응답 프로토콜의 구조는 다음과 같다.

Status Line
Headers
공백
Body

Status Line과 Headers의 예는 다음과 같다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

Version of the protocol : HTTP 프로토콜의 버전

Status code:  요청의 성공 여부와, 그 이유를 나타내는 상태 코드

Status message: 상태 메시지, 아무 영향력 없음

 

Status Line은 다음과 같은 구조로 이루어진다.

HTTP 버전 공백 상태 코드 공백 상태 문구

 

Headers : 요청 헤더와 비슷함


상태 코드

상태 코드는 다음과 같다.

상태 코드 종류 설명
100~199 단순한 정보
200~299 클라이언트의 요청이 성공
300~399 클라이언트의 요청이 수행되지 않아 다른 URL로 재지정
400~499 클라이언트의 요청이 불완전하여 다른 정보가 필요
500~599 서버의 오류를 만나거나 클라이언트의 요청 수행 불가

이 상태 코드들 중 200, 403, 404, 500, 503에 주목하자

상태 코드 종류 상태 문구 설명
200 OK 클라이언트의 요청이 성공했다는 것을 나타냄
403 Forbidden 클라이언트가 권한이 없는 페이지를 요청했을 때
404 Not Found 클라이언트가 서버에 없는 페이지를 요청했을 때
500 Internal Server Error 서버의 일부가 멈췄거나 설정 오류가 발생
503 Service Unvailable 최대 session 수를 초과했을 때 

200 -> 성공적인 통신

400번대 -> 클라이언트의 잘못

500번대 -> 서버의 잘못 

 

댓글