Background:HTTP/ HTTPS
해당 포스팅은 https://dreamhack.io/lecture/roadmaps/1?obj=2를 참고하여 작성하였으며 공부 목적으로 작성하였습니다.
통신 프로토콜
웹 서버에 있는 리소스를 클라이언트가 받기 위해서는 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야 한다.
요청이 들어올 경우 서버는 요청을 이해하고 대응하는 동작을 수행해 클라이언트에게 리소스를 반환한다.
이러한 클라이언트의 행위를 요청(Request), 서버의 행위를 응답(Response)라고 한다.
프로토콜
프로토콜은 규격화된 상호작용에 적용되는 약속을 의미한다.
HTTP
HTTP(Hyper Text Transfer Protocol)이란 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜이다.
HTTP의 기본 메커니즘은 클라이언트가 서버에게 요청하면 서버가 응답하는 것이고 웹 서버는 HTTP서버를 일반적으로 TCP/80, TCP/8080
서비스 포트에 대기시킨다.
Request와 Response의 예시는 다음과 같다.
GET /index.html HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
HTTP/1.1
200 OK
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 61
Connection: Keep-Alive
Content-Type: text/html
<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>
HTTP 메시지
HTTP 메시지에는 클라이언트가 전송하는 HTTP 요청, 그리고 서버에서 반환되는 HTTP 응답이 존재한다. 이들은 모두 HTTP 헤드와 바디로 구성된다는 공통점을 지니고 있다.
HTTP 헤드
HTTP 헤드의 경우 첫 줄은 시작 줄(Start-line), 나머지 줄은 헤더(Header)라고 부른다.
HTTP 바디
헤드의 끝을 나타내는 줄바꿈된 줄 뒤 모든 줄을 바디라고 말한다. 해당 부분에는 클라이언트나 서버가 전송하려는 데이터가 포함되어 있다.

HTTP 요청
HTTP 요청은 서버에게 특정 동작을 요구하는 메시지이다.
HTTP 요청의 시작 줄은 메소드(Method), 요청 URL(Request-URL), HTTP 버전으로 구성되어 있다. 각각은 띄어쓰기로 구분한다.
GET /index.html HTTP/1.1 <- 해당 부분
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
POST /index.html HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Content-Length: 19
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
foo=bar&hello=world
메소드는 URL이 가리키는 리소스를 대상으로, 서버가 수행하길 바라는 동작을 나타낸다. 자주 사용되는 메소드는 GET
과 POST
메소드가 존재한다.
GET
, POST
메소드
GET
메소드는 리소스를 가져오라는 메소드이다. 이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면 새로운 페이지를 렌더링하기 위해 리소스가 필요하게 된다. 이때 브라우저는 GET
요청을 서버에 전송하여 리소스를 받아온다.
POST
메소드는 리소스로 데이터를 보내라는 메소드이다.
요청 URL은 메소드의 대상, HTTP 버전은 클라이언트가 사용하는 HTTP 프로토콜의 버전을 나타낸다.
HTTP 응답
HTTP 응답은 HTTP 요청에 대한 결과를 반환하는 메시지이다. 반환하게 되는 정보는 요청을 수행하였는지, 하지 않았는지, 하지 않았다면 이유는 무엇인지와 같은 다양한 정보가 포함된다.
HTTP 응답의 시작 줄은 HTTP 버전, 상태 코드(Status Code), 처리 사유(Reason Phrase)로 구성된다. HTTP 요청과 동일하게 띄어쓰기로 구분한다.
HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 61
Connection: Keep-Alive
Content-Type: text/html
<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>
HTTP 버전은 서버에서 사용하는 HTTP 프로토콜의 버전을 나타낸다.
상태 코드는 요청에 대한 처리 결과를 세 자릿수로 나타낸다. 크게 5개의 클래스로 구분되는데 세부적인 상태 코드는 다음과 같다.
상태 코드 | 설명 | 대표 예시 |
1xx | 요청을 제대로 받았고, 처리가 진행 중 | |
2xx | 요청이 제대로 처리됨 | 200: 성공 |
3xx | 요청을 처리하려면, 클라이언트가 추가 동작을 취해야 함. | 302: 다른 URL로 갈 것 |
4xx | 클라이언트가 잘못된 요청을 보내어 처리에 실패했습니다. | 400: 요청이 문법에 맞지 않음 403: 클라이언트가 리소스에 요청할 권한이 없음 404: 리소스가 없음 |
5xx | 클라이언트의 요청은 유효하지만, 서버에 에러가 발생하여 처리에 실패했습니다. | 500: 요청을 처리하다가 에러가 발생함 503: 서버가 과부하로 인해 요청을 처리할 수 없음 |
HTTPS
HTTP(HTTP over Secure socket layer)은 HTTP의 보안 상 단점을 보완하기 위해 나온 프로토콜로 TLS(Transport Layer Security) 프로토콜을 도입하여 HTTP의 보안 상 단점을 보완하였다.
TLS는 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화하여 공격자가 중간에서 메시지를 탈취하더라도 해석하는 것을 불가능하게 한다.
HTTP의 경우 응답과 요청이 평문으로 전달되기 때문에 중요 정보의 유출 가능성이 존재한다. 예를 들어, 로그인 시 전송한 POST
요청에는 이용자의 ID 및 비밀번호가 포함되기 때문에 공격자가 중간에서 가로챌 경우 계정이 탈취될 수 있다.
HTTP

HTTPS

오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗
Uploaded by N2T