HTTP Header/구조

강혜인·2025년 5월 29일

WEB_Hack

목록 보기
2/18

HTTP 구조

  • Start line
    • Response인지 Request인지에 따라 형태가 다르다.
  • Header
    • header-field : field-value로 구성되어 있다.
    • HTTP 전송에 필요한 모든 부가 정보를 가지고 있다.
  • Body
    • 메시지의 본문을 담고 있다.

HTTP Request 구조

  • Start line
    • HTTP Method - 요청시 보내는 HTTP 메소드 형태
      • (GET, POST, PUT, PATCH, DELETE…)
    • Request Target - 어디로 보내는지에 대한 URI
    • HTTP Version - HTTP 버전으로 현재까지는 대부분이 HTTP/1.1이다
      • HTTP/2, HTTP/3까지 있다.
  • Header
    • Host - 호스트 URL
    • User-Agent → 클라이언트 정보
    • Accept - 서버에서 해당 타입에 데이터를 보내달라고 요청하는 헤더
    • Authorization : JWT 같은 인증 토큰을 서버로 보낼 때 사용하는 헤더

→ HTTP Method가 GET 방식인 경우 Body는 따로 존재 하지 않는다. / Body가 있는 경우도 있지만 GET방식의 Body를 못받는 서버가 있어 권장하지 않는 방법이다.

HTTP Response 구조

  • Start line
    • HTTP Version - 응답 온 메시지의 HTTP 버전 정보
    • Status Code - 응답 코드
    • Status text - 응답 상태
  • Header
    • Date - 응답 온 일시
    • Content-Type → 응답 데이터의 타입
    • Cache-Control → 캐시용 Header
  • Body
    • 요청에 대한 응답 값

HTTP Header

  • HTTP 헤더는 HTTP 메시지(요청/응답)와 본문에 대한 정보를 말해준다. → 해당 메시지가 제공하는 기능에 대한 최소한의 정보가 정리된 요약본 같은 것
  • 헤더에는 프로토콜에 불필요한 내용을 담으면 전송되는 데이터의 크기가 커져 빠른 전송이 불가능하기 때문에, 프로토콜을 설계할 때부터 꼭 필요한 내용만 담아야하고, 모든 기능이 표현되어야 한다.

→ HTTP Header는 General Header, Request/Response Header, Entity Header로 구성되어있다.

General Header

→ 요청과 응답 모두에 적용되지만 body에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더

  • Date : 현재 시간
  • Pragma : 캐시제어
    • HTTP/1.0에서 쓰던 것으로, HTTP/1.1에서는 Cache-Control이 쓰인다.
    • Cache-Control : 캐시제어(no-cache) / 모든 캐시를 쓰기 전에 서버에 해당 캐시를 사용해도 되는지 확인함 + public : 공유 캐시에 저장해도 된다. + max-age : 캐시의 유효기간을 명시하겠다.
      • private : ‘브라우저’같은 특정 사용자 환경에만 저장하겠다.
      • must-revalidate : 만료된 캐시만 서버에 확인하겠다.
      • no-store : 캐시를 저장하지 않겠다.
  • Upgrade : 프로토콜 변경시 사용
  • Via : 중계(프록시)서버의 이름, 버전, 호스트명
  • Connection : 네트워크 접속을 유지할지 말지 제어
    • HTTP/1.1 은 kepp-alive로 연결 유지하는게 default
  • Transfer-Encoding : body 내용 자체 압축 방식
    • 지정 본문에 데이터 길이가 나와서 조금씩 브라우저가 해석해 화면에 제공할 때 이 기능 사용
    • ‘chunked’면 본문의 내용이 동적으로 생성되어 길이를 모르기 때문에 나눠서 보낸다는 의미
  • Content-Encoding : 본문의 리소스 압축 방식
    • transfer-encoding은 body 자체이므로 content-encoding이랑은 다르다.
  • Content-Type : 본문의 미디어 타입(MIME)
    • ex) application/json, text/html
  • Content-Length : 본문의 길이
  • Content-language : 본문을 이해하는 데 가장 적절한 언어
    • 한국 사이트여도 영어가 적합하면 영어로 지정된다.
  • Expires : 자원의 만료 일자
  • Allow : 사용 가능한 HTTP 메소드 방식
  • Last-Modified : 최근에 수정된 날짜
  • ETag : 캐시 업데이트 정보를 위한 임의의 식별 숫자

Request/Response Header

→ Request Header는 HTTP 요청에서 사용되지만 메시지의 컨텐츠와 관련이 없는 패치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더

→ Response Header는 위치 또는 서버 자체에 대한 정보(이름, 버전)과 같이 응답에 대한 부가적인 정보를 갖는 헤더

  • Host : 요청하려는 서버 호스트 이름과 포트 번호
  • User-agent : 클라이언트 프로그램 정보
  • Referer : 현재 페이지로 연결되는 링크가 있던 이전 웹 페이지 주소
  • Accept : 클라이언트가 처리 가능한 MIME Type 종류 나열
  • Accept-charset : 클라이언트가 지원 가능한 문자열 인코딩 방식
  • Accept-language : 클라이언트가 해석 가능한 압축 방식 지정
  • If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득, 캐시가 만료되었을 때에만 데이터를 전송하는데 사용
  • Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 Header
  • Origin : 서버로 Post 요청을 보낼 때 요청이 어느 주소에서 시작되었는지 나타내는 값
    • 경로 정보는 포함하지 않고 서버 이름만 포함
    • 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS error가 발생한다.
  • Cookie : 쿠키 값 (key-value로 표현)
    • Set-Cookie Header와 함께 서버로부터 이전에 전송됐던 저장된 HTTP 쿠키를 포함한다.

  • Server : 웹 서버의 종류
  • Age : max-age 시간 내에서 얼마나 흘렀는지 초 단위로 알려주는 값
  • Referrer-policy : 서버 Referrer 정책을 알려주는 값
    • ex) origin, no-referrer, unsafe-url
  • WWW-Authenticate : 사용자 인증이 필요한 자원을 요구할 시, 서버가 제공하는 인증 방식
  • Proxy-Authenticate : 요청한 서버가 프록시 서버인 경우 유저 인증을 위한 값
  • Set-Cookie : 서버측에서 클라이언트에게 세션 쿠키 정보를 설정

Entity Header

컨텐츠 길이나 MIME 타입과 같이 Entity Body에 대한 자세한 정보를 포함하는 Header

  • Content-Type : 리소스의 media type 명시
  • Content-Length : bite 단위를 가지는 개체 본문의 크기
  • Content-language : 본문을 이해하는 데 가장 적절한 언어
  • Content-location : 반환된 데이터 개체의 실제 위치
  • Content-disposition : 응답 메시지를 브라우저가 어떻게 처리할지
    • 주로 다운로드에 사용한다.
  • Content-Security-Policy : 다른 외부 파일을 불러오는 경우 차단할 리소스와 불러올 리소스 명시
  • Content-Encoding : 본문의 리소스 압축 방식
    • 주로 Content-Type과 같이 사용되며, 참조되는 미디어 타입을 얻도록 디코드하는 방법을 클라이언트가 알게 해줌
  • Location : 301, 302 상태코드일 때만 볼 수 있는 헤더로 서버의 응답이 다른 곳에 있다고 알려주면서 해당 위치를 지정
  • Last-Modified : 리소스의 마지막 수정 날짜
  • Allow : 지원되는 HTTP 요청 메소드
  • Expires : 자원의 만료 일자
  • ETag : 리소스의 버전을 식별하는 고유한 문자열 검사기
    • 주로 캐시 확인용으로 사용

0개의 댓글