HTTP 의 이해

인터넷? 네트워크들의 네트워크 (TCP/IP 약속으로 연결)

컴퓨터에 여러개의 서버가 연결될 수 있으며 각각의 서버들은 포트라는 값으로 구분되어 동작한다.

웹은 80번 포트 이용, EMAIL 25, FTP 21번

 

HTTP : 서로 통신하기 위해서, 서버와 클라이언트가 인터넷상에서 데이터를 주고 받기 위한 프로토콜을 말한다. 

어떤 데이터도 서로 주고 받을 수 있다. 

 

네트워크 통신방법 유상태, 무상태 방법이 있다.

유상태 - 클라이언트와 서버간 지속적인 데이터를 주고받을 수 있다. EX) 채팅, 온라인 게임

HTTP 프로토콜은 Stateless 방식으로 계속 연결을 맺는것이 아니라, 필요한 경우에만 연결을 맺고 보통 빠르게 요청 보내고 응답을 받은 후에 연결을 끊게 된다.

= 계속 연결을 맺고 있지 않아도 된다.

 

하나의 서버가 많은 요청, 응답 처리를 해줄 수 있다. 

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

http는 무상태 프로토콜이라고 한다. 왜? http는 서버에 연결하고 요청해서 응답을 받으면 연결이 바로 끊어지기 떄문이다. 

- 불특정 다수 대상 서비스에 적합하다. (계속 연결된것이 아니기 때문에)

- 연결을 끊어서 이전상태 알 수 없다.

 

정보를 유지하기 위해서 '쿠키' 와 같은 기술이등장하게 되었다.

 

URL : 웹상에서 문서와 다른 자원들(이미지, 동영상) 위치 나타내기 위해서 사용

3부분 으로 나눠진다. 

첫번쨰 : 프로토콜의 종류

두번째 : 자원이 있는 서버의 IP주소 혹은 도메인 주소 , 포트번호

세번쨰 : 자원의 위치 나타낸다. 물리적인 서버를 찾기 위해서 반드시 필요한것이 IP주소나 도메인 주소다.

 

서버를 찾기위해서 포트값이 필요하다.

 

웹이 어떻게 동작하는지 살펴보자.

반드시 클라이언트가 먼저 원하는 서버에 접속한다. 

그리고 다시 클라이언트가 이 서버한테 요청을 해야한다. 

이떄 요청에 따르는 응답결과를 클라이언트에게 응답해준다. 

Stateless, 응답이 끝나고 나면 서버와 클라이언트의 연결은 끊킨다. 

이런 상태로 유지가 된다. 

 

요청되는 데이터들, 요청데이터포맷이 있다.

요청 메시지는 

요청헤더, 빈줄부분, 요청바디  로 나눠진다. 

요청헤더에 처음으로 등장하는것은 

GET 요청 메소드 이다. 

다음 나오는 부분 요청 URI 라고 한다. 

요청 하는 자원의 위치를 명시해주는 부분이다.

마지막으로 나오는 부분이 HTTP 프로토콜의 버전이다.

ex) GET/servlet/query?a=10&b=90 HTTP/1.1 이런식이다.

 

GET 말고도 여러가지가 존재한다. 

참고로 최초의 웹 서버는 GET방식만 지원해줬습니다.

  • GET : 정보를 요청하기 위해서 사용한다. (SELECT)
  • POST : 정보를 밀어넣기 위해서 사용한다. (INSERT)
  • PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)
  • DELETE : 정보를 삭제하기 위해서 사용한다. (DELETE)
  • HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해서 사용한다.
  • OPTIONS : 웹서버가 지원하는 메서드의 종류를 요청한다.
  • TRACE : 클라이언트의 요청을 그대로 반환한다. 예컨데 echo 서비스로 서버 상태를 확인하기 위한 목적으로 주로 사용한다.
  •  

 

요청바디는 아무것도 없다. (GET 방식은 요청바디가 없다.)

바디는 POST나 PUT을 사용하게 됬을때 들어오게 된다. 

 

응답 데이터 포맷에 대해서 살펴본다.

응답 데이터 포맷도 요청 데이터 포맷과 마찬가지로 헤더 부분, 빈줄부분, 바디부분 이렇게 나온다. 

첫줄엔 반드시 응답 HTTP 프로토콜의 버전. 

그다음에는 응답 코드 그리고 응답 메시지 등으로 나올수있다. 

나머지 헤더 부분에는 날짜, 웹 서버 이름과 버전, 콘텐츠 타입, 캐시 제어 방식, 콘텐츠 길이 등의 값이 나온다. 

 

'Web' 카테고리의 다른 글

Web06 :: HTML Layout 태그  (0) 2019.01.03
Web05 :: WAS  (0) 2019.01.03
Web04 :: browser에서의 웹 개발  (0) 2018.12.31
Web03 :: browser의 동작  (0) 2018.12.31
Web02 :: Front-end 와 Back-end  (0) 2018.12.31