본문 바로가기

Study/Today I Learn

[개념잡기] HTTP 기본 개념

HTTP란?

HyperText Transfer Protocol의 약자로 웹 상에서 정보를 주고받을 수 있는 프로토콜

HTTP 버전의 역사

0.9 (1990~)

  • 팀 버너스리 를 통해 개발
  • 요청은 단일 라인으로 구성되며 가능한 메서드는 GET
  • HTML 파일만 전송 가능

1.0 (1996~)

  • 요청에 HTTP 버전이 전송 HTTP/1.0
  • 요청에 대한 성공과 실패을 알 수 있고, 그 결과에 대한 동작이 가능
  • 헤더 도입, 메타데이터 전송을 허용
  • 헤더 도입으로 다양한 문서 전송이 가능해졌음

1.1 (1999~)

  • 장기집권하며 대부분의 웹 환경은 1.1을 따르는 중.
  • 파이프 라이닝을 추가하여 첫번째 요청이 전송되기 이전에 두번째 요청을 전송 가능
  • 캐시 제어 매커니즘 도입
  • 이전 버전의 모호함을 명확하게 하고 많은 개선 사항을 도입함

SPDY (2012~)

  • 구글이 주도적으로 진행.
  • 클라이언트와 서버간의 데이터 교환을 대체한 수단 실증

2.0 (2015~)

  • SPDY를 통해서 표준으로 지정.
  • 텍스트 프로토콜을 이진 프로토콜로 대체
  • 병렬 요청 가능
  • 중복돤 요청, 불필요한 오버헤드를 제거, 연속된 요청 사이의 매우 유사한 내용으로 존재하는 헤더를 압축
  • server push 라는 매커니즘을 통해 필요하게 될 데이터를 채워놓도록 허용
  • stream 방식의 멀티 request처리
  • TLS기반

URL의 구조(스키마,호스트네임,패스 구분)

http://www.example.com/blog/page-name?query=hello

프로토콜 : http://
도메인 네임 : www.example.com
디렉토리 : /blog/page-name
파라미터 : query=hello

HTTP Method 는 무엇이고 왜 필요한가?

클라이언트가 웹서버에게 사용자의 요청의 목적/종류를 알리는 수단

HTTP Status 는 무엇이고 왜 필요한가?

서버가 클라이언트에 응답에 대한 상태를 알리는 수단

cookie 가 필요한 이유

HTTP 프로토콜은 Connectionless 하고 Stateless 한 프로토콜

  • Connectionless : 클라이언트가 서버에 요청을 하고 서버가 클라이언트에게 응답을 보내면 접속을 끊음
  • Stateless : 통신을 끝나면 상태 정보를 유지하지 않음

따라서 Server가 Client를 인식하기 위한 방법으로 cookie를 이용했다.

캐시란 무엇인가?

웹 페이지 요소를 저장하기 위한 임시 저장소, 웹페이지가 빠르게 렌더링 할 수 있도록 도와줌

HTTP Header 에는 어떤 속성들이 들어 있는가?

General header
요청과 응답에 모두 적용되지만, 데이터와는 관련이 없는 헤더
Date나 Connenction(클라이언트와 서버 간의 연결에 대한 옵션) 등등...

Request header
요청하는 클라이언트의 대한 자세한 정보를 포함하는 헤더
Host, User-Agent, Cookie 등등...

Response header
서버 자체에 대한 정보, 응답에 대한 부가적인 정보를 포함하는 해더
Server, Allow, ETag, Access-Control-Allow-Origin 등등

Entity header
컨텐츠의 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더
Content-Type, Content-Length 처럼 엔티티(콘텐츠, 본문, 리소스) 관련 정보 등등...

Content-Type 종류

Entity 헤더에 포함되는 속성으로 리소스의 미디어 타입을 나타냄

Application/x-www-form-urlencoded : HTML Form 형태
Application/json : JSON 형태 값
multipart/form-data : 파일 첨부
text/* : 단순 html, css, javascript 파일

Application/x-www-form-urlencoded 과 form-data 모두 폼데이터이지만 x-www-form-urlencoded 는 대용량 바이너리를 보내는데 비능률적이다.