본문 바로가기

Programming diary

35. July 4, 2021

HTTP 프로토콜

 

 

HTTP(Hypertext Transfer Protocol)은 웹에서 사용하는 통신 프로토콜. 통신 프로토콜은 간단히 말해 상호 간 데이터를 주고 받는 통신을 위해 정의한 규칙이라고 생각하면 되겠다. 웹에서는 브라우저와 서버 간에 데이터를 주고받기 위한 방식으로 이 HTTP 프로토콜을 사용하고 있다. 조금 더 깊게 들어가면 HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동하며 기본 포트는 80! 요 TCP는 전에 포스팅 해놓은 것이 있으니 참고

 

25. November 20, 2020

TCP와 UDP의 개념과 특징 그리고 차이점 TCP와 UDP는 전송계층에서 사용하는 프로토콜로써, 목적지 장비까지 전송한 패킷을 상위의 특정 응용 프로토콜에게 전달하는 것을 목적으로 한다. 프로토

yunieom.tistory.com

 

HTTP 프로토콜은 html문서, 이미지, 동영상, 오디오, 텍스트 등 어떤 종류의 데이터든지 전송할 수 있도록 설계되어 있다. 그러니 우리가 인터넷 창으로 동영상도 보고, 사진도 보고, 그림도 그리고, 문서도 주고 받고, 심지어는 즐겨찾기 리스트도 저장하여 주고 받을 수 있는 것이란 말이지 ;ㅅ;

 

 

HTTP 프로토콜의 특징

1) Connectionless : 비연결성. 요청을 받은 서버가 응답하면 바로 연결을 끊어버린다. 기본적으로 자원 하나에 대해서 하나의 연결만을 만든다. 인터넷은 불특정 다수가 사용하기 때문에 서버에서 다수의 클라이언트와 연결은 계속해서 유지해야 한다면? 리소스는 끊임없이 생성, 사용되고 결국 리소스가 부족한 상황에 이른다. 그러면? 운 안좋은 클라이언트들은 이용하지 못하는 복불복 사태가 일어남.

  • 장점 : 응답 후 바로 연결을 끊으면 리소스를 줄일 수 있고 그러면 더 많은 클라이언트들과 연결을 할 수 있다. 
  • 단점 : 연결을 끊어버리기 때문에, 당연히 클라이언트의 이전 상태를 기억하지 못한다(이게 밑에 나오는 Stateless). 

2) Stateless: 무상태성. 클라이언트의 이전 상태를 유지하지 않는다. 예를 들어 쇼핑을 하기 위해 로그인을 하고 구매할 물건을 장바구니에 담았더니 로그아웃이 되는 상황같은 거임 그래서 개발자들이 쿠키와 세션을 이용해 필요한 경우 클라이언트의 정보를 저장하고 기억한다. 

 

 

HTTP 요청 & HTTP 응답

HTTP 프로토콜로 데이터를 주고받기 위해서는 위에서 얘기한 규칙대로 요청을 보내고 응답을 받아야 한다. 클라이언트는 요청을 보내는 쪽 웹에서는 브라우저, 서버는 요청을 받아 데이터를 응답하는 컴퓨터 웹에서는 서버 소프트웨어가 되겠다. 

 

HTTP 요청

1) URL (Uniform Resource Locators) : 서버에 자원을 요청하기 위해 입력하는 영문 주소.  

2) 메소드 : URL을 이용해 서버에 특정 데이터를 요청한 뒤 해당 데이터에 특정 동작을 수행하기 위해 사용하는 방법. 즉 해당 URL에 취할 동작의 방법이다. 

  • GET : 존재하는 자원을 부름
  • POST : 새로운 자원을 생성
  • PUT : 존재하는 자원에 대한 변경
  • DELETE : 존재하는 자원을 삭제

HTTP 응답

HTTP는 상태코드로 응답 하는데 크게 성공과 실패로 나뉘겠지만 그외에도 여러가지가 있다. 해당 응답코드를 해석할 수 있어야 개발자들은 오류를 잡을 수 있다.

 

1) 2XX 성공

서버가 요청을 성공적으로 처리했음을 의미한다.

  • 200 : GET 요청에 대한 성공
  • 204 : No Content. 성공했지만 응답 본문에 데이터가 없음
  • 205 : Rest Content. 성공했으나 클라이언트의 화면을 새로고침을 권고
  • 206 : Partial Content. 성공했으나 일부 범위의 데이터만을 반환

2) 3XX 리다이렉션

대부분 클라이언트가 이전 주소로 데이터를 요청해 서버에서는 새 URL로 리다이렉트를 유도하는 경우이다.

  • 301 : Moved Permanently. 요청한 자원이 새 URL로 완전히 이동했음
  • 303 : See Other. 요청한 자원이 임시 주소에 존재

3) 4XX 클라이언트 에러

대부분 클라이언트의 코드가 잘못된 경우. 유효하지 않은 자원을 요청했거나, 요청방법 혹은 권한이 잘못된 경우 발생한다. 

  • 400 : Bad Request. 잘못된 요청
  • 401 : Unauthorized. 요청에 대한 권한 없음. 인증 헤더가 잘못된 경우
  • 403 : Forbidden. 서버에서 해당 자원에 대해 접근을 금지시켜 놓음
  • 404 : 제일 많이 보는 Not Found. 서버 자체는 존재하지만 서버에서 요청한 해당 데이터(자원)를 찾을 수 없음. 주 원인은 페이지가 이동되거나 삭제된 경우
  • 405 : Method Not Allowed. 허용되지 않은 요청 메소드
  • 409 : Conflict. 최신 자원이 아닌 상태에서 업데이트 하는 경우 

4) 5XX 서버 에러

서버에서 오류가 난 경우

  • 501 : Not Implemented. 요청한 동작에 대해 서버가 수행할 수 없음
  • 503 : Service Unavailable. 서비스가 가능하지 않음. 서버가 과부하 또는 유지 보수로 셧다운된 경우

 

마무리

앞의 내용을 토대로 정리하면,

브라우저는 요청으로 URL + 요청 메서드를 보내고

서버는 상태코드 + 응답 Body로 응답한다. 

 

그렇게 사용자가 웹상에서 어떠한 동작을 취할 때마다 바뀐 브라우저를 볼 수 있는 것이다. 한 장면 장면 하나마다 요청과 응답을 반복하니 브라우저가 잠깐 반짝하고 바뀌는 것이겠지요 -

 

 


참고

 

https://joshua1988.github.io/web-development/http-part1/

https://shlee0882.tistory.com/107

https://victorydntmd.tistory.com/286

 

 

'Programming diary' 카테고리의 다른 글

36. July 8, 2021  (0) 2021.07.08
34. March 29, 2021  (0) 2021.03.29
33. February 26, 2021  (0) 2021.02.26
32. February 25, 2021  (0) 2021.02.25
32. February 22, 2021  (0) 2021.02.22