티스토리 뷰

Web

TIL (2) 웹과 HTTP

나죽나강 2021. 5. 26. 00:52

/* 글 정리 중..!*/

 

Q. 웹이란 무엇인가?

https://wogh8732.tistory.com/10

# 네트워크란?

> 컴퓨터와 컴퓨터를 연결해 주는 망의 개념으로 컴퓨터 네트워크의 의미로 사용된다.

> 다른 사람들과 소통을 할수 있게 도와주는 구조가 바로 네트워크이다.

 

# 인터넷이란?

> 인터넷은 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크이다.

> 네트워크를 구현하여 모든 컴퓨터를 하나의 통신망 안에 연결하고자 하였다.

> 네트워크와 다르지않다. inter-net 이다. 네트워크와 네트워크를 연결해 놓은 네트워크이다. 즉 인터넷이 더 큰 개념이라고 생각하면 된다.

 

# 웹 구성요소

웹 브라우저(클라이언트) / 웹 서버(서버) / HTTP / HTML

WAS / DB / DNS / 브랑우저

 

# Web이란?

> 웹이란 World Wide Web의 줄임말로 WWW라고 부른다.

> 정보의 그물망이라고 보면 되는데 쉽게 말하면 많은 정보가 서로 얽혀있는 무었인가라고 생각하면된다.

> 웹에는 수많은 웹사이트들이 있고 각각의 웹사이트는 웹 페이지라는 것으로 이루어진다.

> 웹 서비스란 인터넷에 연결된 전 세계 컴퓨터의 모든 문서들을 연결하여 언제 어디서든지 정보 검색을 가능하게 해주는 서비스를 말한다.

> 인터넷 서비스 종류

> WWW(웹 서비스) / 이메일전송 서비스(SMTP,POP3,MAP) /

> 파일전송 서비스(FTP) / 원격 로그인 서비스(Telnet)

> 도메인 이름 변환서비스 (DNS) / 인터넷 뉴스서비스(News)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# HTTP

> 웹은 HTTP 프로토콜을 기반으로 동작한다.

> Hyper Text Transfer Protocal의 약자로 하이퍼텍스트 문서를 교환하기 위하여 사용된 통신 규약이다.

> 웹 서버와 클라이언트 간의 통신을 하기 위한 통신 규약이라고 볼 수 있다.

> 통신을 하기 위한 하나의 규칙이라고 생각하면된다.

> 웹 서비스내의 모든 과정들은 이러한 규칙을 지키며 통신을 한다.

> 애플리케이션 레벨(응용 계층)의 프로토콜로 TCP/IP위에서 작동한다.

 

 

> HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해서 해석이 된다.

> HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.

> 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다.

# HTTP 동작 특징

> HTTP는 서버/클라이언트 모델을 따른다.

> 클라이언트에서 요청(request)를 보내면 서버는 요청을 처리해서 응답(response)한다.

> 클라이언트는 URI를 이용해서 서버에 접속하고, 데이터를 요청할 수 있다.

> 웹서버는 보통 표준포트인 80번 포트로 서비스한다.

 

 

# Connectionless & Stateless

> HTTPConnectionless 방식으로 작동한다.

> 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다.

> 기본적으로는 자원 하나에 대해서 하나의 연결을 만든다.

# 장점

> 불특정 다수를 대상으로 하는 서비스에 적합한 방식이다.

> 다수가 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에,

더 많은 유저의 요청을 처리할 수 있다.

# 단점

> 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다.

> 이러한 HTTP의 특징을 stateless라고 하는데, Connectionless로부터

파생되는 특징이라고 할 수 있다.

> 클라이언트의 이전 상태 정보를 알 수 없게 되면, 웹 서비스를 하는데

당장에 문제가 생긴다.

> 클라이언트가 과거에 로그인을 성공하더라도 로그 정보를 유지할 수가 없다. > HTTPcookie를 이용해서 이 문제를 해결하고 있다.

 

 

 

 

 

# HTTP 동작 과정

클라이언트 = 브라우저 / 서버 = 웹 서버 or WAS

 

1. 사용자가 웹 브라우저에 URL 주소 입력

2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청한다.

3. 웹 서버와 TCP 연결 시도.

> 3 way Handshake :

> 클라이언트 - 서버간 신뢰성있는 연결을 하기 위해 3번의 패킷 교환 과정이다.

> 1. SYN : 클라이언트가 서버로 임의로 생성한 시퀀스 번호를 전달한다

> 2. SYN-ACK : 서버는 클라이언트에서 전달한 시퀀스를 +1 시켜서 전달한다

(서버의 패킷을 정상 수신했다는 신호)

> 3. ACK : 클라이언트가 서버에서 전달해준 시퀀스를 +1 시켜서 다시 전달함

(서버-클라 간 패킷 교환이 정상적으로 이루어졌다는 신호)

> 서버 사이드에서는 진행 과정에 따라 LISTEN -> SYN_RCV -> ESTABLISHED 로 변경된다. 종료되면 CLOSED

 

4. 서버에게 GET 명령을 전송한다.

예시)

GET /index.html HTTP/1.1 -> 요청문

Host : www.daum.net -> 헤더

Body : -> (Get 요청이기 때문에 바디가 없다)

 

 

 

 

5. 서버가 클라이언트에게 데이터(웹 문서)를 회신한다.

예시)

HTTP/1.1 200 OK -> 상태문

Date: Thu, 12 Feb 2009 06:29:38 GMT -> 헤더 시작

Server: Apache/1.3.29 (Unix) PHP/4.3.4RC3

X-Powered-By: PHP/4.3.4RC3

Transfer-Encoding: chunked

Content-Type: text/html -> 헤더 끝

<HTML> -> body

<HEAD>

<TITLE> test </TITLE>

</HEAD>

..생략.

 

 

 

6. 서버 - 클라이언트간 연결 해제

> 4 way Handshake :

> 서버와 클라이언트 양쪽다 연결이 종료시킨다는 메시지를 보낸다.

(양쪽 다 각각이므로 4번의 패킷교환이 일어남)

 

Client -> Server : FIN

Server -> Client : ACK

SERVER -> Client : FIN

Client -> Server : ACK

 

7. 웹 브라우저가 웹 문서를 출력한다.

 

# 요청 메시지 구조

요청문

요청메소드

URL

HTTP 버전

헤더

바디

 

# 응답 메시지 구조

상태문

HTTP 버전

상태코드

상태이름

헤더

바디

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# HTTP 버전 (1.0 1.1 2.0)

# HTTP 1.1

> HTTP/1.1만큼의 파워풀한 스펙은 없다,

> 많은 데이터를 처리하기 위한 효율적인 데이터 파이프라이닝과 높은 처리율을 위주로 설계

 

> BUT! 주요 문제점들은 비효율적인 데이터 송/수신에 있다.

> 데이터가 필요할때마다 매번 서버로의 Connection을 요청하고 Response를 기다려서 받아야하는 단점이 존재

> 주고 받는 데이터가 많아지면 많아질 수록 중복되는 HeaderBlocking 때문에 성능상의 단점이 많이 부각

 

 

# HTTP2.0

> HTTP/2.0에서는 데이터를 주고 받는 부분에서의 비효율적인 부분을 개선하기 위해 등장.

> 주요 개념으로는 < Stream, Message, Frame >이 있다.

 

> HTTP/1.1에서는 단방향으로 데이터 송/수신이 이루어졌다면,

> HTTP/2.0에서는 서버에서 데이터를 보낼 수 있는 Server Push 기능이 추가가 되었다.

 

 

# 우선순위 (Prioritize)

> HTTP/2.0 Prioritize

> Server Push에서만 봐도, 프레임의 순서는 매우 중요하다.

> 송수신 데이터에 대해서 우선순위를 지정해서 통신을 하게 된다.

 

 

 

 

 

 

 

# Pipelining, HOL(Head of Line) Blocking 문제 해결

> HTTP/1.1의 경우는 데이터를 얻기 위해서는 이전의 데이터가 다 전송이 되어야 다음 데이터를 전송하는 구조로 되어 있다.

> Keep-Alive 를 사용하면 1.1을 사용해도 데이터를 파이프라이닝을 할 수 있지만, HTTP/2.0 스펙에서는 서버와의 연결이 된 한 Stream에서는 모든 요청이 pipelining되어 처리된다.

 

> 데이터를 송/수신하는데 걸리는 시간이 많이 줄어들게 되며, 이전 데이터를 받는걸 기다리는 대기시간(Head Of Line) 이 없어지게 된다.

 

 

 

 

# Multiplexing

> Multiplexing의 경우는 서버와의 연결을 맺은 뒤, HTTP 메세지를 프레임단위로 쪼개서 송/수신하는 방식

> HTTP/1.1에서 여러 Connection을 맺은 뒤 데이터를 주고 받아야 하는데, pipelining 과 같이 한 채널을 통해 데이터를 쪼개서 보내는 방식을 의미한다

> 조금더 찾아보기

 

https://wogh8732.tistory.com/10

# 네트워크란?

> 컴퓨터와 컴퓨터를 연결해 주는 망의 개념으로 컴퓨터 네트워크의 의미로 사용된다.

> 다른 사람들과 소통을 할수 있게 도와주는 구조가 바로 네트워크이다.

 

# 인터넷이란?

> 인터넷은 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크이다.

> 네트워크를 구현하여 모든 컴퓨터를 하나의 통신망 안에 연결하고자 하였다.

> 네트워크와 다르지않다. inter-net 이다. 네트워크와 네트워크를 연결해 놓은 네트워크이다. 즉 인터넷이 더 큰 개념이라고 생각하면 된다.

 

# 웹 구성요소

웹 브라우저(클라이언트) / 웹 서버(서버) / HTTP / HTML

WAS / DB / DNS / 브랑우저

 

# Web이란?

> 웹이란 World Wide Web의 줄임말로 WWW라고 부른다.

> 정보의 그물망이라고 보면 되는데 쉽게 말하면 많은 정보가 서로 얽혀있는 무었인가라고 생각하면된다.

> 웹에는 수많은 웹사이트들이 있고 각각의 웹사이트는 웹 페이지라는 것으로 이루어진다.

> 웹 서비스란 인터넷에 연결된 전 세계 컴퓨터의 모든 문서들을 연결하여 언제 어디서든지 정보 검색을 가능하게 해주는 서비스를 말한다.

> 인터넷 서비스 종류

> WWW(웹 서비스) / 이메일전송 서비스(SMTP,POP3,MAP) /

> 파일전송 서비스(FTP) / 원격 로그인 서비스(Telnet)

> 도메인 이름 변환서비스 (DNS) / 인터넷 뉴스서비스(News)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# HTTP

> 웹은 HTTP 프로토콜을 기반으로 동작한다.

> Hyper Text Transfer Protocal의 약자로 하이퍼텍스트 문서를 교환하기 위하여 사용된 통신 규약이다.

> 웹 서버와 클라이언트 간의 통신을 하기 위한 통신 규약이라고 볼 수 있다.

> 통신을 하기 위한 하나의 규칙이라고 생각하면된다.

> 웹 서비스내의 모든 과정들은 이러한 규칙을 지키며 통신을 한다.

> 애플리케이션 레벨(응용 계층)의 프로토콜로 TCP/IP위에서 작동한다.

 

 

> HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해서 해석이 된다.

> HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.

> 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다.

# HTTP 동작 특징

> HTTP는 서버/클라이언트 모델을 따른다.

> 클라이언트에서 요청(request)를 보내면 서버는 요청을 처리해서 응답(response)한다.

> 클라이언트는 URI를 이용해서 서버에 접속하고, 데이터를 요청할 수 있다.

> 웹서버는 보통 표준포트인 80번 포트로 서비스한다.

 

 

# Connectionless & Stateless

> HTTPConnectionless 방식으로 작동한다.

> 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다.

> 기본적으로는 자원 하나에 대해서 하나의 연결을 만든다.

# 장점

> 불특정 다수를 대상으로 하는 서비스에 적합한 방식이다.

> 다수가 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에,

더 많은 유저의 요청을 처리할 수 있다.

# 단점

> 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다.

> 이러한 HTTP의 특징을 stateless라고 하는데, Connectionless로부터

파생되는 특징이라고 할 수 있다.

> 클라이언트의 이전 상태 정보를 알 수 없게 되면, 웹 서비스를 하는데

당장에 문제가 생긴다.

> 클라이언트가 과거에 로그인을 성공하더라도 로그 정보를 유지할 수가 없다. > HTTPcookie를 이용해서 이 문제를 해결하고 있다.

 

 

 

 

 

# HTTP 동작 과정

클라이언트 = 브라우저 / 서버 = 웹 서버 or WAS

 

1. 사용자가 웹 브라우저에 URL 주소 입력

2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청한다.

3. 웹 서버와 TCP 연결 시도.

> 3 way Handshake :

> 클라이언트 - 서버간 신뢰성있는 연결을 하기 위해 3번의 패킷 교환 과정이다.

> 1. SYN : 클라이언트가 서버로 임의로 생성한 시퀀스 번호를 전달한다

> 2. SYN-ACK : 서버는 클라이언트에서 전달한 시퀀스를 +1 시켜서 전달한다

(서버의 패킷을 정상 수신했다는 신호)

> 3. ACK : 클라이언트가 서버에서 전달해준 시퀀스를 +1 시켜서 다시 전달함

(서버-클라 간 패킷 교환이 정상적으로 이루어졌다는 신호)

> 서버 사이드에서는 진행 과정에 따라 LISTEN -> SYN_RCV -> ESTABLISHED 로 변경된다. 종료되면 CLOSED

 

4. 서버에게 GET 명령을 전송한다.

예시)

GET /index.html HTTP/1.1 -> 요청문

Host : www.daum.net -> 헤더

Body : -> (Get 요청이기 때문에 바디가 없다)

 

 

 

 

5. 서버가 클라이언트에게 데이터(웹 문서)를 회신한다.

예시)

HTTP/1.1 200 OK -> 상태문

Date: Thu, 12 Feb 2009 06:29:38 GMT -> 헤더 시작

Server: Apache/1.3.29 (Unix) PHP/4.3.4RC3

X-Powered-By: PHP/4.3.4RC3

Transfer-Encoding: chunked

Content-Type: text/html -> 헤더 끝

<HTML> -> body

<HEAD>

<TITLE> test </TITLE>

</HEAD>

..생략.

 

 

 

6. 서버 - 클라이언트간 연결 해제

> 4 way Handshake :

> 서버와 클라이언트 양쪽다 연결이 종료시킨다는 메시지를 보낸다.

(양쪽 다 각각이므로 4번의 패킷교환이 일어남)

 

Client -> Server : FIN

Server -> Client : ACK

SERVER -> Client : FIN

Client -> Server : ACK

 

7. 웹 브라우저가 웹 문서를 출력한다.

 

# 요청 메시지 구조

요청문

요청메소드

URL

HTTP 버전

헤더

바디

 

# 응답 메시지 구조

상태문

HTTP 버전

상태코드

상태이름

헤더

바디

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# HTTP 버전 (1.0 1.1 2.0)

# HTTP 1.1

> HTTP/1.1만큼의 파워풀한 스펙은 없다,

> 많은 데이터를 처리하기 위한 효율적인 데이터 파이프라이닝과 높은 처리율을 위주로 설계

 

> BUT! 주요 문제점들은 비효율적인 데이터 송/수신에 있다.

> 데이터가 필요할때마다 매번 서버로의 Connection을 요청하고 Response를 기다려서 받아야하는 단점이 존재

> 주고 받는 데이터가 많아지면 많아질 수록 중복되는 HeaderBlocking 때문에 성능상의 단점이 많이 부각

 

 

# HTTP2.0

> HTTP/2.0에서는 데이터를 주고 받는 부분에서의 비효율적인 부분을 개선하기 위해 등장.

> 주요 개념으로는 < Stream, Message, Frame >이 있다.

 

> HTTP/1.1에서는 단방향으로 데이터 송/수신이 이루어졌다면,

> HTTP/2.0에서는 서버에서 데이터를 보낼 수 있는 Server Push 기능이 추가가 되었다.

 

 

# 우선순위 (Prioritize)

> HTTP/2.0 Prioritize

> Server Push에서만 봐도, 프레임의 순서는 매우 중요하다.

> 송수신 데이터에 대해서 우선순위를 지정해서 통신을 하게 된다.

 

 

 

 

 

 

 

# Pipelining, HOL(Head of Line) Blocking 문제 해결

> HTTP/1.1의 경우는 데이터를 얻기 위해서는 이전의 데이터가 다 전송이 되어야 다음 데이터를 전송하는 구조로 되어 있다.

> Keep-Alive 를 사용하면 1.1을 사용해도 데이터를 파이프라이닝을 할 수 있지만, HTTP/2.0 스펙에서는 서버와의 연결이 된 한 Stream에서는 모든 요청이 pipelining되어 처리된다.

 

> 데이터를 송/수신하는데 걸리는 시간이 많이 줄어들게 되며, 이전 데이터를 받는걸 기다리는 대기시간(Head Of Line) 이 없어지게 된다.

 

 

 

 

# Multiplexing

> Multiplexing의 경우는 서버와의 연결을 맺은 뒤, HTTP 메세지를 프레임단위로 쪼개서 송/수신하는 방식

> HTTP/1.1에서 여러 Connection을 맺은 뒤 데이터를 주고 받아야 하는데, pipelining 과 같이 한 채널을 통해 데이터를 쪼개서 보내는 방식을 의미한다

> 조금더 찾아보기

 

 

'Web' 카테고리의 다른 글

TIL (3) OSI-7계층  (0) 2021.05.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함