- HTML 문서를 요청해서 이를 가져오는 단순한 형태의 초기 프로토콜
- 단일 라인 요청에 경로 제시 및
GET 메서드
로써 문서를 가져오고 연결을 끊는 것이 전부 - 요청에 데이터(body)를 포함하지 않음
- 서버에 연결되면 프로토콜, 서버 및 포트가 필요하지 않으므로 전체 URL은 포함되지 않았음
- 상태 혹은 오류 코드도 없음
- 메세지 포맷 규격화
- HTTP 헤더 (요청, 응답 모두에서 사용 / 헤더와 바디를 빈 줄로 분리)
- HTTP 메서드
- HTTP 응답 코드
- Content-Type을 통해 HTML 파일들 외 다양한 파일 전송 가능
- redirect, 비지속 연결(non-persistent)
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
<IMG SRC="/myimage.gif">
</HTML>
GET /myimage.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif
(image content)
- 1.0에서 기능 향상
- HTTP 요청 헤더 내 Host 필드를 필수 항목으로 함
- 요청하는 호스트에 대한 호스트명 및 포트번호 필수
- HTTP 1.1 명시해두고 Host 필드 생략하면 웹서버는 400 Bad Request 응답
- 이 Host 필드에 의해 가변성을 부여함으로써 동일 IP주소를 갖는 단일 서버에 여러 사이트를 구축 가능
- HTTP 요청 헤더 내 Accept 필드에 의한 컨텐츠 협상
- 클라이언트 자신이 원하는 미디어 타입 및 우선순위
- HTTP 메소드 추가 및 조정 (OPTIONS,CONNECT,TRACE 추가 / PUT, DELETE 필수)
- 잘 정의된 캐시 컨트롤 (ETag, Cache-Control)
- 블록 단위 인코딩 전송
- 병렬 커넥션 : TCP 커넥션을 통한 동시 HTTP 처리, 요청 파이프라인을 통한 병렬 커넥션 처리도 가능
- 지속 커넥션을 통해 커넥션 재사용, 기존 TCP 연결을 끊지 않음으로써 재연결에 따른 TCP 느린 시작에 의한 지연 방지
- SSL/TLS에 의한 암호화 통신 지원
- SPDY 기반 (응답성 증가를 정의하고 중복 데이터 전송 문제를 해결)
- 텍스트 프로토콜이 아닌 이진 프로토콜로 데이터 교환
- 멀티 플렉싱 : 단일 TCP 연결에 다수의 스트림을 통해 다중 전송 처리
- HPACK : HTTP 메세지 내 HTTP 헤더 압축 가능, 전송된 데이터의 중복과 오버헤드 제거
- 서버 푸시 : 클라이언트 캐시에 데이터를 저장하여 다음 요청 전에도 필요한 컨텐츠 전송 가능
- 2.0의 업그레이드 버전
- QUIC(Quick UDP Internet Connection) 기반
- UDP 상에 구현된 실험적인 다중 전송 프로토콜
- TCP 및 웹 어플리케이션 전송을 개선하기 위해 Google에서 실험적으로 개발
- TCP는 많은 운영 체제 커널에 내장되어 있기 때문에 변경사항을 실험하고 수정을 구현하는 것에 시간이 많이 듦
- QUIC을 만들어 개발자는 더 빠르게 실험할 수 있고, 새로운 것을 시도할 수 있음.
- QUIC은 HTTP/2의 의미론적 지원을 위해 설계됨. 멀티플랙싱, 흐름 제어, 보안 및 혼잡 제어를 제공.
- 주요 기능
- 연결 설정 시간 단축
- 혼잡 제어 개선
- Head of Line Blocking 없는 멀티플렉싱
- 전달 오류 수정
- 연결 마이그레이션
- UDP, TLS 1.3을 이용해 성능 향상
Host
From
Cookie
Referer
User-Agent
Accept
<-> 엔터티 헤더 항목 중Content-Type
과 대응Accept-Charset
<-> 엔터티 헤더 항목 중Content-Type charset-xxx
과 대응Accept-Encoding
<-> 엔터티 헤더 항목 중Content-Encoding
과 대응Accept-Language
<-> 엔터티 헤더 항목 중Content-Language
과 대응
Server
: 웹 서버 소프트웨어 정보Set-Cookie
: 웹서버 측에서 클라이언트에게 세션 쿠키 정보 설정Accept-Range
Age
ETag
Proxy-authenticate
Allow
: 해당 엔터티에 대해 서버측에서 지원가능한 HTTP 메소드의 리스트 나타냄X-Powered-By
: 서버내 시스템 이름을 알리기 위해 반환
요청 및 응답 메세지 모두에서 사용가능한 일반 목적의 헤더로 HTTP 메세지 내 바디 내용과는 관련 없음
Date
: 메세지 생성 일시Connection
Connection: Keep-Alive
=> 현 TCP 커넥션 유지 원함- HTTP/1.0에만 사용되던 형식
- HTTP/1.1에서는 예전 의미를 대체로 인식하지만 해당 기능(지속 커넥션) 자체는 HTTP/1.1에서 기본 제공되므로 굳이 언급 필요 없음
- 사실상,
Connection: keep-Alive
,keep-Alive: xxx
헤더 항목들은 무시됨
Connection: token list
- 중계 연결(프록시)에 대한 옵션 설정
- 중계 중인 인접 HTTP 커넥션 간에 만 적용될 옵션 리스트들로써,
- 다음 커넥션에 전달되어서는 안됨
- 해당 커넥션 토큰들 각각을 쉼표로 구분시킨 리스트 (token list)
Connection: close
=> 현 커넥션 직후에 TCP 접속을 끊는다는 것을 알림- Keep-Alive 형식의 연결을 한 쪽에서 이를 명시적으로 끊을려고 할 때 사용
- 또한, 오류 탐지 (Content-Length 불일치 등) 강제 종료, 타임아웃으로 연결을 끊게됨
Cache-Control
Pragma
Trailer
- 요청 및 응답 메세지 모두에서 사용가능
- 주로 바디 내용이 존재할 때 세부 정보 나타내는데 사용
- Content-Type 관련 항목
Content-Type
Content-Encoding
Content-Length
Content-Disposition
- 캐시 관련 항목
Expires
Last-Modified
Location
: 리소스가 리다이렉트된 때에 이동된 주소, 또는 새로이 생성된 리소스 주소- 리다이렉션 이동되는 경우
3xx
상태 코드 반환 - 새로 생성된 경우
201 Created
반환 - 이에따라 선택적으로
Location:
헤더 항목을 보내게 됨
- 리다이렉션 이동되는 경우
Transfer-Encoding : chuncked
- 동적으로 생성되어 바디 길이를 모르는 경우 조금씩 전송 가능
- 각 chunk마다 그 시작에 16진수 길이를 삽입하여 chunk 길이 알려줌