HTTP에 대한 정리

HTTP에 대해 정리를 해보았습니다. Request Message, Response Message에 대한 내용을 담고 있습니다.
2021.08.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 HTTP에 대해 정리를 해보았습니다. HTTP에 대한 자세한 내용은 여기를 참고해주세요.

HTTP란?

HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다.

예를 들어서 클라이언트가 서버로 HTML을 요청 즉 Reqeuset를 합니다. 그리고 서버는 클라이언트에 대한 응답 즉 Response를 하게 됩니다. HTTP란 이러한 Request와 Response를 나타냅니다. HTML, CSS, Javascript가 서로 주고받는 컨텐츠면, 이 컨텐츠를 주고받기 위한 서버와 클라이언트가 서로 알아들을 수 있는 약속된 공통적인 메시지가 필요합니다. 이 메시지를 HTTP라고 합니다.

이 HTTP는 크게 Request와 Response 2개로 나뉘게 됩니다.

적당히 텍스트를 넣고 그 아래에 이미지를 넣은 HTML 소스 코드를 만들고 실행해봅시다.

실행하고 나서 개발자 모드로 들어가서 네트워크 탭을 확인해보면 localhost와 이미지가 나오는 것을 볼 수 있습니다.

여기서 localhost를 눌러보면 웹서버와 브라우저가 주고받은 데이터 즉 HTTP 메시지를 볼 수 있습니다.

코드를 보면 이런 식으로 img태그를 이용해서 5.jpg파일을 요청하는데, 이렇게 요청한 것이

네트워크탭에 5.jpg에 해당합니다.

이렇게 네트워크 탭을 통해서 웹브라우저와 웹서버가 통신하는 것을 볼 수 있습니다.

그리고 다시 localhost를 눌러서 Headers탭에 들어가서 아래로 쭉 내려가다 보면 Request Headers가 있는데, 이 Request Headers는 웹 브라우저가 웹 서버에 요청한 데이터를 나타냅니다.

여기서 view source를 클릭해보면 다음과 같이 나오게 되는데, GET 방식으로 요청을 했고, 통신 방법은 HTTP/1.1이다 라고 나타냅니다. 그리고 Host에는 웹 브라우저가 어떤 정보로 접속을 했는지 나타납니다.

그다음 Response Headers쪽을 보면 HTTP/1.1로 통신하겠다 라고 또 명시되어있습니다. 200은 성공적으로 데이터를 찾아와서 보내줬다는 의미입니다.

이외에도 text/html 타입에 charest은 UTF-8이라고 알려주고 있습니다. 사용자가 요청한 정보를 웹서버에게 대신 물어서 텍스트 정보를 만드는데 이 정보를 Header이라고 합니다. 그러면 웹 서버는 자기가 가지고 있는 정보를 보내주면서 응답Header를 만들어주는 기계라고 할 수 있습니다.

그리고 웹브라우저는 응답받은 정보를 화면에 적당히 뿌려주는 역할을 하게 됩니다.

Request Message

먼저 Request Message에 대해서 살펴보면 가장 첫 번째 라인은 Request Line 이라고 하고, 2번째 줄에서 6번째 줄까지는 Request Headers라고 합니다. 그리고 이 Line과 Header를 다 합쳐서 Request Message Header 이라고 합니다.

만약 서버 쪽으로 전송해야 할 정보가 있다면 그것을 Body라고 하는데 이 Body와 Header는 중간에 빈 줄을 둬서 구분한다고 약속되어 있습니다.

이제 Request Header로 다시 돌아가서 하나하나씩 살펴보도록 합시다. 먼저 가장 첫 줄에는 GET이라고 되어있는데 GET은 웹서버로부터 데이터를 가져올 때 사용합니다. 다음 HTTP/1.1은 웹브라우저가 현재 사용하고 있는 HTTP의 버전이 1.1이다 라는 의미입니다.

Host부터는 좀 전에 살펴봤던 Request Header 부분에 해당합니다. Host는 인터넷에 연결되어있는 컴퓨터를 식별하는 녀석입니다. 즉 현재 접속하고 있는 웹사이트의 주소를 의미합니다.

더 내려가 보면 User-Agent 라고 되어있는데 이 녀석은 웹브라우저의 다른 표현입니다. 웹브라우저를 User-Agent라고도 합니다. 그리고 앞에 보면 Windows 라고 되어있는데 현재 제 컴퓨터를 나타내고 있습니다.

Accept Encoding은 웹브라우저와 웹서버가 서로 통신할 때 데이터양이 많으면, 서로 압축을 해서 전송하면 웹브라우저가 압축을 풀어서 처리합니다. 즉 이 웹브라우저는 어떠 어떠한 압축 방식(gzip, deflate, br)을 제공한다는 것을 나타냅니다.

마지막으로 If-Modified_since는 마지막으로 언제 파일을 다운로드 받았는지 알려줍니다. 웹서버는 자기가 가지고 있는 파일이랑 비교해서 어떤 게 최신인지 비교를 하고, 최신이면 전송을 하지 않습니다.

Response Message

HTTP의 Response format을 살펴봅시다!

첫 번째 행은 Status를 나타냅니다. 즉 웹서버가 응답했을 때 잘 됐는지 안됐는지를 나타냅니다. 먼저 version은 HTTP의 version을 의미합니다.

그리고 status code는 응답 결과를 의미합니다 예를 들어 404는 웹 페이지를 찾을 수 없다는 에러 코드인데 이 에러코드를 띄워준다는 의미힙니다.

Phrase는 응답 결과를 사람이 이해하기 쉽도록 말을 풀어쓴 것입니다.

실제로 코드로 살펴보면 HTTP 1.1 포맷을 사용하고 있다는 것을 의미하고, 200은 status code를 의미합니다.

여기서 200의 의미는 Success를 의미합니다.

웹 서버가 응답할 때 text, html이라는 언어이다 라는 것을 나타냅니다. 그럼 웹브라우저는 html 형식으로 화면을 나타내줍니다.

Content-Encoding는 gzip이라고 되어있는데, 이 컨텐츠는 gzip이라는 방식으로 압축했으니 gzip이라는 방식으로 압축을 풀라는 의미입니다.

참고