ㄴ 웹의 구성요소들이 서로 대화를 할 때 사용되는 프로토콜
HTTP (Hyper Text Transfer Protocol) 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
(프로토콜은 통신규약, 규칙정도로 생각하자)
HTML, CSS, JS, Image와 같은 파일들을 서로 주고받으려면 서버와 클라이언트가 서로 알아볼 수 있는 약속된 메세지가 필요한데, 그 메세지를 HTTP 라 하고, HTTP는 Request와 Reponse를 위한 메세지로 구분되어 있다.
간단하게 HTTP 특징을 보면
- HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해서 해석된다.
- TCP/IP를 이용하는 응용 프로토콜(application protocol) 이다.
- 무상태성
(상태를 기억하기 위해 Cookie와 Seesion 등장) - 비연결성
(HTTP는 연결상태를 유지하지 않기 때문에 요청/응답 방식으로 동작)
HTTP Request Message 예시
Request Line 영역
GET /1.html HTTP/1.1
ㄴ HTTP Method(어떤방식으로 통신할 지), 파일이름(요청하는 정보), HTTP Version을 나타낸다.
Request Headers 영역
- Host : localhost:8080
ㄴ 인터넷에 연결되어 있는 컴퓨터 한대 한대를 식별하는 것이 host 이다. 웹서버의 주소를 나타낸다.
ㄴ 하나의 웹서버가 여러개의 도멘인을 서비스 할 수 있다. a라는 웹서버가 a.com b.com c.com 이라는 도메인을 호스팅하고 있고 각각의 주소별로 다른 웹서버는 host 에 적혀있는 주소가 무엇이냐에 따라서 다른 정보를 보내줄 수 있다. 이를 가상호스트라 한다.
ㄴ 한대의 컴퓨터에는 여러대의 서버가 설치되어 있을 수 있다. 8080이라는 포트번호에 등록되어 있는 웹서버를 이야기 하는것이다.
- UserAgent
ㄴ 웹브라우저의 다른표현이다. 어떤 웹브라이저인지, 운영체제가 무엇인지, OS 버전등을 확인 할 수 있다.
- Accept-Encoding : gzip, deflate, br
ㄴ 웹브라우저 웹서버가 통신할때 응답하는 데이터 양이 많을때 이를 압축해서 전송하면 웹 브라우저가 압출을 풀어서 처리할 수 있어 네트워크 자원을 아낄 수 있다.
ㄴ 이 때 웹 브라우저는 어떤 압축방식을 지원하는지 표시되는 영역이다.
- If-Modified-Since : Tue, 17 Jul 2021 23:23:26 GMT
ㄴ 요청한 데이터에 대해서 다시 요청을 할때 요청할때마다 다운로드하는것은 비효율적이다.
ㄴ 이 정보를 서버에 전송한다는 것은 내가 갖고 있는 파일은 마지막으로 언제 다운받았는지를 웹서버에게 알려주는것이고 웹 서버는 가지고 있는 파일이랑 어느것이 더 최신인지를 비교해서 전송여부를 결정한다.
Reqeust Message Header 영역
ㄴ Request Line + Request Headers 영역
Reqeust Message Body
ㄴ서버 쪽으로 전송해야되는 정보가 있다면 Reqeust Message Body 에 담는데 Header 와 Body 사이에는 Blank line 을 두어서 구분한다고 약속되어 있다.
HTTP Response Message 예시
Status 영역
- HTTP/1.1 200 OK
ㄴ 첫번째 행에는 Staus 정보가 노출된다.
ㄴ http 버전 정보, 응답 결과에 대한 코드, 응답결과를 사람이 이해하기 쉽도록 설명한 영역
- [참고] 응답 상태코드
2xx 성공
3xx 리다이렉션 ( 내가 처리할건 아닌데 다른데로 잘 넘겼을 때 (다른데로 넘겼을 때))
4xx 요청 오류 ( 너 잘못된거 요청했어, 너가 말한게 틀렸어, 그거 아니야 없거나 잘못됬어 )
5xx 응답 오류 (나한테 무언가 문제가 있어 미안해 서버에 문제있어)
Headers 영역
- Content-type: text/html
ㄴ 웹서버가 응답할 때 이 응답은 어떤 타입인지 웹브라우저에게 전달하고, 웹 브라우저는 타입에 맞게 해석하여 화면에 노출한다.
ㄴ 이미지일 경우에는 Content-type: image/jpeg
- Content-Length: 1434
ㄴ 응답하는 컨텐츠의 전체 크기(사이즈) 를 가르키며 단위는 byte 이다.
- Content-Encoding: gzip
ㄴ 컨텐츠가 어떤 압축방식을 사용하였는지를 나타내며 클라이언트는 해당 방식으로 압출을 풀어서 읽어야한다.
- Last-Modified: Tue, 17 Jul 2021 23:23:26 GMT
ㄴ 해당 정보가 마지막으로 언제 수정되었는지를 표시한다.
Body 영역
ㄴ Blank line 을 두어서 헤더와 구분되며, 응답 데이터를 담는다.
결론
이와 같이 웹 브라우저와 웹 서버가 커뮤니케이션 하는 것을 직접 텍스트로 만들어보면, 웹 브라우저는 요청을 하기전 위와 같은 요청 메세지를 생성하고, 웹 서버는 요청 메시지를 해석해서 응답 메세지를 만들어 준다.
응답 메세지를 받은 웹 브라우저는 응답 메세지를 참조하여 화면에 표시해준다.
조금 쉽게 정리하자면, 웹 브라우저 역할은 사용자가 요청한 정보를 요청 메세지로 만들어 웹 서버에게 대신 물어봐주고 웹 서버는 응답 메세지를 만들어준다. 웹 브라우저는 응답 메세지를 보고 화면에 그려주는 것이다.
Script
Http 는 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
데이터 혹은 파일들을 서로 주고 받으려면 서버와 클라이언트가 서로 알아볼수 있는 약속된 메세지가 필요한데 그 메세지를 HTTP 라 하고, 이는 요청 메세지와 응답메세지로 구분되어 있다.
요청 메세지는
Request Message Header 영역과 Request Message Body 영역으로 구분되어있다.
이 둘은 Blank line을 두어서 구분되고 있다.
Request Message Header 영역은 Request Line 영역 과 Request Header 영역으로 구분되는데,
Request Line 영역에는 Http 메서드, 요청 데이터 정보, http 버전을 표시하고 있고,
Request Header 영역에는 host, user-agent, accept-encoding, if-modified-since 와 같은 정보가 들어있다.
서버쪽으로 전송해야되는 정보가 있다면 Request Message Body 에 담아 전송하면 된다.
다음 응답 메세지는
첫번째 줄에는 Staus 영역이 표시되고 http 버전정보, 응답결과에 대한 코드와 이를 설명한 정보가 들어있다.
그 이후에는 Header 영역인데 content-type, content-length, content-encoding, last-modified 등의 정보로 구성되어 있고 Blank Line 을 기준으로 Body 영역도 존재한다.
참고자료
https://opentutorials.org/course/3385
https://victorydntmd.tistory.com/286
추천도서
http 완벽가이드
'Web' 카테고리의 다른 글
Thread Pool (Java, Tomcat, SpringBoot) (0) | 2024.07.25 |
---|---|
XML & JSON & YAML (0) | 2021.10.30 |
[DB] Connection Pool 정리 (1) | 2021.09.11 |
쿠키(Cookie)와 세션(Session) 정리 (0) | 2021.09.04 |