본문 바로가기
étude/HTTP, HTML

HTTP? HTML?

by mummoo 2022. 10. 11.

HTTP ( Hypertext Transfer Protocol)

hypertext = 웹 페이지에서 다른 페이지로 이동할 수 있게 하는 것

 

app layer protocol 중 open protocol의 한 종류

tcp 기반으로 http 프로토콜이 만들어진다

=> http는 tcp의 특징을 모두 가지고 있다.

 

** http != tcp 

 

tcp

1. 연결 지향적 : client와 server가 서로 연결되도록 한다

2. tcp통신 시 server가 통신할 준비가 되어 있는지, 서로 연결해서 데이터를 주고받을 수 있는지 확인

(3-way handshaking, 4 way handshaking)

3. tcp를 통해 데이터를 보내게 되면 패킷의 순서가 보장됨

 

=> 이러한 tcp의 특징들은 http가 가지고 있음 : tcp를 기반으로 만들어진 것이 http이기 때문

 

HTTP vs socket (둘 다 tcp로 이루어져 있음 => 3 way handshaking, 4 way handshaking 작업을 거침)

 

정해진 규칙을 기반으로 client 요청에 대한 정보를 제공 후 연락을 끊는 것 

= HTTP

vs

규칙 없이 영원히 client와 server 간의 연결을 유지

= socket

 

-> but socket으로 http통신을 할 수 있다 : 각 계층별로 붙는 header들을 정의할 줄 알아야 함

 

WEB과 HTTP

WEB?

- web 은 object로 구성된다

(HTML file일 수도 있고, JPEG image일 수도 있고, Java일 수도, 음성 파일 일수도...)

 

- web page는 기본 HTML 파일로 구성되고, 몇몇의 참조 객체로 구성된다.

=> e.g. 기본 HTML 텍스트와 JPEG 이미지 5가지로 구성된다면 총 6개의 객체를 갖고 있는 것

 

- 기본 HTML 파일은 페이지 내부의 다른 객체를 그 객체의 URL로 참조한다.

- 각 object는 단일 URL로 주소를 표현할 수 있는 하나의 파일이다.

=> URL = host name + path name

     -> host name : '/' 직전까지

     -> path name : host name 끝난 직후부터 끝까지

e.g. 

https://www.cau.ac.kr/index.do 이면 

https://www.cau.ac.kr 까지가 host name

index.do 가 path name

 

 

HTTP?

web의 application layer protocol

 

HTTP는 두 가지 프로그램으로 구현된다 

= client programme + server programme

서로 다른 종단 시스템에서 수행되는 client programme과 server programme은 

서로 HTTP 메시지를 교환하여 통신한다.

이때 HTTP에서는 메시지의 구조, client와 server가 메시지를 요청, 전송하는 방법 에 대해 정의한다.

client / server model

- client는 A를 요청하고, 받고, 그걸 기기의 디스플레이에 띄우기도 한다.

  이때 A는 웹의 구성요소 (객체)

 

HTTP는 통신 규약이고, 이걸 이용해서 HTML의 통신이 이루어진다. 

언어가 있으면 사용 규칙이 있듯이

HTML의 사용 규칙은 HTTP인 셈

 


HTML (Hypertext Markup Language)

= 웹브라우저가 표시할 수 있는 인터넷에서 웹 페이지를 만들고 구성하는 데에 사용되는 표준 마크업 코드

= 웹페이지가 작성되는 표준 언어

 

hypertext

= text를 초월 : 순차적으로 읽어들이는 text와는 다르게 클릭 한 번으로 원하는 곳으로 움직일 수 있음

markup 

= 어딘가에 표시(mark)를 해두다 

= 문서의 구조를 표현 가능하게 함

-> 글 구조를 가독성 있게 표시할 수 있게 함

e.g. 제목은 무엇인지, 본문은 어디까지인지, 뭐가 중요한지, 등등 

language

= 컴퓨터와 소통하는 역할의 언어 

-> C, Java, Python...등이 있지만 여기서 쓰는 건 HTML

 

=> HTML을 통해 컴퓨터에게 명령하여 일을 시킨다.

 

명령하는 방법 

 

HTML은 문서의 구조를 표현한다고 했다.

: 이때 문서의 구조는 tag(태그)를 통해서 구현된다.

tag는 구조 표현 방법에 대한 정보를 담고 있다 

e.g. <a>면 하이퍼 텍스트 기능을, <strong>이면 강조 기능을, <title>이면 제목 기능을 수행

 

태그의 종류

=> 매우 많아요...

 


HTTP 역사

 

HTTP 0.9

- 팀 버너스 리 

- 목적 : 인터넷의 하이퍼텍스트 시스템을 만들기 위한 제안

- > HTML, WWW의 초기버전 완료

- 첫 번째 서버는 1991년 초에 외부에서 가동 시작

초기에는 버전 번호 (0.9)가 존재하지 않았지만 이후에 다른 버전들과 구분하기 위해 0.9라는 버전을 붙임

0.9버전은 단일 라인으로 구성되었으며, path는 GET이 유일

- client - server 요청, 응답 프로토콜

- TCP / IP링크를 통해 실현되는 ASCII 프로토콜

- HTML 전송하도록 설계

-client, server 사이 연결은 요청 후 끊어진다.


- one- line 프로토콜로 정의됨

- 매우 간단하고, GET로만 구성됨

- HTML 파일만 전송 가능

 

원래 이름이 없었다. 추후에 소개된 다른 버젼들과 구별하기 위해 0.9라는 버젼 이름이 부여되었다.

GET method만 지원하고, HTTP 헤더나 status code 등을 모른다.

따라서 HTML만 전송 가능하다.

 

예를 들어서 

Request

GET / hi.html

Response

<HTML> i said hello </HTML>


 

HTTP 1.0 = 성장

- 인터넷의 발전 ( Mosaic, Netscape Navigator 1.0, ...)으로 HTTP 프로토콜 개선에 초점을 맞추기 위해 HTTP-WG 설립

1994 ~ 1995에 전화 접속 엑세스가 제공되기 시작하며 인터넷의 붐이 도래

- 버전 정보(1.0)가 각 요청 사이 내로 전송되기 시작 : GET라인에 붙은 상태로

- 상태 코드라인 또한 응답의 시작 부분에 붙어 전송 : 브라우저가 요청에 대한 성공과 실패를 알 수 있고 그 결과에 대한 동작을 할 수 있게 되었다.

- HTTP 헤더 개념은 요청, 응답 모두를 위해 도입 : 메타데이터 전송을 허용, 프로토콜 극도로 유연하고 확장 가능하게 만들어줌

- 새로운 HTTP 헤더의 도움으로 평이한 HTML 파일 외 다른 문서들을 전송하는 기능이 추가됨

 


- extensibility를 짓는 과정 ( 성장)

- HTTP 동사와 status code를 소개

- HTTP 헤더를 추가

- HTML파일 외의 다른 종류의 파일도 전송 가능하도록 함

 

 

- 우리가 요즈음에 사용하는 HTTP의 대부분의 기능을 제공한다.

- 1996년에 소개되었다.

- 이때부터 HTTP 뒤에 버젼을 나타내는 숫자를 붙였다.

- 응답(response)의 초입에 status code line (상태코드)을 넣는다.

- HTTP 헤더들이 소개되어 HTML 외의 다른 document도 전송할 수 있게 되었다.

- 우리가 요즘에 보는 것과 크게 다르지 않다.

 


1996년 발표된 1.0 버전부터 버전 정보(아래 요청에서 HTTP/1.0)가 전송되기 시작했고, 상태 코드 라인(200 OK)이 응답 시작 부분에 붙어 전송되어 요청에 대한 성공이나 실패 여부를 알 수 있게 됐다. 또 헤더 POST 메소드 도입으로 HTML 파일 외에 이미지, 비디오, 단순 텍스트 등을 전송할 수도 있게 됐다.

 

HTTP/1.0의 단점이라면 1 커넥션에 여러 request를 보낼 수가 없다는 점이었다. 예를 들어 클라이언트가 어떤 HTML 문서를 요청했는데 그 페이지 안에 img 파일이 10개, css 5 파일, js 5 파일 도합 20파일이 있다면 커넥션 20개를 다 따로 맺어서 파일을 받아야 하는 것이다.

 

위에서 적었듯 HTTP는 TCP/IP 기반 통신 프로토콜인데, TCP 통신은 신뢰성(reliability)을 보장하는 연결 지향 프로토콜이다. 연결 지향 프로토콜이 무슨 말이냐면 굉장히 꼼꼼하게 데이터 송수신을 봐준다는 뜻이다. 패킷 로스는 없는지, 내가 도착한 게 잘 갔는지, 잘 받았으면 잘 받았다고 얘기해주는 그런 프로토콜이다.

 

TCP는 연결을 맺을 때 3-way 핸드쉐이킹을 하고 시작을 한다. 3-way 핸드쉐이킹은 TCP 연결 시작할 때, 즉 웹 애플리케이션 데이터 공유 전에 패킷을 공유하는 것이다.

 

HTTP 1.1

- 1995부터 HTTP 1.0구현 동시에 진행, 1997 초에 HTTP 1.1 발표

- HTTP 1.1 표준은 이전 버전에서 발견된 많은 프로토콜 모호성을 해결하고 keep - alive 연결, chunck encoding 전송, Byte 범위 요청, 추가 caching mechanism, 전송 encoding, 요청 pipe lining 과 같은 여러 중요성 성능 최적화 도입

-

추가 보완 특징

- connection 재사용 가능하게 하고, 


- 표준화된 프로토콜

- connection 재사용 기능 추가

- pipelining

- 컨텐츠 negotiation(협상)

- host header

 

- 처음으로 공식적으로 표준화된 HTTP

- 1997년 초에 도입

추가 보완 특징

- connection 재사용, 페이지 안에서 embedding retrieve 가능하게 됨

- request의 pipelining

- host 헤더 추가

- encoding, language 등의 컨텐츠 협상

- cache 조절 메커니즘 추가

 

**how to reuse connection

= HTT0 1.0에서의 이미지를 불러오는 데에 사용되는 extra request

 

 

 

HTTP 2.0

 


- Google에 의해 제안된 성능 개선된 HTTP 형태

- 텍스트보다는 2진법 텍스트 이용

- multiplexed

- 압축(??)이 되어 있음

 

HTTP 3.0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hypertext 기능을 가진 문서를 만드는 언어 

= 구조를 설계 시 사용하는 언어 = 웹(WWW) 페이지의 구조를 정의하는 언어

 

HTML 문서는 단순히 텍스트파일에 불과하고, 

웹브라우저가 HTTP를 통해 해석해서 

화면에 display 가능하게 해줌 

사용자는 view라는 스크린을 통해 접하게 됨

 

- hyperlink 시스템

- web page를 위한 markup 언어

-> markup : mark = tag 로 둘러싸임

 

<구조>

head 영역 + body 영역

문서의 title은 웹페이지의 제목으로 브라우저 탭에 표시됨

 

<HTML 용어>

tag

- open tag (여는 태그)

- close tag (닫는 태그)

=> 여는 태그와 닫는 태그가 있는 건, contents를 감싸기 위함임

닫는 태그가 없는 html 요소 = contents를 감싸지 않아 비어있다는 의미

<tagname attribute="value"> 콘텐츠 </tagname>

 

'étude > HTTP, HTML' 카테고리의 다른 글

telnet을 이용한 메일 패킷 분석  (1) 2022.10.13