본문 바로가기
개발공부_Blog/Web

HTTP란

by 소팡팡 2023. 11. 28.

😎HTTP란

HTTP는 웹 브라우저가 웹 서버로부터 리소스를 요청/응답 받기 위한 프로토콜이다.

본문 : https://www.notion.so/fun-blog/HTTP-649695ea89b545cd8dc71b9319cdd6aa

웹브라우저와 서버의 데이터 전송과정

웹은 여러 계층의 스택 구조로 이루어져 있다. 때문에 웹 브라우저의 HTTP 요청이 웹 서버에 도착하기까지 많은 컴퓨터와 머신 사이를 지나간다.

웹 브라우저는 사용자의 요청을 HTTP메세지로 작성한다. 이후 TCP/IP 프로토콜을 사용하여 웹 서버까지 HTTP메세지를 전달하고, 웹 서버에서는 요청을 받아 다시 HTTP응답 메세지를 보낸다. HTTP응답 메세지는 TCP/IP 프로토콜을 통해 웹 브라우저에 전달되고, 브라우저는 HTTP메세지를 해석하여 사용자 화면에 렌더링 한다.

  • 클라이언트 ( 사용자 에이전트 )사용자의 요청을 HTTP로 변환하여 서버로 요청하고, 서버의 HTTP응답을 사용자가 볼 수 있도록 변환하여 화면에 렌더링한다.
  • 사용자를 대신하여 동작하는 모든 도구들을 뜻한다. ⇒ 브라우저 브라우저는 항상 요청을 보내고, 서버에서 응답을 받아 파일 을 해석해 사용자에게 보여준다.
  • 웹 서버 : 사용자( 클라이언트 )의 요청에 해당하는 문서를 제공한다.
  • 프록시 : 웹스택 구조의 애플리케이션 계층에서 동작하는 컴퓨터(서버)들을 프록시라고 한다. 이를 통해 다양한 기능을 수행할 수 있다. ( 캐싱, 필터링, 인증 등 )

웹에서 사용자가 브라우저에 요청시 일어나는 과정 ( 간단! ) / 네트워크계층 겸겸...

HTTP의 역사

HTTP/0.9 1991

Tim berners Lee가 http를 고안해냈다. http/0.9는 html문서를 가져와서 보여주기 위한 용도로만 사용되었기 때문에 get메서드만 있었다. 단일라인으로 구성돼 클라이언트의 요청 / 서버의 응답 구조가 나뉘어져 있지 않았다.

<한계 >

  • 하나의 문서를 전송하는 기능뿐
  • 통신되는 문서는 HTML로만 전달 가능, 다른 형식을 전달할 수단 X
  • 검색 이외 요청을 보낼 수 없음
  • 새로운 문장을 업데이트 or 삭제할 수 없음
  • 1994 보안성 Netscape는 TCP/IP 스택을 통해 HTTP를 전송하는 대신 TCP/IP스택 위에 암호화된 전송 계층인 SSL을 만들어냄. 이를 통해 서버와 클라이언트 사이에 교환되는 메세지에 신뢰성, 함호화를 보장했다. SSL은 표준화되어 TSL가 되었다.

HTTP/1.0 1996 확장성

Tim berners Lee, HTTP는 읽기 전용 도구가 아닌, 문서를 추가, 이동, 등 분산된 시스템의 한 종류로 만들고 싶어했다.

HTTP/1.0으로 업그레이드 됨 ⇒ 각 요청 안에 버전이 표시되었으며 header개념이 도입되어 다양한 정보를 포함할 수 있게 되다. GET 이외의 다른 메서드가 도입되어 클라이언트가 서버에게 요청하는 동작의 종류를 나타낼 수 있게 되었다. 또한 content-type이 추가되어 HTML파일 외 다른 문서를 전송하였다.

  • HTTP요청 : 버전 정보 추가, 메서드 추가
  • HTTP응답 : 상태코드 라인 표시
  • 요청 / 응답시 헤더 추가 ( Host, USer-agent, Accept )
  • 다양한 메서드 추가 ( POST, PATCH, PUT, DELETE … )
  • content-type이 추가되어 HTML외의 파일도 전송 가능

HTTP/1.1 표준 프로토콜

  • 통신의 고속화 : Keep-Alive → 연결의 재사용, TCP/IP 통신 후 닫지 않아 연속적 요청이 가능 파이프라이닝 추가 → 하나의 요청이 끝나기 전에 다음 요청 전송 가능
  • TLS에 의한 암호화 통신 지원
  • 크기를 알 수 없는 콘텐츠의 청크 전송 인코딩 지원
  • 캐시 제어 메커니즘 도입
  • 인코팅 타입 도입
더보기

Keep-Alive는 HTTP의 기반인 TCP/IP의 통신을 효율화 하는 방법이다. keep-alive를 사용하기 이전에는 TCP/IP로 통신하는 매 구간에 connect요청을 열고 닫고를 반복하였으나 keep-alive를 도입하여 연속된 TCP/IP 요청시 connect를 닫지 않고 지속적인 연결을 하게 되었다

TLS( Transport Layer Sesurity )는 HTTP/1.1과 병행해 통신 경로를 암호화하는 전송 계층 보안이다. TLS는 HTTP/1.0이 탄생한 1996에 표준화 되었지만 HTTP/1.1이후에 완료되었다.

청크chunk는 HTTP/1.1에서 새롭게 지원되는 데이터 표현으로, 전체를 한꺼번에 전송하는 것이 아니라 작게 나눠 전송하는 방식을 말한다. 이를 스트리밍 다운로드/업로드라고 부르기도 한다.

2000년경 HTTP사용에 새로운 패턴인 REST가 설계되었다. 기본 HTTP/1.1메서드를 사용해 특정 URI에 대한 접근에 의존하는 방법을 사용했다.

 

HTTP/1.1의 특징

  • 다양한 파일 형태의 데이터 전송이 가능 → HTML, Text, Image, Video, Audio, JSON, XML 등
  • 클라이언트와 서버로 나뉘어진다. 클라이언트가 요청을 하면 서버가 응답하는 형태
  • stateless ( 상태를 유지하지 않는다, 무상태 프로토콜 )
  • 지속연결( keep-alive기능을 사용하여 TCP/IP 연결 요청이 비연결성에서 지속적인 연결로 바뀜 )

HTTP의 기본적인 구성요소

  • method, header, body, statusCode

😎HTTP method

웹에서 클라이언트(브라우저)가 서버로 요청을 보낼 때 사용하는 방식 중 하나. HTTP 메서드는 클라이언트가 서버에게 어떤 동작을 수행할 것인지 요청하는 방식을 지정한다.

주요 메서드

GET 리소스 조회 서버로부터 정보를 조회하기 위해 사용되는 메서드입니다. 주로 웹 브라우저에서 링크를 클릭하거나 URL을 입력하면 GET 요청을 보냅니다.
POST 요청 데이터 처리 서버에 정보를 제출하기 위해 사용되는 메서드입니다.
PUT 리소스를 대체 ( 덮어쓰기 ) 서버에 새로운 리소스를 생성하거나 기존의 리소스를 업데이트하기 위해 사용되는 메서드
PATCH 일부 업데이트 서버에 존재하는 리소스의 일부를 업데이트하기 위해 사용되는 메서드
DELETE 삭제 서버에 존재하는 리소스를 삭제하기 위해 사용되는 메서드
  • 기타 메서드 : head, options, connect, trace
    • HEAD: GET 메서드와 유사, 응답 본문(body)을 포함하지 않고 응답 헤더(header)만을 반환합니다.
    • OPTIONS: 서버가 지원하는 HTTP 메서드를 확인하기 위해 사용되는 메서드입니다.
    • CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
    • TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

HTTP 메서드의 기본적인 특징

  • 멱등성 ( 동일한 요청을 여러 번 보내더라도 결과가 동일하게 유지되는 것 )
  • 안전성 ( 사용자의 데이터나 시스템의 안전을 보장 )
  • cacheable ( 캐시 가능 )HTTP헤더를 통해 캐시를 제어할 수 있으며, 브라우저 캐시, 프락시 서버 캐시, 게이트웨이 및 캐시 서버에 데이터를 캐시할 수 있다.

😎HTTP Header, Body

HTTP는 시작라인, Header필드, 공백, body로 구성되어 있다.

시작라인 ( request-line : 요쳥 메서드 + 요청 대상 + 공백 // status-line : 상태코드 )

  • request : request-line
    • http-method( 공백 ) request-target( 공백 ) HTTP-version CRLF( 공백 )
      • 메서드 http-method : get, post, delete, patch, put 서버가 수행해야 할 동작을 지정
      • 요청대상 = URI, request-target : 절대경로 (’/’)로 시작한다
      • HTTP버전 : HTTP / 1.1
    response : status-line
    • HTTP-version CRLF( 공백 ) status-code( 공백 )reason-phrase CRLF
    • status-code : 클라이언트가 보낸 요청의 결과를 담고있음 200 - 성공, 400 - 클라이언트err , 500 - 서버 err

헤더필드 ( 헤더 필드값, HTTP의 부가정보를 담고 있음)

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Accept ( ㄱㄱ )

  • 헤더 필드명: 헤더 필드값 , field-name은 대소문자 구문 없음
  • HTTP전송에 필요한 모든 부가정보를 담고 있다 ( 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보 )
  • 표준 헤더가 너무 많음 ㅋㅋ

body, 메세지

  • 실제 전송할 데이터
  • HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

😎HTTP StatusCode

HTTP응답 상태 코드는 서버가 클라이언트의 요청을 받고 처리한 결과를 나타내는 숫자이다. 상태 코드는 세자리 숫자로 이루어져 있으며, 첫번째 자리수는 응답의 성격을 나타낸다.

  • 1xx ( Infomation ) : 요청이 수신되었고, 처리중임을 나타낸다
  • 2xx ( Success ) : 요청을 성공적으로 받았고, 처리되었다.
    • 200 OK: 성공적으로 처리되었음
    • 201 Created: 새로운 리소스가 성공적으로 생성되었음
    • 204 No Content: 응답에 본문이 없음
  • 3xx ( Redirection ) : 추가 동작이 필요함
  • 4xx ( Client Error ) : 클라이언트 오류를 표시
    • 400 Bad Request: 요청이 잘못되었음
    • 404 Not Found: 요청한 리소스가 서버에 없음
  • 5xx ( Server Error ) : 서버 오류를 표시함
    • 500 Internal Server Error: 서버가 요청을 처리하는 도중에 오류가 발생했음
    • 503 Service Unavailable: 서버가 현재 사용 불가능하므로 요청을 처리할 수 없음

 


reference

https://developer.mozilla.org/ko/docs/Web/HTTP

https://developer.mozilla.org/ko/docs/Web/HTTP/Overview

https://ko.wikipedia.org/wiki/HTTP

Real World HTTP 책 : 시부카와 요시키 지음, 김성훈 옮김

inflearn강의 : 모든 개발자를 위한 HTTP웹 기본 지식 - 김영한

'개발공부_Blog > Web' 카테고리의 다른 글

PWA설치 및 기본 설정  (1) 2024.12.10
Web-app과 PWA  (0) 2024.12.10
web browser의 구조와 rendering engine  (2) 2023.11.26
web은 프론트엔드 개발자에게는 기본이다.  (4) 2023.11.26

댓글