본문 바로가기

Web

HTTP

HTTP란?

  • HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다.
  • Web browser와 Web server가 통신할 때 사용하는 통신 규칙

 

 

 

처음 발표한 HTTP는 매우 단순한 통신 규칙이었습니다. 그러나 웹이 폭발적으로 성장하면서 단순한 HTTP의 기능만으로는 성능, 보안, 안정성을 확보하는것에 문제가 생겼습니다. 이러한 문제를 해결하기 위해서 HTTP는 보다 풍부한 기능을 가진 프로토콜로 발전했습니다. 오늘날에는 단지 HTML과 같은 텍스트 파일뿐만 아니라 이미지, 오디오, 동영상과 같은 다양한 멀티미디어 파일을 전송하는 인터넷에서 가장 중요한 통신규칙이됐고, 웹을 넘어서서 인터넷이 동작하는 근간이라고 할 수 있습니다.

 

HTML, CSS, JS, 이미지와같은 파일들이 서버와 클라이언트가 주고 받는 컨텐츠라면 그 컨텐츠를 주고 받기 위해서는 서버와 클라이언트가 서로 알아들을 수 있는 공통의 약속인 메세지가 필요한데 바로 그 메세지를 HTTP라고 하고 HTTP는 크게 요청(request)와 응답(response)를 위한 메세지로 구분되어 있다.

 

 

HTTP Request message

 

Request message는 요청라인(Request Line), 요청헤더(Request Headers) 공백라인(A blank line separates header & body), 메세지 본문(Request Message Body)으로 나뉜다.

  • 요청라인과 요청헤더를 합쳐서 Request Message Header라고 함
  • Request Message Header와 Request Message Body 사이에 blank line을 둬서 구분

 

실제 구축한 서버에서 확인해 보겠습니다.

  • 요청라인(Request Line)은 데이터 처리 방식(HTTP Method)과 요청 페이지, 프로토콜 버전이 포함 됩니다.
    • GET : 웹브라우저와 웹서버가 어떤방식으로 통신할지에 대한 테이터 처리 방식(HTTP Method)이고, 로그인과 같이 데이터를 서버로 전송할 때는 POST 메서드를 사용합니다.
더보기

데이터 처리 방식(HTTP Request Method)

  • HTTP 프로토콜은 Request Method를 사용케한다.
  • 클라이언트는 Request Method들 중 하나를 사용하여 서버에게 요청 메세지를 보낼 수 있다.

 

Request Method

GET 요청라인을 통해서 자원 요청
POST 메세지 본문을 통해서 자원 요청
PUT URL에 자원을 생성
DELETE URL의 자원을 삭제
OPTIONS 응답 가능한 HTTP Method 요청
HEAD HTTP Header 정보만 수신
TRACE Request의 loop back 테스트
CONNECT 터널링의 목적으로 연결요청
  • /index.php : 웹브라우저가 웹서버에게 요청하는 페이지
  • HTTP/1.1 : 웹브라우저가 현재 사용하고 있는 또는 사용할 수 있는 HTTP의 버전이 1.1이라는 의미이고 웹서버는 그 정보를 바탕으로 웹브라우저에게 적당한 방식으로 통신을 함

 

 

  • 요청헤더(Request Headers)는 HTTP 요청에서 사용되지만 메시지의 컨텐츠와는 관련이 없는 HTTP헤더 이고, User-Agent, Accept, Cookie, Referer, Host등 정보가 포함됩니다.
    • Host : 여러가지 Request Headeers 중에 필수정보인 Host는 인터넷에 연결되어있는 컴퓨터 한대 한대를 식별하는 이름이자, 사용자가 요청하는 웹사이트의 웹서버의 주소(도메인)
    • Connection : 클라이언트가 연결을 열린 상태로 유지하려는 것을 나타냄. 만약 전송된 값이 keep-alive면, 연결은 지속되고 끊기지 않으며, 동일한 서버에 대한 후속 요청을 수행할 수 있음
    • Upgrade-Insecure-Requests : 암호화되고 인증된 응답에 대한 클라이언트의 기본 설정과 CSP 지시문을 성공적으로 처리할 수 있음을 나타내는 신호를 서버에 보냄
    • User-Agent : 웹브라우저의 다른 이름으로서, 사용자 웹브라우저 종류 및 버전 정보가 포함된다.
      • Windows Nt 10.0; Win64; x64 : 사용자의 운영체제 정보
      • Chrome/93.0.4577.82 : 사용자의 웹브라우저 종류
      • 경우에따라 크롬이나 파이어복스 등이 아니라 검색엔진 로봇등 웹서버가 원하지 않는 요청에대해서 차단할 수 있는 목적으로 사용
    • Accept : 웹서버로부터 수신되는 데이터중 웹브라우저가 처리할 수 있는 데이터 타입을 의미
    • Refer : 현재 페이지 접속 전에 어느 사이트를 경유했는지 알려주는 도메인 혹은 URL 정보가 포함
    • Accept-Encoding : 웹브라우저가 지원하는 압축방식, 통신시에 데이터량이 많으면 웹서버는 웹브라우저가 지원하는 압축방식으로 데이터를 전송하고 웹브라우저가 압축을 풀어서 처리하며 네트워크 리소스를 절감할 수 있기위함
    • Accept-Language : 클라이언트가 이해할 수있는 언어로 요청
    • Cookie : HTTP 프로토콜 자체가 세션을 유지하지 않은 State-Less(접속상태를 유지 않는) 방식이기 때문에 로그인 인증을 위한 사용자 정보를 기억하려고 만든 인위적인 값
    • If-Modified-Since : 현재 파일의 마지막 다운로드 받은 시점. 웹서버에 같은 파일을 다시 요청할 경우에 현재 가지고 있는 파일이 마지막으로 언제 다운로드받은 파일인지 웹서버에 알려주고 웹서버는 응답할 때, 최신 파일인지 비교해서 현재 최신파일이면 전송해주지 않고, 최신 파일이 아니면 다시 전송해줄 수 있다.

 

 

    • 메세지 본문(Request Message Body)
      • POST 메서드를 사용해 서버쪽으로 전송해야 할 정보가 있다면 그 정보가 실제 내용을 Requset Message Body에 담아서 서버로 전송, body와 header중간에 blank line을 둬서 구분함

 

HTTP Response message

첫번째행에는 status(상태)가 나옴 서버가 응답했을때 잘됐는지, 잘 안됐는지, 잘안됐으면 어떻게 안됐는지 이런것들을 알려주는 자세한 정보

  • version : http의 버전
  • status code : 응답결과
  • phrase : 응답결과를 사람이 이해하기 쉽도록 말로 풀어쓴것

 

응답메세지도 실제 구축한 서버에서 확인해 보겠습니다.

 

  • HTTP/1.1이라는 포맷을 쓰고있다
  • 200 : status code → Successes
  • ok : 성공했다.
  • Content-Type : 웹서버가 응답할때 이 응답은 text이고 html이라는 컴퓨터 언어이다. → 이정보를 보고 웹브라우저는 정보를 html로 해석해서 화면에 표시함.
  • Content-Length : 응답하는 컨텐츠의 전체크기(사이즈) 단위는 바이트
  • Content-Encoding : 콘텐츠를 압축한 방식 웹브라우저는 그 방식으로 압축을 풀어서 읽어야함
  • Last-Modified : 이정보는 마지막으로 언제 수정되었는지 알려줌

 

 

 

정리하자면

 

 

웹브라우저는 요청하기 전에 Request Header와 웹서버에 보내야 할 정보가 있을 때(POST 메서드를 사용할 때)는 Requset Body를 작성하여 HTTP Request message를 만들어서 인터넷을 통해 웹서버에 보냄

 

웹서버는 HTTP Request message를 해석하여 Response Headers의 내용밑에 한칸 띄우고, 실제 html 코드를 합쳐서 HTTP Response message를 만들어서 다시 인터넷을 통해서 요청한 컴퓨터로 보냄

 

응답 받은 웹브라우저는 HTTP Response message를 참조하여 화면에 표시해줌

 

 

위와 같은 절차를 거쳐서 웹브라우저와 웹서버가 통신을 합니다.

 

 

 

 

'Web' 카테고리의 다른 글

WebBrowser  (0) 2021.12.17
Server / Client  (0) 2021.09.13
Web  (0) 2021.09.13