티스토리 뷰

HTTP 헤더는 HTTP 메세지의 모든 부가정보를 나타낸다. 

field-name: field-value

헤더 필드는 general header, request header, response header, entity header 4종류로 나뉜다.

 

- 일반적 헤더 필드 (General) : request, response 메세지 둘 다 사용된다. 메세지 전체에 적용되는 정보이다.

- 리퀘스트 헤더 필드 (Request) : request 메세지에 해당하는 요청정보이다.

- 리스폰스 헤더 필드 (Response) : response 메세지에 해당하는 응답정보이다.

- 엔티티 헤더 필드 (Entity) : 엔티티 바디 (실제 전달 데이터) 정보이다. 개정되면서 Entity는 표현(Representation)이라는 명칭으로 바뀌었다. Representation = 표현 메타데이터 + 표현 데이터 이다. 

 


다음은 사용법과 관련된 기준으로 유명한 헤더들을 나누었다.

리퀘스트 (Request Header Field) 중 협상헤더

협상헤더는 요청시에만 사용한다.

 

[협상 우선순위]

1. Quality Values(q) 값을 사용하며 0~1범위에서 1에 가까울수록 우선순위가 높다. 생략하면 1이라고 가정한다.

2. 구체적인 것이 우선한다.

 

헤더 필드 내용 예시 설명
Accept 클라이언트가 선호하는 미디어 타입 Accept: text/*, text/plain text/plain이 우선시 된다.
Accept-Charset 클라이언트가 선호하는 문자 인코딩    
Accept-Encoding 클라이언트가 선호하는 압축 인코딩    
Accept-Language 클라이언트가 선호하는 자연언어 Accept-Language: ko,en-US;q=0.8 ko는 q=1, en-US는 q=0.8로 ko가 우선시 된다.

표현

표현 헤더는 전송과 응답에 모두 사용된다.

 

헤더 필드 내용 예시 설명
Content-Type 형식 Content-Type: application/json  
Content-Encoding 압축방식 Content-Encoding: gzip 읽는 곳에서 인코딩 헤더의 정보로 압축 해제
Content-Language 자연언어 Content-Language: ko  
Content-Length 길이 Content-Length: 322 바이트 단위, Transfer-Encoding을 사용하면 Content-Length를 사용하면 안 된다.

전송방식

전송방식 헤더 필드 설명
단순전송 Content-Length 단순하게 전송한다. Content-Length: 2321
압축전송 Content-Encoding Content-Encoding: gzip 방식으로 압축되어 전송한다.
분할전송 Transfer-Encoding Transfer-Encoding: chunked 이면 분할되어 전송한다. Content-Length를 사용하면 안 된다.
범위전송 Range, Content-Range request에서 Range: bytes=2001-3000 으로 범위를 지정하면,
response에서 Content-Range: bytes 2001-3000 / 3000 으로 범위와 end 값을 보내준다.

일반정보

헤더 필드 내용 설명
From 유저 에이전트의 이메일 정보 잘 사용되지 않는데 검색 엔진 등에서 요청에서 사용한다.
Referer✨ 이전 웹 페이지 주소 유입경로 분석이 가능하다.
User-Agent 유저 에이전트 애플리케이션 정보 요청에서 사용하며, 어떤 브라우저에서 장애가 발생하는지 파악하여 통계정보로 활용가능하다.
Server 요청을 처리하는 origin server의 소프트웨어 정보 응답에서 사용한다.
Date 메시지가 생성된 날짜 응답에서 사용한다.

특별한 정보

헤더 필드 내용 설명
Host 요청한 호스트 정보 요청에서 필수✨로 사용한다. 하나의 서버가 여러개의 도메인을 처리하는 경우가 많기 때문에 사용한다.
Location 페이지 리다이렉션 웹 브라우저는 300대 응답에 Location 위치로 자동 리다이렉트 한다.
200대 응답의 Location은 요청에 의해 생성된 리소스 URI를 의미한다.
Allow 허용가능한 HTTP 메소드 405(Method Not Allowed)에서 응답에 포함해야 한다.
Retry-After 다음 요청하기까지 기다려야 하는 시간 Retry-After: 날짜표기 혹은 초단위 표기 가능

인증

- Authorization: 클라이언트 인증정보를 서버에 전달

- WWW-Authenticate: 리소스 접근시 필요한 인증 방법을 정의

 

쿠키

- Set-Cookie: 서버에서 클라이언트로 쿠키를 전달한다.

- Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하여, 요청시에 서버에 전달한다.

 

HTTP는 무상태 프로토콜이기 때문에 로그인 정보등 사전 정보가 유지되지 않는다. 지속해서 사용자 정보를 첨부하여 보내야 하기 때문에 쿠키를 사용한다. 모든 request 정보에 Cookie를 자동으로 포함되게 되어있다. 보안에 민감한 데이터는 쿠키에 저장하면 안 된다.

처음 user 정보가 들어오면 서버는 쿠키를 셋팅해서 브라우저에게 넘겨준다. 브라우저는 쿠키 저장소에 쿠키 내용을 저장하고 이후 서버에 요청시 마다 그 쿠키를 포함해서 보내준다.

 

로그인정보를 예로 들면 sessionKey를 저장하여 sessionId 값을 쿠키에 저장한다. 이후 sessionId가 쿠키 값으로 보내어지니 서버는 sessionId 값으로 사용자 정보를 알 수 있다. 

 

쿠키 정보는 항상 서버에 전송되기 때문에 네트워크 트래픽 추가 유발 가능성이 있다. 따라서 최소한의 정보(sessionId, 인증토큰 등)만 사용해야 한다. 서버에 전송하지 않고 내부 데이터에 저장할 땐, 웹 스토리지(localStorage, sessionStorage)를 사용한다. 

 

생명주기

- 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지 유지

- 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지  ( expires=날짜, max-age=초 )

경로

경로를 포함한 하위 경로 페이지만 쿠키에 접근한다. 보안의 효과는 기대할 수 없다고 한다.

도메인

도메인을 명시하면 명시기준 도메인 + 서브 도메인을 포함하여 쿠키에 접근한다.

생략하면 현재 문서 도메인만 적용된다.

보안

secure 설정을 하면 HTTPS에서만 전송된다.

HttpOnly 설정을 하면 자바스크립트를 경유해서 쿠키를 취득하지 못하게 HTTP 전송에만 사용되게 한다. XSS 공격을 방지한다.

SameSite는 요청 도메인과 쿠키 설정 도메인이 같은 경우에만 쿠키를 전송한다. XSRF 공격을 방지한다.

 

더보기

TCP/IP 쉽게, 더 쉽게 + 모두의 네트워크 + 그림으로 배우는 htttp & network basic 책을 읽고, 김영한님 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 정리한 내용입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함