본문으로 건너뛰기
AZ Tools

HTTP 헤더 참조

표준 HTTP 요청·응답·CORS·캐싱·보안·쿠키 헤더 약 50개의 검색 가능한 참조.

헤더설명
Date↔메시지가 생성된 시각입니다. IMF-fixdate 형식으로 씁니다.
Connection↔현재 주고받기가 끝난 뒤에도 네트워크 연결을 유지할지 정합니다(keep-alive / close).
Transfer-Encoding↔전송을 위해 메시지 본문을 어떻게 인코딩했는지 나타냅니다 — chunked, compress, deflate, gzip, identity.
Content-Type↔본문의 미디어 타입입니다(예: application/json; charset=utf-8).
Content-Length↔본문의 크기(바이트)입니다.
Content-Encoding↔본문에 적용한 압축 방식입니다(gzip, br, zstd).
Content-Language↔본문이 쓰인 자연어입니다(예: ko-KR).
Content-Disposition↔본문을 화면에 바로 표시할지, 내려받을 첨부 파일로 다룰지 정합니다.
Host→서버의 도메인 이름입니다(HTTP/1.1에서는 필수).
User-Agent→클라이언트 소프트웨어(브라우저, 봇, 라이브러리)를 식별합니다.
Accept→클라이언트가 처리할 수 있는 미디어 타입입니다(예: text/html, application/json).
Accept-Encoding→클라이언트가 풀 수 있는 콘텐츠 인코딩입니다(gzip, br).
Accept-Language→클라이언트가 선호하는 언어입니다(예: ko, en;q=0.8).
Referer→요청을 일으킨 페이지의 URL입니다 — 맞습니다, 표준 문서에서 철자가 틀린 그대로 굳었습니다.
Authorization→인증 정보입니다 — Basic, Bearer, Digest 등.
Range→리소스의 일부만 요청합니다(예: bytes=0-1023). 206 응답을 받게 됩니다.
If-None-Match→조건부 요청 — 리소스의 ETag가 일치하지 않을 때만 리소스를 돌려받습니다.
If-Modified-Since→조건부 요청 — 주어진 날짜 이후 바뀌었을 때만 리소스를 돌려받습니다.
Origin→CORS 또는 fetch 요청을 시작한 페이지의 스킴 + 호스트 + 포트입니다.
Server←요청을 처리하는 서버 소프트웨어를 식별합니다.
Location←리다이렉트(3xx)의 대상 URL, 또는 새로 만든 리소스(201)의 위치입니다.
ETag←리소스의 특정 버전을 가리키는 불투명 식별자입니다 — If-None-Match와 함께 씁니다.
Last-Modified←리소스가 마지막으로 바뀐 시각입니다 — If-Modified-Since와 함께 씁니다.
Retry-After←다시 시도하기 전에 기다릴 시간입니다 — 429, 503과 함께 씁니다.
WWW-Authenticate←클라이언트에게 인증을 요구합니다 — 401 응답과 함께 보냅니다.
Vary←이 응답에 영향을 주는 요청 헤더 목록입니다 — 캐시는 이를 항목의 키로 씁니다.
Allow←리소스에 허용된 HTTP 메서드입니다 — 405 응답과 함께 보냅니다.
Access-Control-Allow-Origin←응답을 읽어도 되는 출처입니다 — 정확한 출처 또는 "*". 자격 증명이 있으면 "*"를 쓸 수 없습니다.
Access-Control-Allow-Methods←교차 출처 요청에서 리소스에 허용된 메서드입니다 — 프리플라이트 응답에 담아 보냅니다.
Access-Control-Allow-Headers←클라이언트가 포함해도 되는 사용자 정의 요청 헤더입니다 — 프리플라이트 응답에 담아 보냅니다.
Access-Control-Allow-Credentials←자격 증명(쿠키, 기본 인증)을 보낸 경우에도 응답을 공유할 수 있는지 나타냅니다.
Access-Control-Max-Age←브라우저가 프리플라이트 응답을 캐시해도 되는 시간(초)입니다.
Access-Control-Expose-Headers←기본 허용 목록 외에 JavaScript가 읽을 수 있는 응답 헤더입니다.
Access-Control-Request-Method→프리플라이트에서, 실제 요청이 사용할 메서드입니다.
Access-Control-Request-Headers→프리플라이트에서, 실제 요청에 포함될 사용자 정의 헤더입니다.
Cache-Control↔캐싱 지시어입니다 — max-age, no-store, public, private, immutable 등.
Expires←응답이 만료되는 절대 날짜입니다 — Cache-Control: max-age가 있으면 그쪽이 우선합니다.
Pragma→레거시 캐싱 제어입니다 — HTTP/1.0 호환을 위한 "Pragma: no-cache".
Age←프록시 기준으로, 응답이 원본 서버에서 만들어진 지 얼마나 지났는지(초) 나타냅니다.
Strict-Transport-Security←HSTS — 이후 방문에서 HTTPS를 강제합니다. 하위 도메인과 preload도 선택해 포함할 수 있습니다.
Content-Security-Policy←CSP — 브라우저가 스크립트, 스타일, 프레임 등을 어느 출처에서 불러올 수 있는지 제한합니다.
X-Frame-Options←페이지를 프레임 안에 넣을 수 있는지 정합니다 — DENY, SAMEORIGIN. CSP frame-ancestors로 대체되었습니다.
X-Content-Type-Options←"nosniff"는 MIME 스니핑을 끕니다 — 브라우저는 선언된 Content-Type을 그대로 믿어야 합니다.
Referrer-Policy←나가는 요청에 Referer URL을 어디까지 실어 보낼지 정합니다.
Permissions-Policy←페이지와 그 프레임에서 브라우저 기능(카메라, 마이크, 위치 정보 등)을 켜거나 끕니다.
Cross-Origin-Opener-Policy←COOP — 브라우징 컨텍스트를 교차 출처 문서와 격리합니다. SharedArrayBuffer를 쓰려면 필요합니다.
Cross-Origin-Resource-Policy←CORP — 이 리소스를 불러올 수 있는 출처를 제한합니다.
Cookie→클라이언트가 서버로 다시 보내는 쿠키입니다.
Set-Cookie←클라이언트에게 쿠키를 하나 이상 저장하라고 요청합니다 — 속성: Path, Domain, Max-Age, Secure, HttpOnly, SameSite.

사용법

  1. 검색창에 헤더 이름(cache-control) 또는 키워드(cors·redirect) 입력.
  2. 카테고리 칩으로 범위 좁히기 — 예: Security로 CSP·HSTS·COOP 비교.
  3. 각 행의 복사 버튼으로 헤더 이름 복사.

자세한 설명

펼치기

실무에서 마주치는 HTTP 헤더를 검색할 수 있는 참고 자료입니다. 각 헤더가 무슨 일을 하는지, 요청과 응답 중 어느 쪽으로 흐르는지 혹은 양쪽 다인지, 그리고 CORS·캐싱·보안·쿠키 중 어디에 속하는지 보여 줍니다. 범주로 걸러 내거나 이름과 설명을 아울러 검색할 수 있습니다. 두 번 읽어 볼 만한 것은 방향 열입니다. 엉뚱한 쪽에 붙은 헤더는 그냥 아무 일도 하지 않기 때문입니다. Accept는 클라이언트가 원하는 바를 알리는 요청 헤더이고, Content-Type은 실제로 보내는 본문을 설명합니다. 이 둘을 헷갈리는 것이 서버가 요청을 무시하는 흔한 원인입니다. 헤더 이름은 정의상 대소문자를 구분하지 않으며 HTTP/2와 HTTP/3은 소문자로 보내므로, 코드에서 대조할 때는 소문자로 맞추세요.

자주 묻는 질문

왜 Cache-Control이 양방향으로 표시됨?

Cache-Control·Content-Type·Date·Connection 같은 일부 헤더는 요청·응답 둘 다 유효. 테이블에서 ↔로 표시.

Origin과 Referer 차이?

Origin은 scheme + host + port — CORS·POST 요청에 전송. Referer는 이전 페이지의 전체 URL이며 주로 분석 용도 — Referrer-Policy로 얼마나 누설할지 제어.

CORS preflight 헤더는 언제 사용?

fetch가 non-simple 메서드(PUT·DELETE)나 커스텀 헤더 사용 시 브라우저가 먼저 OPTIONS preflight 전송. Access-Control-Request-*는 preflight에, Access-Control-Allow-*는 응답에. 허용되면 실제 요청이 뒤따름.

헤더 이름은 대소문자를 구분하나?

구분하지 않는다. 필드 이름은 대소문자를 가리지 않으므로 Content-Type과 content-type은 같은 헤더다. HTTP/2와 HTTP/3은 한발 더 나아가 전송 시 이름을 소문자로 보내도록 요구한다. 대문자로 보내는 것처럼 보이는 사이트인데 디버깅 도구에는 소문자로 나오는 이유가 이것이다. 코드에서는 헤더 이름을 대소문자 무시로 비교하라. 값은 별개이고 보통 대소문자를 구분한다.

브라우저의 자바스크립트에서 실제로 읽을 수 있는 헤더는?

교차 출처 응답에서는 짧은 허용 목록뿐이다. cache-control, content-language, content-length, content-type, expires, last-modified, pragma가 전부이고, 서버가 Access-Control-Expose-Headers에 더 적어주어야 그 이상을 읽을 수 있다. 네트워크 패널에는 보이는 헤더가 fetch API에서는 null로 돌아오는 이유가 이것이다. 브라우저는 받았지만 페이지에는 읽게 해주지 않는 것이다.

관련 도구