일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 모두의 네트워크
- 스터디
- 모두를위한딥러닝
- 백준 5525번
- 백준
- 백준 4949번
- 문자열
- 리액트 네이티브 프로젝트 생성
- 정리
- 딥러닝
- 데베
- 모두를 위한 딥러닝
- 네트워크
- 모두의네트워크
- 데이터베이스
- 지네릭스
- 팀플회고
- 깃 연동
- 깃허브 로그인
- React Native
- 깃 터미널 연동
- 깃허브 토큰 인증
- 머신러닝
- 백준 4358번
- 리액트 네이티브
- 자바
- 리액트 네이티브 시작하기
- 백준 4358 자바
- SQL
- HTTP
- Today
- Total
솜이의 데브로그
6장 ) HTTP/1.1 일반 헤더 필드, 리퀘스트 헤더 필드 본문
Reference : 그림으로 배우는 Http & Network Basic
6.3 HTTP/1.1 일반 헤더 필드
일반 헤더필드는 리퀘스트 메시지와 리스폰스 메시지 양쪽에서 사용되는 헤더이다.
Cache-Control
- 디렉티브로 불리는 명령을 사용하여 캐싱 동작을 지정한다.
- 여러개의 디렉티브를 지정하는 경우에는 콤마 ","로 구분한다.
- ex)
Cache-Control : private, max-age=0, no-cache
- ex)
- 여러개의 디렉티브를 지정하는 경우에는 콤마 ","로 구분한다.
캐시가 가능한지 여부를 나타내는 디렉티브
- public 디렉티브 : 다른 유저에게도 돌려줄 수 있는 캐시를 해도 좋다는 것을 명시적으로 나타낸다.
- private 디렉티브 : 리스폰스는 특정 유저만을 대상으로 하고 있음을 나타낸다.
- no-cache 디렉티브 : 캐시로부터 오래된 리소스가 반환되는 것을 막기 위해 사용.
- 클라이언트 리퀘스트에서 사용한 경우 : 중간 캐시 서버가 오리진 서버까지 리퀘스트를 전송해야함
- 서버의 리스폰스에서 사용한 경우 : 오리진 서버는 캐시 서버가 이후의 리퀘스트에서 리소스의 유효성을 반드시 재확인하도록 함.
-
Cache-Control: no-cache=Location
- 리스폰스로 no-cache의 필드값에 헤더 필드명이 지정된 경우 이 지정된 헤더필드만 캐시할 수 없다.
캐시로 보존 가능한 것을 제어하는 디렉티브
- no-store 디렉티브 : 리퀘스트 혹은 리스폰스에 기밀 정보가 포함되어 있음을 나타낸다.
캐시 기한이나 검증을 지정하는 디렉티브
- s-maxage 디렉티브 : max-age 디렉티브와 기능이 동일하며, 여러 유저가 이용할 수 있는 공유 캐시 서버에만 적용. s-maxage 디렉티브가 사용되는 경우 Expires 헤더 필드와 max-age 디렉티브는 무시된다.
- max-age 디렉티브
- 클라이언트의 리퀘스트로 사용된 경우 지정된 값보다 새로운 경우 캐시되었던 리소스를 받아들일 수 있다.
- 서버의 리스폰스에서 사용된 경우, 캐시 서버가 유효성의 재확인을 하지 않고 리소스를 캐시에 보존해두는 최대 시간을 나타낸다.
- HTTP/1.1 캐시 서버는 동시에 Expires 헤더 필드가 달린 경우 max-age 디렉티브의 지정을 우선하고 Expires 헤더필드를 무시한다. (1.0은 반대)
- min-fresh 디렉티브 : 캐시된 리소스가 적어도 지정된 시간은 최신 상태의 것을 반환하도록 캐시서버에 요구.
- max-stale 디렉티브 : 캐시된 리소스의 유효기간이 끝났더라도 받아들일 수 있음을 나타낸다.
- only-if-cached : 클라이언트는 캐시 서버에 대해서 목적한 리소스가 로컬 캐시에 있는 경우만 리스폰스를 반환.
→ 응답할 수 없는 경우 "504 Gateway Timeout" 상태 반환 - must-revalidate : 리스폰스의 캐시가 현재도 유효한지 여부를 오리진 서버에 조회를 요구.
- proxy-revalidate : 모든 캐시 서버에 대해서 이후의 리퀘스트로 해당 리스폰스를 반환할 때 반드시 유효성 재확인을 하도록 요구.
- no-transform : 리퀘스트와 리스폰스 모두 캐시가 엔티티 바디의 미디어 타입을 변경하지 않도록 지정.
Cache-Control 확장
- cache-extension 토큰 : 디렉티브 확장 가능.
Connection
Connection 헤더 필드는 두가지 역할을 한다.
- 프록시에 더 이상 전송하지 않는 헤더 필드를 지정
- 지속적 접속 관리
HTTP/1.1에서는 지속적 접속이 디폴트로 되어있다. 따라서 서버 측에서 명시적으로 접속을 끊고 싶을 경우에는 Connection 헤더필드에 Close 라고 지정한다.
Date
Date 헤더필드는 HTTP 메시지를 생성한 날짜를 나타낸다.
Pragma
HTTP/1.9와의 후방 호환성만을 위해 정의되어 있는 헤더 필드.
Trailer
메시지 바디의 뒤에 기술되어 있는 헤더필드를 미리 전달할 수 있다.
Transfer-Encoding
메시지 바디의 전송 코딩 형식을 지정
Upgrade
HTTP 및 다른 프로토콜의 새로운 버전이 통신에 이용되는 경우 사용.
Via
클라이언트와 서버 간의 리퀘스트 혹은 리스폰스 메시지의 경로를 알기 위해 사용.
프록시 혹은 게이트웨이는 자신의 서버 정보를 Via 헤더필드에 추가한 뒤 메시지를 전송한다.
Warning
HTTP/1.0 리스폰스 헤더가 HTTP/1.1에서 변경된 것으로, 리스폰스에 관한 추가 정보를 전달한다.
기본적으로 캐시에 관한 문제의 경고를 유저에 전달한다.
Warning : [경고 코드][경고한 호스트:포트 번호]"[경고문]"([날짜])
6.4 리퀘스트 헤더 필드
리퀘스트 헤더필드는 클라이언트 측에서 서버 측으로 송신된 리퀘스트 메시지에 사용되는 헤더로, 리퀘스트의 부가 정보와 클라이언트의 정보 리보, 리스폰스의 콘텐츠에 관한 우선순위 등을 추가한다.
Accept
- Accept 헤더필드는 유저 에이전트에 처리할 수 있는 미디어 탕비과 미디어 타입의 상대적인 우선순위를 전달한다.
- 표시하는 미디어 타입에 우선순위를 붙일 경우 세미콜론 ":"으로 구분하고 "q=" 로 표시할 품질 지수를 더한다.
- 품질 계수는 0~1 범위의 수치
Accept-Charset
- 유저 에이전트에서 처리할 수 있는 문자셋으로, 문자셋의 상대적인 우선순위를 전달하기 위해 사용된다.
- Accept 헤더 필드와 마찬가지로 품질 지수에 의해 상대적 우선순위를 표시한다.
ex)
Accept-Charset:iso-8859-5, unicode-1-1:q+0.8
Accept-Encoding
- 유저 에이전트가 처리할 수 있는 콘텐츠 코딩과 콘텐츠 코딩의 상대적인 우선순위를 전달하기 위해 사용된다.
- gzip
- compress
- deflate
- identity (압축과 변형은 하지 않는 디폴트 인코딩 포맷)
Accept-Language
- 유저 에이전트가 처리할 수 있는 자연어의 세트와 자연어 세트의 상대적인 우선순위를 전달하기 위해 사용.
- 자연어 세트는 한번에 여러 개를 지정할 수 있다.
Authorization
- 유저 에이전트의 인증 정보(크레덴셜 값)을 전달하기 위해 사용된다.
- 서버에 인증받으려 하는 유저 에이전트는 상태코드 401 리스폰스 뒤에 리퀘스트에 Authorization 헤더필드를 포함한다.
Expect
- 클라이언트가 서버에 특정 동작 요구를 전달한다.
- 해당 요구에 서버가 응답하지 못해 에러가 발생하는 경우 상태코드 417 Expectation Failed 를 반환한다.
- 원하는 확장을 보낼 수 있지만 HTTP/1.1의 사양에서는 "100-continue"만 정의되어 있다.
From
- 유저 에이전트를 사용하고 있는 유저의 메일 주소를 전달한다.
- 에이전트를 사용하는 경우에는 되도록 From 헤더필드를 포함해야 한다.
Host
- 리퀘스트한 리소스의 인터넷 호스트와 포트 번호를 전달한다.
- Host 헤더 필드는 HTTP/1.1에서 유일한 필수 헤더 필드이다.
- 리퀘스트 서버에서 호스트명을 IP주소로 해결해 리퀘스트가 처리되는데, 같은 IP 주소로 복수의 도메인이 적용되어 있을 수 있으므로 리퀘스트를 받은 호스트명을 명확하게 해야한다.
If-Match
- 조건부 리퀘스트라고 부르며, 조건부 리퀘스트를 받은 서버는 지정된 조건에 맞는 경우에만 리퀘스트를 받는다.
- 서버 상의 리소스를 특정하기 위해 엔티티 태그 값을 전달한다.
- 서버는 필드 값과 리소스의 ETag 값이 일치한 경우에만 리퀘스트를 받아들이며, 일치하지 않는 경우 412 Precondition Failed 리스폰스를 반환한다.
If-Modified-Since
- 조건부 리퀘스트의 하나로, 리소스의 갱신 날자가 필드값보다 새롭지 않다면 리퀘스트를 받아들이겠다는 뜻을 전한다.
If-None-Match
- 조건부 리퀘스트의 하나로 If-Match 헤더필드와 반대로 동작한다.
- 필드값에 지정된 엔티티 태그(Etag)의 값이 지정된 리소스의 ETag 값과 일치하지 않으면 리퀘스트를 받아들인다.
If-Range
- 조건부 리퀘스트의 하나로 If-Ragne로 지정한 필드값과 지정한 리소스의 ETag 값 혹은 날짜가 일치하면 Range 리퀘스트로서 처리하고 싶다는 것을 전달한다.
If-Unmodified-Since
- If-Modified-Since 헤더 필드와 반대로 동작.
- 지정된 리소스가 필드 값에 지정된 날짜 이후에 갱신되어 있지 않는 경우에만 리퀘스트를 받아들인다.
Max-Forwards
- TRACE 혹은 OPTIONS 메소드에 의한 리퀘스트를 할 때에 전송해도 좋은 서버 수의 최대치를 10진수 정수로 지정한다.
- 서버가 다음 서버에 리퀘스트를 전송할 때 Max-Forwards 값에서 1을 빼고 다시 set한다.
- Max-Forward 값이 0인 리퀘스트를 받은 경우에는 전송하지 않고 리스폰스를 반환해야한다.
Proxy-Authorization
- 프록시 서버에서의 인증 요구를 받아들인 때에 인증에 필요한 클라이언트의 정보를 전달한다.
- 클라이언트와 프록시 사이에 인증이 이루어진다.
Range
- 리소스의 일부분만 취득하는 Range 리퀘스트를 할 때 지정 범위를 전달한다.
- Range 헤더필드가 달린 리퀘스트를 처리하는 경우에는 206 Partial Content 리스폰스를 반환한다.
- Range 리퀘스트를 처리할 수 없는 경우에는 상태코드 200 OK 리스폰스로 리소스 전체를 반환한다.
Referer
- 리퀘스트가 발생한 본래 리소스의 URI를 전달한다.
- 브라우저 주소창에 직접 URI를 입력한 경우와 보안상 바람직하지 않다고 판단된 경우에는 보내지 않아도 된다.
TE
- 리스폰스로 받을 수 있는 전송 코딩의 형식과 상대적인 우선순위를 전달한다.
User-Agent
- 리퀘스트를 생성한 브라우저와 유저 에이전트의 이름 등을 전달하기 위한 필드.
느낀점
종류가 너무 많다.. 자주 쓰는 것들은 외워두고 그때그때 찾아쓰는거겠지..? 이걸 어떻게 다 외우지
'CS > Network' 카테고리의 다른 글
7장 ) 응용 계층 (0) | 2021.10.28 |
---|---|
6장 ) 전송 계층 (0) | 2021.10.16 |
5장 ) 네트워크 계층 (0) | 2021.10.09 |
5, 6장 ) 웹 서버, HTTP 헤더(1) (0) | 2021.10.09 |
4장 ) 결과를 전달하는 HTTP 상태코드 (0) | 2021.09.30 |