HTTP에서 교환하는 정보.
복수 행의 데이터로 구성된 텍스트 문자열이다. 크게 메시지 헤더와 메시지 바디로 구성되어 있다. 둘의 구분은 최초로 나타나는 개행 문자로 한다.
[메시지 헤더] - 서버와 클라이언트가 꼭 처리해야 하는 리퀘스트와 리스폰스 내용과 속성 등
[메시지 바디] - 꼭 전송되는 데이터 그 자체
- 리퀘스트 라인
리퀘스트에 사용하는 메소드와 리퀘스트 URI와 사용하는 HTTP 버전 포함- 상태 라인
리스폰스 결과를 나타내는 상태 코드와 설명, 사용하는 HTTP 버전 포함- 헤더 필드
리퀘스트와 리스폰스의 여러 조건과 속성 등을 나타내는 각종 헤더 필드 포함
-> 일반/리퀘스트/리스폰스/엔티티 헤더 필드 4종류
HTTP로 데이터를 전송할 때 인코딩(변환)을 실시함으로써 전송 효율을 높일 수 있다.
-> 다량의 액세스를 효율 좋게 처리할 수 있지만, 컴퓨터에서 인코딩 처리를 해야하기에 CPU 등의 리소스는 보다 많이 소비한다.
HTTP 메시지 바디의 역할 : 리퀘스트와 리스폰스에 관한 엔티티 바디를 운반하는 일.
(기본적으로 메시지 바디와 엔티티 바디는 같지만 전송 코딩이 적용된 경우에는 엔티티 바디의 내용이 변화하기 때문에 메시지 바디와 달라진다.)
콘텐츠 인코딩은 엔티티에 적용하는 인코딩을 가리키는데, 엔티티티 정보를 유지한 채로 압축한다. 콘텐츠 코딩된 엔티티는 수신한 클라이언트 측에서 디코딩 한다.
-주요 콘텐츠 압축
엔티티 바디를 분할하는 기능
-> 분해한 것은 청크(덩어리)라고 부른다 -> 이렇게 엔티티 바디를 작게 쪼개고 나서 송신 -> 클라이언트 측에서 다시 복원(디코딩)
MIME(Multipurpose Internet Mail Extensions) : 다목적 인터넷 메일 확장 사양 -> 메일에서 텍스트나 영상, 이미지와 같은 여러 다른 데이터를 다루기 위해서 사용.
HTTP 또한 멀티파트에 대응하고 있어 하나의 메시지 바디 내부에 엔티티를 여러 개 포함시켜 보낼 수 있다. 주로 이미지나 텍스트 파일 등 업로드할때 사용된다.
-주요 멀티파트
엔티티의 범위를 지정하여 리퀘스트 하는 것을 말한다.
Range: bytes = 5001-10000과 같이 범위를 지정하여 리퀘스트 할 수 있다.
-> 현재는 광대역의 네트워크를 이용할 수 있으나, 과거에는 불가능 하였기에 대용량의 이미지와 데이터를 다운로드가 힘들었다. 다운로드 중 커넥션이 끊어지면 처음부터 다시 다운로드를 해야했다. -> 이를 해결하기 위해 이전에 다운로드 한 곳에서부터 다운로드를 받도록하는 기능이 필요했다.
레인지 리퀘스트에 대한 리스폰스는 상태 코드 206 Partial Content 라는 리스폰스 메시지가 돌아온다. 복수 범위의 레인지 리퀘스트라면 multipart/byteranges로 돌아온다. -> 서버가 레인지 리퀘스트를 지원하지 않는 경우 200 OK로 완전한 엔티티가 돌아온다.
클라이언트와 서버가 제공하는 리소스의 내용에 대해서 교섭하는 것. 클라이언트에 더욱 적합한 리소스를 제공하기 위한 구조
-> 제공하는 리소스를 언어와 문자 세트, 인코딩 방식 등을 기준으로 판단한다.
같은 콘텐츠이지만 여러 개의 페이지를 지닌 웹 페이지가 있다. ex) 영어, 한국어판과 같은 같은 페이지지만 언어가 다름.
이런 웹 페이지에서는 서로 다른 언어를 주로 사용하는 브라우저가 같은 URI에 액세스할 때, 각각 다른 언어판 웹 페이지를 표시하는데 이와 같은 구조를 콘텐츠 네고시에이션(Content Negotiation)이라고 부른다.