ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP란?
    프로그래밍 기초 공부 2022. 9. 23. 03:39

    여섯 번째로 포스팅할 내용은 HTTP에 관한 내용입니다.

     

    [ HTTP란? ]

    HTTP는 HyperText Transfer Protocol의 약자로 W3(World Wide Web)상에서 정보를주고 받을 수 있는

    서버/클라이언트 모델을 따르는 프로토콜 이다.

    HTTP는 클라이언트와 서버 사이에 이루어지는 요청(request)/응답(response) 프로토콜이다.

    애플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동한다.

    가장 성공적인 인터넷 프로토콜이다.

    HTTP는 어떤 종류의 데이터든지 전송할 수 있도록 설계되어 있다.

    인터넷상에서 흔히 볼수 있는 HTML로 작성된 문서는 HTTP로 보낼 수 있는 데이터의 한 종류일 뿐이다.

    이미지, 동영상, 오디오, 텍스트 문서들 아무튼 종류를 가리지 않는다.

    HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있다.

     

    [ HTTP의 역사 ]

    HTTP/0.9

    • 단일 라인으로 구성 되었으며 path는 GET이 유일
    • 클라이언트-서버, 요청-응답 프로토콜
    • TCP/IP 링크를 통해 실행되는 ASCII 프로토콜
    • 하이퍼 텍스트 문서(HTML)을 전송하도록 설계
    • 서버와 클라이언트 간의 연결은 모든 요청 후에 닫힘

     

    HTTP/1.0

    • 버전 정보가 각 요청 사이내로 전송되기 시작
    • 상태 코드 라인 또한 응답의 시작 부분에 붙어 전송되어, 브라우저가 요청에 대한 성공과 실패를 알 수 있음
    • HTTP 헤더 개념은 요청과 응답 모두를 위해 도입되어, 메타데이터 전송을 허용하고 프로토콜을 극도로 유연하고 확장 가능하도록 만들어줌
    • 새로운 HTTP 헤더의 도움으로, 평이한 HTML 파일들 외에 다른 문서들을 전송하는 기능이 추가

     

    HTTP/1.1

    • 커넥션이 재사용될 수 있게 하여, 탐색된 단일 원본 문서 내로 임베드된 리소스들을 디스플레이하기 위해 사용된 커넥션을 다시 열어 시간을 절약
    • 파이프라이닝을 추가하여, 첫번째 요청에 대한 응답이 완전히 전송되기 이전에 두번째 요청 전송을 가능케 하여, 커뮤니케이션 레이턴시를 낮춤
    • 청크된 응답 또한 지원
    • 추가적인 캐시 제어 메커니즘이 도입
    • 언어, 인코딩 혹은 타입을 포함한 컨텐츠 협상이 도입되어, 클라이언트와 서버로 하여금 교환하려는 가장 적합한 컨텐츠에 대한 동의를 가능케 함
    • Host 헤더 덕분에, 동일 IP 주소에 다른 도메인을 호스트하는 기능이 서버 코로케이션을 가능케함

     

    SPDY

    • Google에서 개발한 시험용 프로토콜이며 2009년 중반에 발표
    • 시뮬레이션된 홈 네트워크 연결에서 상위 25개 웹사이트를 다운로드할 때, 성능이 상당히 개선되었으며 페이지가 최대 55% 더 빨리 로드
    • 성능 향상에 힘입어 SPDY를 사용하는 사이트가 늘어나게 되었고 사실상의 표준
    • HTTP-WG는 HTTP/2 표준을 선보이려는 노력을 했고 이 프로토콜의 출발점을 SPDY 사양을 채택

     

    HTTP/2

    • Alt-Svc (en-US) 지원은 좀 더 영리한 CDN (en-US) 메커니즘을 따라, 신분 증명의 개념과 주어진 자원의 위치를 분리하도록 해줌
    • Client-Hints의 도입으로 브라우저 혹은 클라이언트가 요구사항이나 서버의 하드웨어 제약사항에 관한 정보를 사전에 미리 주고 받을 수 있게 되었음
    • Cookie 내에 보안 관련 접두사 도입은 보안 쿠키가 변경되지 않았다는 것을 보장하는데 도움을 줌

     

    [ HTTP의 작동 방식 ]

    HTTP는 서버/클라이언트 모델을 따른다. 클라이언트에서 요청(request)를 보내면 서버는 요청을 처리해서 응답(response)한다.

    1. 클라이언트 : 서버에 요청하는 클라이언트 소프트웨어가 설치된 컴퓨터. chrom, firefox, ie등의 클라이언트 소프트웨어를 이용한다. 클라이언트는 URI를 이용해서 서버에 접속하고, 데이터를 요청할 수 있다.
    2. 서버 : 클라이언트의 요청을 받아서, 요청을 해석하고 응답을 하는 소프트웨어가 설치된 컴퓨터. Apache, nginx, IIS,등이 서버 소프트웨어다.

     

    HTTP는 Connectless 방식으로 작동한다.

    서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다.

    기본적으로는 자원 하나에 대해서 하나의 연결을 만든다.

    이런 작동방식은 이전의 상태정보를 유지할 수 없다.

     -> 클라이언트의 상태정보를 정보조각 형태(cookie)로 서버와 클라이언트(웹 브라우저)에 남기는 방식으로 문제를 해결

     -> 서버는 cookie를 이용해서 세션정보를 관리

    • 장점 : 불특정 다수를 대상으로 하는 서비스에 적합한 방식이다. 수십만명이 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에, 더 많은 유저의 요청을 처리할 수 있다.
    • 단점 : 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수가 없다. 이러한 HTTP의 특징을stateless라고 하는데, Connectless로 부터 파생되는 특징이라고 할 수 있다. 클라이언트의 이전 상태 정보를 알 수 없게 되면, 웹 서비스를 하는데 당장에 문제가 생긴다. 

     

    Cookie는 클라이언트와 서버의 상태 정보를 담고 있는 정보조각이다.

    ex) 로그인

    클라이언트가 로그인에 성공 ->

    서버는 로그인 정보를 자신의 데이터베이스에 저장하고 동일한 값을 cookie형태로 클라이언트에 보냄->

    클라이언트는 다음 번 요청때 cookie를 서버에 보냄->

    서버는 cookie 값으로 자신의 데이터베이스를 조회해서 로그인 여부를 확인 가능

     

    [ 메서드 ]

    메서드는 요청의 종류를 서버에게 알려주기 위해서 사용한다.

    요청에 사용할 수 있는 메서드

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

     

    보통 웹 서비스들은 GET POST만을 이용해서 개발한다.

    DELETE나 PUT등이 필요한 요청에도 GET과 POST를 사용한다.

    1. GET과 POST만으로도 모든 종류의 요청을 표현할 수 있다.
    2. 개발하는데 편의성이 좋아진다.
    3. 웹 브라우저로 DELETE, HEAD등을 보내는 form이 없어서이다.

     

    [ HTTPS란? ]

    HTTP는 기본적으로 평문 데이터 전송을 원칙으로 하기 때문에 개인의 프라이버시가 오가는 서비스들에 사용하기 힘들다. HTTPS는 SSL 레이어위에 HTTP를 통과 시키는 방식이다.

    즉 평문의 HTTP 문서는 SSL 레이어를 통과하면서 암호화 돼서 목적지에 도착하고, 목적지에서는 SSL 레이어를 통과하면서 복구 돼서 웹 브라우저에 전달된다.

    HTTPS는 하나의 프로토콜이 아닌, HTTP와 SSL은 전혀 다른 계층의 프로토콜의 조합이다.

    HTTPS over SSL로 보는게 좀더 정확하다.

    거의 모든 웹 서버와 웹 브라우저와 HTTP 기반의 툴들이 SSL을 지원한다.

    하이퍼 텍스트 전송 프로토콜 보안 (HTTPS) : HTTP 프로토콜의 보안 버전

    HTTPS 프로토콜을 사용하면 웹 사이트 사용자가 인터넷을 통해 신용 카드 번호, 은행 정보 및 로그인 자격 증명과 같은 중요한 데이터를 안전하게 전송할 수 있다.

    HTTPS는 쇼핑, 뱅킹 및 원격 작업과 같은 온라인 활동을 보호하는 데 특히 중요하다.

    그러나 HTTPS는 모든 민감한 데이터를 사용자와 교환하는지 여부에 관계없이 빠르게 표준 프로토콜이되고 있다. 

     

    [ HTTP와 HTTPS의 차이점 ]

    • HTTPS URL은 "https://"로 시작한다. 기본 포트번호는 443이다.
    • HTTP URL은 "http://"로 시작한다. 기본 포트번호는 80이다.

     

    • HTTP는 평문 데이터를 기반으로 하기 때문에, 유저정보와 같은 민감한 정보가 인터넷 상에 그대로 노출된다.
    •  HTTPS는 이러한 공격을 견딜 수 있도록 설계되어 있다.

     

    • HTTPS는 인증서를 이용해서, 접속 사이트를 신뢰할 수 있는지 평가할 수 있다.
    • 일반적으로 HTTPS는 HTTP에 비해서 매우 많이 느리다.
    • 많은 양의 데이터를 처리할 경우 성능의 차이를 체감할 수 있다.
    • 웹사이트들이 민감한 정보를 다루는  페이지를 HTTPS로 전송, 기타 페이지는 HTTP로 전송하는 방법을 사용한다.

     

    [ HTTPS 사용 이유 ]

    무결성 및 인증 : 암호화 및 인증을 통해 HTTPS는 웹 사이트와 사용자 브라우저 간의 통신 무결성을 보호한다. 

    개인 정보 : 온라인 쇼핑이나 은행 업무를 수행하는 동안 신용 카드 번호와 암호를 보호한다.

    UI 변경: 브라우저 UI의 최근 변경으로 인해 HTTP 사이트가 다음과 같이 플래그 지정되었다. '불안 정한' 

    호환성 : 현재 브라우저 변경으로 인해 HTTP가 비 호환성에 더욱 근접해 가고 있습니다.

    파이어 폭스는 HTTPS 전용 모드 옵션 채택

    Chrome은 혼합 콘텐츠 차단 (HTTPS 페이지에 연결된 HTTP 리소스)

    -> HTTP 웹 사이트에 대한 "보안"경고와 함께 브라우저에서 볼 때 HTTP에 대한 글이 벽에 걸려 있다.

    SEO : 검색 엔진은 HTTPS를 순위 신호 검색 결과를 생성 할 때 따라서 웹 사이트 소유자는 웹 서버가 HTTP가 아닌 HTTPS를 사용하도록 구성하기 만하면 쉽게 SEO를 향상시킬 수 있다.

    간단히 말하면 공개 웹 사이트가 더 이상 HTTP를 지원해야 할 이유가 더 이상 없다.

    '프로그래밍 기초 공부' 카테고리의 다른 글

    Maven과 gradle  (0) 2022.09.26
    git ignore란?  (1) 2022.09.23
    API와 REST API  (0) 2022.09.19
    JSON과 XML  (0) 2022.09.19
    객체 지향 프로그래밍(OOP)이란 무엇일까?  (0) 2022.09.16
Designed by Tistory.