본문 바로가기
개발

[네트워크] HTTP의 기초 - 1

by 마스터누누 2017. 4. 18.
728x90
반응형

HTTP의 기초 - 1  






웹은 월드 와이드 웹(WWW), 줄여서 WWW로 표시한다


인터넷과 웹은 다른것이다.

인터넷은 미국 국방성에 의해서 개발된 ARPANET이 전신이며,

웹은 팀 버너스리에 의해서 개발 되었다.


웹의 탄생 배경은 팀 버너스리가 다니던 

회사 내부 여러 컴퓨터의 문서 교환이 불편한 관계로 효율적인 방법을 찾다가

공통의 망으로 연결하여 데이터의 교환이 이루어지게 한것이 시초이다.


웹의 3요소는 HTTP, HTML, URL이다

프로토콜은 HTTP,

전송하는 문서는 HTML,

전송하는 문서의 고유한 주소는 URL이다.








여기서 HTTP란 HyperText Transfer Protocol

웹에서 텍스트와 이미지들을 전송하는 통신 규약을 타내낸다.

HTTP를 이용해서 WWW상에서 데이터를 주고받을수 있으며

주로 HTML이나 이미지, 비디오등 전송하는데 쓰인다.


TCP와 UDP를 사용하며 80번 포트를 사용한다.








웹 클라이언트와 서버의 개념이 있는데

서버는 서비스를 제공하는쪽, 클라이언트는 서비스를 요청하는 쪽이다.

클라이언트는 웹브라우저를 가지고 서버로 URL을 요청한다.


정확하게는 HTTP request로 요청한다.

서버는 이 요청을 받아서 어떤 자료를 보내줄지 결정하게 된다.

자료를 보내줄 때 HTTP response로 응답하게 된다.


클라이언트는 주로 웹브라우저인데 꼭 웹브러우저일 필요는 없다.

예를 들어 모바일이나 여러 터미널 프로그램 같은 경우도 클라이언트 일수 있다.


서버는 클라이언트에서 요청한 문서를 제공해준다.

클라이언트와 서버 사이에 프록시라는 것이 위치할 수있다.

(프락치와 비슷한 느낌이다 - 사이에 있다는 뜻)

프록시는 캐시 필터링, 로드밸런싱, 인증, 로깅 등의 다른 일을 처리해줄 수있다.







HTTP의 특징은 간단하다는 것이다.

또한 확장이 가능하며 상태가 없다는 것(stateless)이다.

 상태가 없다는것은 서버에서 클라이언트의 정보를 저장 할수 있는 수단이 없다는것이다.


로그인도 하고 장바구니에 아이템도 담을수있는데 왜 정보를 저장 할수 없는 걸까

그것은 HTTP가 아닌 쿠키를 이용해서 하는 것이기 때문이다.


HTTP는 HTTP/1, HTTP/1.1,  HTTP/2로 발전되었다.

아직까지는 1.1을 많이 사용하고 있다




1
2
3
4
5
echo "<h1>hello<h1>" > index.html
#python 2
python -m SimpleHTTPServer 8000                                                                          
#python 3
python -m http.Server 8000
cs


간단한 실습을 통해 HTTP 서버를 만들어보자

mac 기준으로 터미널에 다음과 같은 명령어를 입력한다.

python 버전에 맞추어 서버를 열어주자






서버가 열릴경우 다음과 같이 잘 열렸다는 로그가 출력된다.

Control + C 로 서버를 빠져 나올 수 있다.






8000번 포트로 접근해서 해당 파일에 대한 request를 주면

서버에서 파일에 대한 response로 HTML파일을 출력할 수 있다.






1
2
3
$ telnet localhost 8000                                                                                     
$ GET / HTTP/1.0
$ Host:localhost
cs

 

다음은 텔넷에 연결해보도록하자

터미널 창에 다음과 같은 명령어를 입력해서 텔넷에 접속 후, 

서버로 request 요청을 보낸다.





위와 같이 초기에 저장해둔 index.html의 결과값이 잘 출력된다.

서버에서 response가 도착한것이다.

HTTP/1.0 200은 정상이라는 뜻이다.

반응형

'개발' 카테고리의 다른 글

[네트워크] HTTP의 기초 - 3  (0) 2017.04.18
[네트워크] HTTP의 기초 - 2  (0) 2017.04.18
[기술의역사] C++ (C 플러스 플러스)  (0) 2017.04.18
[기술의역사] C언어  (0) 2017.04.18
[기술의역사] 리눅스 Linux  (0) 2017.04.18

댓글