📕웹과 HTTP
🔎웹
웹 페이지는 base HTML FILE + referenced object로 구성되어 있다.
이때 각 object들은 URL을 통해 addressable 된다.
URL : Uniform Resource Locator의 약자이다.
오브젝트는 HTML file, JPEG, image, Java applet, audio file 등이 있다.
https://jja2han.tistory.com/~~~
위 주소는 제 블로그 주소입니다.
이 URL을 하나하나 뜯어보면
https:// (이 부분이 프로토콜입니다. 나는 https 프로토콜을 쓰고 있다~라는 뜻입니다)
https는 http에 보안이 강화된 버전이라고 생각하시면 됩니다.
그 뒤에 jja2han.tistory.com 부분이 Host가 될 것입니다. 호스트 뒤에 포트번호가 붙는 것은 선택사항입니다.
그리고 호스트 뒤에 /~~~ 와 같은 추가적인 경로가 있다면 웹 서버에서 자원에 대한 경로입니다.
예를 들어 제 블로그에서 컴퓨터망 카테고리로 가고싶다면 path(경로)를
category/내%20 공부/컴퓨터망. 이렇게 지정해 주면 됩니다.
따라서 프로토콜, 호스트, path를 모두 이어붙이면 제 블로그에서 컴퓨터망에 대한 경로로 가는 URL이 되는 것입니다.
https://jja2han.tistory.com/category/내%20 공부/컴퓨터망
🔎HTTP
HTTP(Hyper Text Transfer Protocol)는 Application layer의 여러 프로토콜 중 하나로, 주로 웹에서 많이 사용되는 프로토콜입니다.
HTTP 프로토콜을 통해서 우리는 웹 사이트에서 다양한 활동을 할 수 있습니다.
Client - server model에서 HTTP의 활동
Client는 Server로부터 HTTP를 요청하고, Server는 Host에게 HTTP 응답을 전송합니다.
💡HTTP는 TCP를 사용합니다.
- TCP의 특징은 간략하게 신뢰성 있는 통신을 보장해 줍니다.
- 클라이언트가 TCP 연결을 서버와 맺으면 (port 번호 80) HTTP 메시지가 교환되는 구조입니다.
- 통신이 끝난 후 TCP 연결을 닫아줍니다.
💡HTTP는 "stateless"하다.
- 클라이언트의 상태나 과거 요청했던 정보 등을 신경 쓰지 않고, 순간순간의 요구하는 바를 처리해 줍니다.
- 이러한 특징 덕분에 간단하고 빠르게 프로콜이 동작할 수 있게 됩니다.
🔎HTTP 연결의 2가지 종류
이 종류에 대한 분류는 HTTP 연결 방법에 따라서 분류 가능합니다.
💡Non-persistent HTTP
통신과정은 간략하게 아래와 같습니다.
- TCP connection opened
- TCP connection으로 하나의 오브젝트를 전송함.
- TCP connection closed
즉 한 번의 연결에 1개의 오브젝트를 처리하는 형식입니다. 여러 개의 오브젝트를 다운로드 하는 경우 여러개의 연결이 필요합니다.
효율성이 굉장히 좋지 않습니다.
따라서 이 효율성을 해결하기 위한 다른 방법이 있습니다.
💡Persistent HTTP
통신과정은 간략하게 아래와 같습니다.
- TCP connection opened
- 여러개의 오브젝트가 하나의 tcp connection을 통해서 교환된다.
- TCP connection closed
즉 한번 열고 여러개의 object를 교환할 수 있습니다.
TCP로 처음 연결하는데 RTT(Round Trip Time)이 너무 오래 걸려서 고안된 연결방식입니다.
여기서 RTT를 간략하게 설명하자면
패킷을 전송하고 다시 되돌아올 때 걸리는 queueing delay와 propagation delay를 고려한 시간을 나타냅니다.
위 그림은 Non - persistent HTTP입니다.
host가 server에 패킹을 전송하기 server로부터 다시 받는데 까지 걸리는 시간을 RTT라고 생각하시면 이해하기 쉬울 겁니다.
우선 TCP 연결을 시작하는데도 서버에 요청을 하고 응답을 받아야 하기에, 1 RTT가 소요됩니다.
그다음 이제 연결이 성공적으로 됐으니, 파일을 요청하고 받는데 까지도 1 RTT가 소요됩니다.
그리고 파일을 서버에서 다시 전송하는 데는 file transmission time이 소요됩니다.
non- persistent HTTP
파일을 하나 주고받는데 2 RTT + file transmission time이 소요됩니다.
만약 N개의 파일을 주고받는 데는 N * (2 RTT + file transmission time)가 소요될 것입니다.
만약 Persistent HTTP
TCP 연결 한 번에 여러 개의 객체를 전송할 수 있기에,
N개의 파일을 주고받는 데는 1 RTT + N*(RTT+ file tranmission time)가 소요될 것입니다.
🔎HTTP request/ response
💡request message : 클라이언트가 서버에게 requset 할 때 사용되는 메시지.
💡request line :
- HTTP request 메시지의 가장 첫 번째 줄에 위치한다.
- GET, POST, PUT, DELETE와 같은 메서드 + 요청하는 object + 프로토콜 버전 정보 등으로 이루어져 있다.
💡header line
- 주요 내용들을 담고 있다.
- 서버 호스트 주소, 클라이언트 사용자 정보, 직원어, 형식, 파일 등이 있다.
💡HTTP requset method
request message에서 request line에 적힌 메서드들이다.
크게 4가지가 있다.
GET
- 리소스를 검색하고, 반환받기 위해 사용되는 메서드이다.
- 원하는 정보를 서버에 요청할 때 쓰인다.
POST
- 요청된 자원을 생성하기 위해 사용되는 메서드.
- Post로 정보를 전송하면 URL에 파라미터가 나타나지 않으므로 각종 데이터를 전송하는데 쓰인다.
HEAD
- 서버의 각종 정보를 확인하기 위해 사용되는 메서드
- GET과 동일하지만, response에 Body가 없고, response Code와 Head만 응답받는다.
PUT
- 요청 파일이 있다면, 파일을 대체(덮어쓰기), 파일이 없으면 생성
🔎HTTP response 메시지
서버가 클라이언트에게 보낼 때 사용되는 메시지로, 아래와 같은 구조로 되어있음.
💡status line
- HTTP response 메시지의 첫 번째 줄
- 프로토콜의 정보와 status code 등을 담고 있다.
💡status code
- 200 : Success
- 301 : Moved Permanetly
- 나한테 없고 다른 서버에 있다~
- 거기로 가는 URL을 제공해 주겠다.
- 400 : Bad Request
- 네 말이 뭔 말인지 모르겠다 파악이 안 된다.
- 서버가 요청을 이해를 못 하는 상황
- 505 : HTTP Version Not Supported
- 버전이 안 맞는 것
💡Header Line
- 서버가 제공하는 콘텐츠에 대한 정보를 담고 있다.
- 시각, 서버 정보, 최근 수정 시간, 컨텐츠 길이 등등
data : 컨텐츠에 대한 데이터를 나타내는 영역
😀요약
- HTTP는 웹에서 사용되는 프로토콜이다.
- HTTP는 2가지 특징이 있다.
- TCP를 사용한다.
- TCP를 사용하기에 신뢰성 있는 통신이 보장된다.
- "stateless"하다
- 과거에 어떤 요청을 했건, 그 순간순간의 요청만을 처리하는 것이 주된 목표이다.
- TCP를 사용한다.
- HTTP는 연결 방식에 따라 2가지 방식이 있다.
- Non - Persistent : 하나의 요청에 하나의 파일만 전송 가능
- Persistent : 하나의 요청에 여러 가지 파일이 전송 가능.
- RTT는 HTTP에서 패킷을 전송해서 다시 받을 때까지 소요되는 시간을 의미.
- HTTP 메시지는 클라이언트 -> 서버로 가는 request와
서버 -> 클라이언트로 가는 response 메시지가 있다. - 각 메시지는 중요한 정보를 담고 있다.
'Computer Science > Network' 카테고리의 다른 글
[컴퓨터망] - HTTP1.1/ HTTP2.0 / HTTP 3.0 (0) | 2023.04.11 |
---|---|
[컴퓨터망] - 쿠키와 웹 캐시 (0) | 2023.04.11 |
[컴퓨터망] - Application Layer(네트워크 어플리케이션의 원칙) (0) | 2023.04.08 |
[컴퓨터망] - Protocol stack (0) | 2023.04.08 |
[컴퓨터망] - Circuit Switching vs Packet Switching (0) | 2023.04.07 |