반응형
HTTP 헤더
field-name ":" field-value
- field-name은 대소문자 구분이 없다.
- HTTP 전송에 필요한 부가정보를 담는 역할을 한다.
- 매우 다양한 표준 헤더가 존재하며, 필요시 임의의 헤더를 추가할 수 있다.
RFC2616 (과거버전)
- General 헤더 : 메세지 전체에 적용되는 정보 (ex. Connection: close)
- Request 헤더 : 요청정보 (ex. User-Agent: Mozilla/5.0 ...)'
- Response 헤더 : 응답정보 (ex. Server: Apache)
- Entity 헤더 : 엔티티 바디에 대한 정보 (ex. Content-Type: text/html, Content-Length: 2433)
- 메시지 본문 안에 엔티티 본문이 포함되어 있다. 따라에 이에 대한 정보를 해석하는데 Entity 헤더가 사용된다. (데이터유형, 데이터길이, 압축정보 등)
RFC7230~7235
- 엔티티(Entity)라는 용어를 표현(Representation)으로 변경
- Representation : Representation Metadata + Representation Data
- 이에 따라
Entity 헤더
도표현 헤더
로 용어변경 - HTTP는 메시지 본문(페이로드)을 통해 표현을 전달한다.
- 표현은 요청이나 응답에서 전달할 실제 데이터값이다.
- cf. 표현 헤더는 표현 메타데이터와 페이로드 메시지를 구분해야하지만, 생략
표현
- Content-Type: 표현 데이터의 형식 (ex.
text/html; charset=utf-8
,application/json
,image/png
) - Content-Encoding: 표현 데이터의 압축 방식 (ex.
gzip
,deflate
,identity
) - Content-Language: 표현 데이터의 자연 언어 (ex.
ko
,en
,en-US
) - Content-Length: 표현 데이터의 길이
- 표현 헤더는 전송, 응답 둘다 사용
Content-negotitation
- 클라이언트가 선호하는 표현을 우선적으로 전달받도록 하는 헤더정보 (요청시에만 사용)
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset: 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
- Accept-Language: 클라이언트가 선호하는 자연 언어
- 단일값을 넣을 수도 있지만,
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
와 같이Quality Value
값을 넣어서 전달해줄 수도 있다. 이 경우, 값이 높은 것을 우선적으로 전달받는다. (존재하지 않을 경우에 다음값으로) 값을 생략하는 경우는 1이라는 의미로 해석한다.
전송방식
- 단순 전송 : 가장 기본적인 전달방식
- 압축 전송 : 응답을 특정 형식으로 압축해서 전달
- 분할 전송 : 값들을 분할하여 전달한다. (Transfer-Encoding) 이 경우 값들이 각각 나누어져 전달되기 때문에 Content-Length를 표기해선 안된다.
- 범위 전송 : 값의 특정범위만을 필요로 할 경우 해당 부분만 전달
인증
- Authorization : 클라이언트 인증 정보를 서버에 전달
- WWW-Authenticate : 리소스 접근시 필요한 인증 방법 정의
쿠키
- HTTP는 기본적으로 무상태 프로토콜이기 때문에 연결이 끊어지면 서버는 이전 요청에 대한 정보를 기억하지 못한다.
- 모든 요청과 링크에 사용자 정보를 포함하는 방법도 있지만, 이는 보안적으로 좋지 못한 방법이다.
- 따라서 쿠키저장소에 정보를 저장하는 방식으로 정보를 기억하고 유지한다. 사용자 로그인 세션을 유지하거나, 광고 정보 트래킹에 사용된다.
- 네트워크에 추가적인 트래픽을 발생시키기 때문에 최소한의 정보만 사용하는 것이 중요하며, 보안에 완전 민감한 정보(주민번호, 신용카드번호 등)은 사용해선 안된다.
- Set-Cookie : 서버에서 클라이언트로 쿠키를 전달한다. 클라이언트는 이를 쿠키저장소에 저장한다.expire나 max-age를 활용해 일정시간이 지나면 쿠키가 만료되도록 할 수 있다. 그외에도 domain 정보를 전달해 해당하는 domain에만 적용되게 하거나, path 정보를 전달해 해당 경로 페이지에만 쿠키를 접근하도록 할수도 있다.
- Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달함
그 외 헤더에 담긴 다양한 정보
- From : 유저 에이전트의 이메일정보. 일반적으로 잘 사용되지 않음. 검색엔진 등에서 요청정보 확인을 위해 필요로 하는 경우가 가끔 있음.
- Referer : 접속 이전 웹페이지 주소. 유입경로를 분석하는데 활용. (cf. referrer의 오타인데, 수정하면 많은 번거로움이 있어 이대로 사용중)
- User-Agent : 유저의 애플리케이션(웹 브라우저 등) 정보
- Server : 요청을 처리한는 오리진 서버의 소프트웨어(apache, nginx 등) 정보
- Date : 메시지 생성날짜
- Host : 요청한 호스트의 도메인정보. 필수적으로 사용된다. (하나의 IP주소에 여러 도메인이 적용되어 있는 경우, 이를 명확하게 구분해주어야 함)
- Location : 페이지 리다이렉션에 이용 (3xx 응답 결과에서 Location 헤더가 있을 때 자동으로 리다이렉트를 수행한다.)
- Allow : 허용 가능한 HTTP 메소드. (405, Method Not Allowed에서 사용되지만 많이 사용하지 않는다.)
- Retry-After : 특정 오류가 발생시 유저가 다음 요청을 성공적으로 수행하기까지 걸리는 시간. 현실적으로 사용되기 어려움.
반응형
'💻 CS > 네트워크' 카테고리의 다른 글
[Network] TCP의 흐름제어와 혼잡제어 (0) | 2022.02.13 |
---|---|
[Network] HTTP 헤더 : 캐시와 조건부요청 (0) | 2021.07.10 |
[Network] HTTP 상태코드 (0) | 2021.06.26 |
[Network] HTTP API 설계 예시 (1) | 2021.06.12 |
[Network] HTTP 메서드 활용 (0) | 2021.06.10 |