본문으로 바로가기

HTTP는 어떤것인가?

category Computer/네트워크(Network) 2019. 2. 8. 00:21

HTTP(Hyper text transfer protocol)


  • HyperText
    • 링크가 있는 텍스트
  • Text 기반 프로토콜
  • 웹 서버와 클라이언트(PC,스마트폰) 사이에서 데이터를 주고 받기 위해 사용하는 통신 방식
  • TCP/IP 프로토콜 상에서 동작
    • 웹을 이용하려면 웹 서버와 클라이언트 사이에 TCP/IP 네트워크 프로토콜이 연결 가능해야 하며 TCP/IP 동작에 필수적인 IP 주소를 각각 가져야 한다.
  • 즉 HTTP는 TCP/IP 프로토콜 상에서 텍스트 형태의 메시지를 웹 서버와 클라이언트 사이에서 서로 주고받는 방식으로 동작
  • Connectless & Stateless
    • 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다. 기본적으로는 자원 하나에 대해서 하나의 연결을 만든다.
      • 장점 : 불특정 다수를 대상으로 하는 서비스에 적합한 방식이다. 수십만명이 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에, 더 많은 유저의 요청을 처리할 수 있다.
      • 단점 : 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다. 이러한 HTTP의 특징을 stateless라고 하는데, Connectless로 부터 파생되는 특징이라고 할 수 있다. 클라이언트의 이전 상태 정보를 알 수 없게 되면, 웹 서비스를 하는데 당장에 문제가 생긴다. 예컨데, 클라이언트가 과거에 로그인을 성공하더라도 로그 정보를 유지할 수가 없다. HTTP는 cookie를 이용해서 이 문제를 해결하고 있다.

URI 와 URL
  • URI(Uniform Resource Identifier)는 인터넷에 있는 자원을 나타내는 유일한 주소
    • 자원을 식별할 수 있는 문자열
  • URL(Uniform Resource Locator)는 네트워크 상에서 자원이 어디 있는지 알려주기 위한 규약 

URI > URL,URN 
예) http://www.google.co.kr/search?q=uri 주소가 있다고 가정!!
https프로토콜을 가지고있고 호스트이름을 가지고있다. 하지만 그 뒤에 /search?q=uri와 같은 문자열이 붙은걸 알 수 있는데 이 아이는 query string인 q의 값에 따라 여러가지 결과값을 가져올 수 있다. 위 주소에서 URL은 https://www.google.co.kr/search까지이고, 내가 원하는 정보를 얻기위해서는 q=uri라는 식별자가 필요하므로, https://www.google.co.kr/search?q=uri 이 주소는 URI이지만 URL은 아니다.

요청 메시지
  • 메소드(method)
    • OPTIONS 
      • 서버에서 사용 가능한 기능을 물어봄 , 클라이언트가 서버에게 넌 어떤 기능을 제공하니
    • GET
      • 서버로 부터 웹 문서 요청,파라미터가 보임
      • Request-URI에서 지정한 정보(웹문서)를 response 메시지의 바디(body) 부분에 넣어 전달해 달라고 서버에 요청한다.
      • Request-URI가 웹문서가 아닌 실행프로그램을 가리키는 경우도 있는데 이때는 이 실행프로그램이 실행된 결과가 response 메시지의 body에 넣어져  전달
    • HEAD
      • 서버로 부터 정보 요청(메시지 바디 없음) , http는 헤더와 바디로 구성되어 있는데 헤더만 보겠다.
    • POST
      • 서버로 부터 웹 문서 요청, 파라미터가 보이지 않는다.
      • 클라이언트에서 웹 서버에 내용을 쓰고자(write)할때 사용. 쓰려는 내용은 메시지의 바디 부분에 들어간다.
      • 예) 웹서버의 게시판에 글을 올릴때
    • PUT
      • 정보 내보내기(보안상 문제로 잘 사용하지 않음)
    • DELETE
      • 정보 삭제하기(보안상 문제로 잘 사용하지 않음)
    • TRACE
      • 클라이언트에게 에코,중간 서버에 의해 변경되거나 추가된 부분을 알 수 있음

응답 메시지
  • 응답 코드
    • 1xx : Informational
      • 임시적인 응답을 의미
      • 클라이언트에게 현재까지 요청은 처리되었으니 계속 진행하라는 의미
      • protocol이 변화될때 많이 사용한다.
    • 2xx : 성공(Success)
      • 클라이언트의 요청이 서버에서 성공적으로 해독되고 처리되었다는 의미
    • 3xx : 추가 액션 있음(Redirection)
      • 완전한 처리를 위해서는 추가적인 동작을 필요로 하는 경우이다.
      • 주로 서버의 주소 또는 요청한 URI 주소(즉 웹문서)가 다른 위치로 이동되었으니 그 주소로 다시 시도 해보라는 의미
    • 4xx : 클라이언트 오류(Client Error)
      • 클라이언트가 보내온 메시지 내용 자체가 잘못되었거나(문법에 맞지 않는 경우 등),
      • 해당 파일이 서버에 없거나 서버의 금지된 디렉토리에 접근 등 서버에서 정상 처리해줄수 없을 때 발생
    • 5xx : 서버 오류(Server Error)
      • 클라이언트가 보내온 메세지 내용은 이상이 없으나 서버 쪽 사정에 의해 메시지 처리에 문제가 발생한 경우
      • 503 서버가 공격당하고 있거나, 용량이 부족할때 주로 나타남

HTTP 동작과정


전체 패킷 구성은 HTTP 메시지 앞에  TCP 헤더가 붙고 그 앞에 IP 헤더가 붙는다.


  • PC에서 웹 서버에 접속하는 경우라면 TCP 헤더의 목적지 포트번호는 80번, 소스 포트번호는 PC의 포트번호,
  • IP헤더의 목적지 IP 주소는 웹서버의 주소, 소스 iP 주소는 PC 자신의 IP 주소가 들어간다.

1.Request 메시지 전송
  웹 브라우저 주소창에서 http://www.xxxx.ac.kr/student/studentname.html 입력
  -> DNS로 www.xxxx.ac.kr의 IP 주소를 얻은 후 이 서버와 TCP/IP 연결 설정 시작

 이때 IP 헤더의 목적지는 IP 주소는 200.20.2.2 , TCP 헤더의 목적지 포트번호 = 80
 (포트번호 명시시는 (http://www.xxxx.ac.kr:8080) 그 값 (8080)이 들어감)

 TCP 헤더 다음에 HTTP request 메시지가 들어간다. Request 메시지 시작라인 (Request-Line)의 method에는 GET, Request-URI에는 /student/studentname.html,헤더의 Host:에 www.xxxx.ac.kr 이 들어간다.


2.response 메시지 응답
 -> response 메시지 시작라인(Status-Line)에는 HTTP-Version(1.1), request에 대한 처리 상태를 알려주는 status code(예: 200), Reason-Phrase 가 들어간다.


3.연결 종료
  • 서버는 해당 자원(웹 문서)의 전송을 마치면 TCP 연결을 종료
  • HTTP는 클라이언트와 서버사이의 연결을 필요한 내용이 전송되면 바로 종료
    • 양단간의 연결 상태가 지속적으로 유지되지 않는 통신 방식을 사용
    • 그 이유는 하나의 클라이언트와 계속 여러 개의 상태를 유지 할 경우 서버의 부하가 커지므로 이를 피하기 위해서이다.
    • 그러나 필요한 경우 클라이언트에서 request 메시지 헤더에 연결 상태 유지를 요청하는 내용을 넣을 수 있다.


HTTP Mesage Format


CRLF(줄바꿈 제어문자)는 messaegheader와 message body를 구분해주기 위해 있음
*header는 헤더가 여러개 올수 있다는 의미
: http에는 많은 수의 헤더가 있고 반드시 있어야 할 필수헤더와 생략 할수 있는 옵션 헤더가 있다.
: HTTP 1.1 버전에서는 Host: 헤더만 필수



  • 시작라인은 request 메시지인 경우 Request-Line이고 , response 메시지인 경우에는 상태코드가 들어있는 Status-Line 이다.
    • HTTP request Request-line 구성
      • Request-Line = Method SP Request-URI SP HTTP-Version CRLF
        • 각각의 파라미터들은 SP(Space)에 의해 구분
        • Method는 목적지주소인 Request-URI에 대해 어떤 동작을 할 것인지를 지정
    • HTTP response Status-line  구성
      • Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
        • Status-Code는 서버가 request 메시지를 처리한 결과를 알려주는 세자리 정수로 된 처리결과 번호
        • Reason-Phrase는 Status-Code에 대한 간단한 설명문 ( 예 : OK )
        • Reason-Phrase는 사용자에게 Status-Code 정보를 글로써 알리기 위한것
  • 헤더 부분은 한줄씩 "field 이름 : 값"이 들어간다.




HTTP Request Header

  • Host 
    • 연결하려는 웹서버의 주소(반드시 포함되어야 한다)
    • 일반적으로 HTTP URL
  • User-Agent
    • Mozilla/5.0 (Windows NT 6.1).. Chrome/62.0..
    • HTTP를 요청한 User Agent 정보
    • Chrome을 사용하여 웹 서버에 요청했음
    • 통계용으로 사용
  • Connection : Keep-alive \r\n
    • HTTP 1.0
      • stateless 접속 상태 관리를 안했음
      • 접속이 설정된 후에 HTTP Request와 Response 메시지가 교환되고, 다음 Request와 Response는 새로운 접속을 통해  수행하였다(multiple connection)
      • 서버가 지속적으로 접속을 유지하기를 원한다면 Response 헤더에다가 "Connection:keep-alive"를 붙여서 보냄
    • HTTP 1.1
      • 기본적으로 하나의 접속에 여러 HTTP Request와 Response 메시지를 교환함(persistent connection)
      • keep-alive 는 persistent connection 의미
  • Upgrade-insecure-Requests: 1 \r\n
    • 클라이언트가 서버에게 Secure 버전을 지원해달라고 요청
    • 서버는 안전한 버전으로 redirect할수 있음
    • IE는 지원하지 않음. 크롬 지원
  • Accept-Encoding: gzip,deflate \r\n
    • 브라우저에서 인식 할 수 있는 코딩 방식을 알려준다
    • Accept-Encoding: gzip
      • 웹 브라우저는 gzip으로 압축된 문서를 인식 할 수 있다. ---> gzip은 UNIX/LINUX에서 사용하는 압축방식
    • content codings
      • 압축하거나 정보 손실없이 변환할 때 적용
      • gzip: RFC 1952
      • deflate : RFC 1951
      • identity : 디폴트 , 변환 없음
  • Accept : text/html, application/xhtml+xml,application/xml,q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
    • 응답 시에 허용 가능한 미디어 타입을 명시함
    • 미디어 타입/서브 타입
    • */* => 모든 미디어 타입
    • 타입/* => 미디어 타입의 모든 서브 타입
    • text/html => text타입에 대해서는 html을 지원할꺼다.
    • html - HyperText Markup Language
    • xhtml - eXtensible HyperText Markup Language
      • xml을 따르면서 HTML과도 호환
    • xml - eXtensible Markup Language
    • apng - Animated Portable Netwok Graphics
      • PNG 파일과 호환되면서 GIF 같은 animation 구현
    • q - Quality factor
      • 사용자 또는 User Agent가 미디어 레인지에 대한 상대적인 중요도 0.9 면 90퍼 정도 신뢰성을 가지고 지원할수 있다는 의미
      • 디폴드 값은 1
      • 0과 1사이 ( 0은 'not acceptable"을 의미)
  • Accept-Language:ko-KR,ko;q=0.9,en-US;q=0.8 \r\n
    • 브라우저에서 인식 할 수 있는 언어를 알려준다.
    • ko-KR은 선호도 '1'을 의미
    • 영어도 수용 가능
  • Cookie: _ga=GA1.3xxxx.xxxxx\r\n
    • HTTP는 상태정보가 없다.(stateless)
    • 따라서 서버는 클라이언트와의 세션을 관리할 필요가 있으며 서버로부터 발급받은 쿠키 정보를 다시 전송할때 사용
    • 쿠키 변수명 = 쿠키 값
    • 서버가 Set-Cooke 헤더에 전송되는값

HTTP Response 헤더

  • Cache-Control : private \r\n
    • 캐쉬를 어떻게 할 것인가에 대한 방향 제시
    • 일반적으로 서버가 경과시간 등을 명시하지만 서버 또는 클라이언트가 캐쉬에 대한 명확한 지침을 정할 필요가 있음
    • private - 캐쉬를 공유하지 않음
    • request시에도 캐쉬에 대한 지침 가능
  • Content-Length: 1008 \r\n
    • 메시지 바디의 길이
    • 단위 : octet
  • Content-Type: text/html; Charset=utf-8 \r\n
    • 메시지 바디부분의 데이터 type을 표시함
    • Content-Type: text/html
      • 메시지 바디 내용이 html 형식이라는 뜻
  • X-Powered-By: ASP.NET \r\n
    • "X-"로 시작하는 헤더는 표준은 아니지만 사실상 표준(de-factostandard)
    • 웹을 지원하는 기술
  • Set-Cookie
    • 클라이언트에서 쿠키를 보내면 서버에서 응답을 해서 관련된 정보를 히스토리로 관리하는것
  • Server
    • 현재의 web server 소프트웨어 이름 및 버전을 나타냄 
  • Location
    • 서버의 응답 즉, Status Line의 응답이 301.302 일경우 니가 필요한 컨텐츠는 다른곳에 있다는 의미이고
    • 그러니 니가 가야할곳은 Location을 통해 지정해야함.

HTTP 1.x와 HTTP 2.0 차이점


  • HTTP 1.x
    • 지금까지 가장 많이 사용. HTTP는 웹상에서 클라이언트와 웹 서버간 통신을 위한 프로토콜 웹 서버간 통신을 위한 프로토콜 중 하나입니다. HTTP1.1은 기본적으로 연결당 하나의 요청과 응답을 처리하기 때문에 동시전송 문제와 다수의 리소스를 처리하기에 속도와 성능 이슈를 가지고 있습니다. 이렇다 보니, HOL(Head Of Line) Blocking-특정응답지연, RTT(Round Trip TIme) 증가, 헤비한 Header구조라는 문제점들을 가지고 있습니다.  이러한 문제점들을 해결하기 위해, UI 개발자/프론트엔드개발자는 이미지 스프라이트, 도메인샤딩, CSS/JavaScript 압축, Data URI 등을 업무에 사용하였습니다.

  • HTTP 2
    • HTTP 2는 성능 뿐만 아니라 속도면에서도 월등한 녀석입니다. Multiplexed Streams(한 커넥션에 여러개의 메세지를 동시에 주고 받을 수 있음), Stream Prioritization(요청 리소스간 의존관계를 설정), Server Push(HTML문서상에 필요한 리소스를 클라이언트 요청없이 보내줄 수 있음), Header Compression(Header 정보를 HPACK압충방식을 이용하여 압축전송)을 사용하여 선을을 획기적으로 향상 시켰습니다.



'Computer > 네트워크(Network)' 카테고리의 다른 글

NAT(Network Address Translation)란?  (0) 2019.01.19