inblog logo
|
{CODE-RYU};
    HTTP

    [HTTP] HTTP 헤더 정리

    류재성's avatar
    류재성
    Jun 17, 2024
    [HTTP] HTTP 헤더 정리
    Contents
    1. HTTP 헤더란?2. 일반 헤더(General Header)종류3 .엔티티 헤더(Entity Header)종류4. 응답 헤더(Response Header)종류5. 요청 헤더(Request Header)종류6. HTTP 캐시 제어 헤더

    1. HTTP 헤더란?

    💡
    HTTP 메세지중 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송하며, HTTP 헤더는 대소문자를 구분하지 않는 이름과 콜론(:) 그리고 값으로 이루어져있다.
    특히 쿠키나 세션방식의 인증방식을 사용할 때, 토큰을 헤더에 실어 전달한다.
     
    notion image
    헤더는 크게 일반 헤더(General Header), 엔티티 헤더(Entity Header), 요청 헤더(Request Header),
    응답 헤더(Response Header) 가 있다.
     
    notion image
    💡
    개발자 모드의 General 은 HTTP 요청 및 응답에 대한 메타데이터이고 일반 헤더는 아님.
    Request URL : 요청이 보내진 URL
    Request Method : HTTP 메서드(GET, POST 등)
    Status Code: 서버 응답의 상태 코드 (예: 200 OK).
    Remote Address : 요청이 보내진 원격 주소
    Referrer Policy : 보안과 관련된 설정
     

    2. 일반 헤더(General Header)

    💡
    HTTP 일반 헤더는 HTTP 요청 및 응답과 함께 전송되는 메타데이터이다. 이 헤더는 요청과 응답 모두에 적용되며, 전송되는 데이터와는 독립적이다.
     

    종류

    1. Cache-Control
    • 캐시 지침을 나타내며, 클라이언트와 서버 간의 데이터 캐시 방식을 제어
    💡
    Cache-Control: no-cache 데이터가 캐시되지 않음
    2. Connection
    • 네트워크 연결 관리에 대한 지시를 제공하며, 연결을 유지할지 종료할지를 명시
    💡
    Connection: keep-alive는 연결을 유지
    3. Date
    • 메시지가 생성된 날짜와 시간을 나타낸다.
    💡
    Date: Tue, 15 Nov 1994 08:12:31 GMT
    4. Pragma
    • HTTP/1.0에서 캐시 제어를 위해 사용되었으며, 주로 no-cache 디렉티브를 포함한다.
    💡
    Pragma: no-cache
    5.Trailer
    • 메시지 바디의 끝에 따라올 추가 헤더 필드를 나타낸다.
    💡
    Trailer: Expires
    6.Transfer-Encoding
    • 메시지 바디의 전송 코딩 방식을 지정한다.
    💡
    Transfer-Encoding: chunked
    7. Upgrade
    • 클라이언트가 현재 프로토콜을 업그레이드할 수 있음을 나타낸다.
    💡
    Upgrade: HTTP/2.0
    8.Via
    • 중간 프록시 서버 또는 게이트웨이를 통해서 메시지가 전달되었음을 나타낸다.
    💡
    Via: 1.0 fred, 1.1 example.com (Apache/1.1)
    9.Warning
    • 메시지와 관련된 일반 경고를 제공하며, 캐시와 관련된 문제를 포함한다.
    💡
    Warning: 199 Miscellaneous warning
     
     

    3 .엔티티 헤더(Entity Header)

    💡
    컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤
     

    종류

    1.Allow
    서버가 지원하는 HTTP 메서드를 나열한다.
    💡
    Allow: GET, POST, PUT
    2.Content-Encoding
    콘텐츠가 인코딩된 방식을 나타낸다.
    💡
    Content-Encoding: gzip
    3.Content-Language
    콘텐츠의 언어를 나타낸다.
    💡
    Content-Language: en
    4.Content-Length
    메시지 바디의 바이트 단위 길이를 나타낸다.
    💡
    Content-Length: 348
    5.Content-Location
    요청된 리소스의 대체 위치를 나타낸다.
    💡
    Content-Location: /index.htm
    6.Content-MD5
    콘텐츠의 MD5 해시를 제공하여 무결성을 검사한다.
    💡
    Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
    7.Content-Range
    부분 콘텐츠의 범위를 나타낸다.
    💡
    Content-Range: bytes 200-1000/67589
    8.Content-Type
    콘텐츠의 MIME 타입을 나타낸다.
    💡
    Content-Type: text/html; charset=UTF-8
    9.Expires
    콘텐츠의 만료 날짜와 시간을 나타낸다.
    💡
    Expires: Thu, 01 Dec 1994 16:00:00 GMT
    10.Last-Modified
    리소스의 마지막 수정 날짜와 시간을 나타낸다.
    💡
    Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
     
     

    4. 응답 헤더(Response Header)

    💡
    클라이언트가 서버로 요청을 보낼 때 사용
    notion image
     

    종류

    1.Access-Control-Allow-Credentials
    브라우저가 자격 증명(쿠키, HTTP 인증 헤더)을 포함한 요청을 할 수 있는지 여부를 나타낸다.
    💡
    Access-Control-Allow-Credentials: true
    2.Access-Control-Allow-Origin
    CORS 요청을 허용하는 출처를 지정한다.
    💡
    Access-Control-Allow-Origin: https://wonit.tistory.com 특정 출처(여기서는 https://wonit.tistory.com)에서 온 요청을 허용
    3.Connection
    현재 TCP 연결을 계속 유지하거나 종료할 것인지 여부를 나타낸다.
    💡
    Connection: upgrade
    4.Date
    응답이 생성된 날짜와 시간을 나타낸다.
    💡
    Date: Thu, 13 Jun 2024 11:06:40 GMT
    5.Sec-Websocket-Accept
    웹소켓 핸드셰이크 응답을 검증하는 값이다.
    💡
    Sec-Websocket-Accept: v+0neS26vFs3x2D2wNgkE4Eg7JQ=
    6.Set-Cookie
    클라이언트에 쿠키를 설정하는 데 사용된다.
    💡
    Set-Cookie: sessionId=abc123; Path=/; HttpOnly
    7.Upgrade
    클라이언트와 서버 간의 프로토콜을 변경할 것을 지시한다.
    💡
    Upgrade: websocket
    8.Uwwebsockets
    특정 웹 애플리케이션에서 웹소켓의 개수나 설정과 관련된 정보를 전달한다.
    💡
    Uwwebsockets: 20
    9.Vary
    캐시 서버가 요청 헤더의 다른 값을 기반으로 응답을 저장할지 결정한다.
    💡
    Vary: Origin
     

    5. 요청 헤더(Request Header)

    💡
    서버가 클라이언트에 응답을 보낼 때 사용
    notion image
     
     

    종류

    1.Accept
    클라이언트가 처리할 수 있는 미디어 타입을 지정한다.
    💡
    Accept: text/html
    2.Accept-Charset
    클라이언트가 처리할 수 있는 문자 인코딩을 지정한다.
    💡
    Accept-Charset: utf-8
    3.Accept-Encoding
    클라이언트가 이해할 수 있는 콘텐츠 인코딩을 지정한다.
    💡
    Accept-Encoding: gzip, deflate
    4.Accept-Language
    클라이언트가 선호하는 언어를 지정한다.
    💡
    Accept-Language: en-US
    5.Authorization
    사용자 인증을 위해 자격 증명을 포함한다.
    💡
    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    6.Cache-Control
    캐싱 메커니즘을 제어한다.
    💡
    Cache-Control: no-cache
    7.Connection
    클라이언트와 서버 간의 연결 설정을 지정한다.
    💡
    Connection: keep-alive
    8.Cookie
    클라이언트의 쿠키 데이터를 포함한다.
    💡
    Cookie: sessionId=abc123
    9.Content-Length
    요청 본문의 길이를 바이트 단위로 지정한다.
    💡
    Content-Length: 348
    10.Content-Type
    요청 본문의 MIME 타입을 지정한다.
    💡
    Content-Type: application/json
    11.Date
    요청이 발송된 날짜와 시간을 포함한다.
    💡
    Date: Tue, 15 Nov 1994 08:12:31 GMT
    12.Host
    요청을 보낸 서버의 도메인 이름과 포트 번호를 포함한다.
    💡
    Host: www.example.com
    13.Referer
    클라이언트가 현재 요청된 페이지로 이동하기 직전에 머물렀던 페이지의 주소를 포함한다.
    💡
    Referer: http://www.example.com/previous-page
    14.User-Agent
    클라이언트 애플리케이션의 정보를 포함한다.
    💡
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
     

    6. HTTP 캐시 제어 헤더

     

    6.1 캐시란?

    💡
    캐시(Cache)는 주기억장치에서 자주 사용하는 프로그램과 데이터를 하드디스크로부터 가져오는데 시간이 많이 걸리니 캐시 저장소에 임시로 적재해두고 빠르게 접근하기 위한 기술이다.
    notion image

    6.2 Cache-Control

    💡
    클라이언트가 이전과 동일한 데이터를 요청한다면 서버와 재통신은 낭비가 된다. 이러한 낭비를 줄이기 위해 Cache-Control 을 사용한다.
     

    Cache-Control 종류

    💡
    no-cache: 캐시된 데이터를 사용하기 전에 서버에 유효성을 확인하도록 한다. no-store: 요청 및 응답 데이터를 캐시에 저장하지 않는다. must-revalidate: 만료된 캐시 항목은 서버에 재검증을 받아야 한다. public: 응답을 브라우저와 프록시 캐시에 저장할 수 있다. private: 응답을 특정 사용자 브라우저 캐시에만 저장한다. max-age: 캐시된 응답의 유효 기간을 초 단위로 설정한다. s-maxage: 공유 캐시(프록시)에서만 유효 기간을 설정한다.
     
     

    6.3 Expires

    💡
    응답 컨텐츠의 만료 날짜와 시간을 설정한다. 만약 Cache-Control의 max-age가 설정된 경우 무시된다. 예시) Expires: Wed, 21 Oct 2021 07:28:00 GMT
     
    notion image
     

    6.4 ETag

    💡
    리소스의 고유 식별자를 설정하여 캐시된 리소스의 변경 여부를 확인한다. 예시) ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4
     

    6.5 Last-Modified

    💡
    리소스가 마지막으로 수정된 날짜와 시간을 설정한다. 예시) Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
    Share article

    {CODE-RYU};

    RSS·Powered by Inblog