HTTP 헤더

김성현·2021년 3월 18일
0

개념

목록 보기
2/5

공통 헤더

요청과 응답에 모두 사용되는 헤더입니다. 이 중에서 Content 시리즈는 엔티티 헤더라고 불립니다.

  • Date : HTTP 메시지가 만들어진 시간, 자동 생성
    Date: Thu, 12 Jul 2018 03:12:27 GMT
  • Connection : 기본적으로 keep-alive로 사실상 아무런 의미가 없어 HTTP/2에서는 사라짐
    Connection: keep-alive
  • Content-Length : 요청과 응답 메시지의 본문 크기를 바이트 단위로 표시, 자동 생성
    Content-Length: 52
  • Content-Type : 컨텐츠의 타입과 문자열 인코딩을 명시, 프런트엔드에서 서버로 데이터를 보낼 때는 text/html 이런 것 대신 www-url-form-encodedmultipart/form-data같은 게 컨텐츠 타입이 됩니다.
    Content-Type: text/html; charset=utf-8
  • Content-Language : 사용자의 언어
  • Content-Encoding : 컨텐츠 압축된 방식, 응답 컨텐츠를 br, gzip, deflate 등의 알고리즘으로 압축해서 보내면, 브라우저가 알아서 해제해서 사용
    Content-Encoding: gzip, deflate

요청 헤더

  • Host : 서버의 도메인 네임(포트 포함)

    Host: www.a.com
  • User-Agent : 요청을 보낸 사용자의 로컬 정보(os, browser), 접속자 통계 등에 활용

    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
  • Accept : 서버가 요청받고 응답 할 데이터의 타입

    Accept: text/html
    Accept: image/png, image/gif
    Accept: text/*
    
    Accept-Charset: utf-8
    Accept-Language: ko, en-US
    Accept-Encoding: br, gzip, deflate
  • Authorization : 인증 토큰(JWT든, Bearer 토큰이든)을 서버로 보낼 때 사용하는 헤더, API 요청시 토근 필요

    Authorization: Bearer XXXXXXXXXXXXX
  • Origin : POST같은 요청을 보낼 때, 요청한 주소, 요청을 보낸 주소와 받는 주소가 다르면 CORS 문제가 발생

  • Referer : 이 페이지 이전의 페이지 주소, 어떤 페이지를 통해 왔는지 분석 가능(애널리틱스에 사용)

    Referer: https://www.zerocho.com/category/JavaScript

응답 헤더

  • Access-Control-Allow-Origin : 프론트 주소를 적어 CORS 문제 해결

    Access-Control-Allow-Origin: www.zerocho.com
    Access-Control-Allow-Origin: * // 모든 주소 CORS 요청 허용, 보안 취약
    
    // 유사한 헤더
    Access-Control-Request-Method
    Access-Control-Request-Headers
    Access-Control-Allow-Methods
    Access-Control-Allow-Headers

    CORS 요청 시에는 미리 OPTIONS 주소로 Access-Control-Request-Method로 실제로 보내고자 하는 메서드를 알리고, Access-Control-Request-Headers로 실제로 보내고자 하는 헤더들을 알립니다.
    Allow가 붙은 헤더들은 Request에 대응되는 애들로, 서버가 허용하는 메서드와 헤더를 응답하는데 사용됩니다. Request랑 Allow가 일치하면 CORS 요청이 이루어지는 것이죠.

  • Allow : Access-Control-Allow-Methods랑 비슷하지만, CORS 요청 외에도 적용

    Allow: GET // GET 요청만 받겠다.
  • Content-Disposition : 응답 본문을 브라우저에서 처리하는 방식

    Content-Disposition: inline // 웹페이지 화면에 표시
    Content-Disposition: attachment; filename='filename.csv' // 파일명으로 다운로드
  • Location : 300번대 응답이나 201 Created 응답일때 리다이렉트 될 주소

    HTTP/1.1 302 Found
    Location: /  // '/' 주소로 리다이렉트
  • Content-Security-Policy : 로드 할 다른 외부 파일 지정, XSS 공격 방어

    Content-Security-Policy: default-src 'self' // 자신의 도메인 파일들만 로드
    Content-Security-Policy: default-src https:
    Content-Security-Policy: default-src 'none'

캐시 헤더

  • Cache-Control : 캐싱에 관련된 옵션, 주로 GET요청에만 사용

    Cache-Control: no-store // 캐싱 안함
    Cache-Control: no-cache // 캐시 쓰기전 서버에 확인
    Cache-Control: must-revalidate // 만료된 캐시만 서버에 확인
    Cache-Control: public 또는 private //  공유 캐시 또는 개인 캐시
    Cache-Control: public, max-age=3600 // 유효시간 1시간(초단위) 설정
  • Age : max-age 시간 내에서 몇초가 지났는지

    Age: 60
  • Expires : 응답 컨텐츠 만료 기간, Cache-Control의 max-age가 있는 경우 이 헤더는 무시

    Expires: Thu, 26 Jul 2018 07:28:00 GMT
  • ETag : HTTP 컨텐츠가 바뀌었는지를 검사, 같은 주소의 자원이더라도 컨텐츠가 달라지면 ETag값 변경

    Etag: W/"3bf2-wdj3VvN8/CvXVgafkI30/TyczHk"
  • If-None-Match : 서버측에서 ETag를 감시하다가 달라지면 다시 컨텐츠를 전송하도록 요청

    If-None-Match: W/"3bf2-wdj3VvN8/CvXVgafkI30/TyczHk"
  • Set-Cookie : 서버에서 클라이언트(브라우저)한테 이런 이런 쿠키를 저장하라고 명령하는 응답 헤더

    Set-Cookie: 키=값; 옵션들
    
    Expires: 쿠키 만료 날짜
    Max-Age: 쿠키 수명, Expires는 무시
    Secure: https에서만 쿠키 전송
    HttpOnly: 자바스크립트에서 쿠키에 접근x, XSS를 방어하기 위해 필수
    Domain: 도메인이 일치하는 요청에서만 쿠키 전송
    Path: 패스와 일치하는 요청 요청에서만 쿠키 전송

    써드 파티 쿠키
    도메인이 다른 쿠키로 클라이언트를 추적하고 있는 쿠키이다. 구글이나 페이스북같은 곳이 써드 파티 쿠키를 적극적으로 사용한다.

  • Cookie : 클라이언트가 서버한테 쿠키를 보내줄때 사용하는 요청 헤더

    Cookie: 키=값; 키=값;

X-로 시작하는 헤더
요청이 어디서부터 건너왔는지 알려주는 헤더

X-Forwarded-For: 1.2.3.4, 5.6.7.8, 9.10.11.12 // 현재까지 거쳐온 서버의 IP
X-Forwarded-Host: www.a.com // 원래 서버의 호스트명
X-Forwarded-Proto: https // 원래 서버의 프로토콜

// 위 3가지를 동시에 처리하는 표준 헤더
Forwarded: for=1.2.3.4; host=www.a.com; proto=https; by=5.6.7.8, 9.10.11.12

frame, iframe, object 태그 안에서 페이지를 렌더링하는 것을 방지

X-Frame-Options: DENY // 클릭재킹(내가 무언가를 눌렀는데, 실제로는 그게 아니라 다른 게 눌리는 해킹 방법) 방지
X-Frame-Options: SAMEORIGIN // 자신의 페이지를 불러오는 것은 허용(iframe)
X-Frame-Options: ALLOW-FROM https://www.a.com // 특정한 사이트 로드 허용

ZeroCho

profile
JS개발자

0개의 댓글