[HTTP강의] HTTP 헤더

2022. 5. 25. 16:36개발공부/HTTP

728x90

본 글은 인프런 김영한님 강의를 정리한 글입니다. 자세한 강의내용은 강의를 통해 들어보시길 추천드립니다.


HTTP 전송에 필요한 모든 부가정보가 담긴 메시지입니다.

  • 표현(Representation)
  • 협상(Content-Negotiation)
  • 전송
  • 일반정보
  • 특별한 정보
  • 인증
  • 쿠키

표현

DB의 바이너리 타입이나 바이트 코드의 파일형식 등을 HTTP로 통신하려면 표현 타입을 지정해줘야 합니다. 주로 JSON을 사용합니다. 이렇게 표현형식, 압축(인코딩), 언어, 길이로 이루어진 헤더의 부분을 표현이라고 합니다.

  • Content-Type : 미디어 타입을 말합니다.(text/HTML, JSON, png...)
  • Content-Encoding : 표현 데이터를 압축할 경우에 사용합니다.(gzip...)
  • Content-Language : 기반이 되는 언어를 말합니다.(ko, ko-KR, en, en-US...)
  • Content-Length : 메시지 데이터의 길이를 나타내며, 단위는 byte 입니다. 분산전송(Transfer-Encoding)에선 사용할 수 없습니다.

협상

클라이언트가 선호하는 표현을 요청하는 부분입니다. 서버가 요청을 모두 실행시켜준다는 것은 아니지만, 협상을 통해 요청을 맞춰주는 노력을 할 수 있습니다.

  • Accepted Language : 원하는 언어를 전달할 수 있으며, 우선순위도 정해줄 수 있습니다. ko:0.9;en:0.8...

전송

  • 단순전송 : 일반적인 전송을 말합니다.
  • 압축전송 : gzip으로 압축해서 전송하는 것을 말합니다.
  • 분할전송 : Transfer-Encoding에 명시되어 전달됩니다. chunck들로 쪼개져 전송되기 때문에 content-length가 사용불가 합니다.
  • 범위전송 : 데이터가 클 때, 범위를 나눠 전송하는 방식입니다.

일반정보

헤더에 담기는 일반정보입니다.

  • referer : 이전 페이지 요청에 대한 URI입니다. 이는 유입경로 분석 시에도 사용될 수 있습니다.
  • user-agent : Application에 대한 정보를 알 수 있어서 통계정보로 사용할 수 있습니다.
  • server : 중개하는 서버가 아닌 Origin 서버에 대한 내용을 응답으로부터 전달되어집니다. 예시) Server: Apache/2.4.1 (Unix)

특별한 정보

  • Host : 필수값이며 하나의 서버(IP)가 여러 도메인을 가지고 있을 때, 호스트를 통해 연결된 도메인을 지정해줄 수 있습니다.
  • Location : 앞서 정리한 HTTP 상태코드 3xx에서 리다이렉트가 필요할 때 서버에서 응답 시 Location 헤더에 URI를 담아서 준다했는데 그 부분입니다.
  • Allow : 허용 가능한 HTTP 메서드를 반환해줍니다.
  • Retry-After : 서비스가 언제까지 불능 상태인지 표기해줍니다.

인증

인증방식(JWT, OAuth...)에 따라 형식은 다르지만, 헤더값 Authorization: Basic xxxxxx과 같이 전달됩니다. 만약 401 UnAuthorized 오류 상태코드가 떴다면 응답 시 헤더에 WWW-Authentication을 함께 리턴해야합니다.

쿠키

로그인 하는 경우, 유지해야하는 정보가 생기는데 그때 쿠키를 사용하면 HTTP 무상태(stateless)를 보완해줄 수 있습니다. 서버에서 set-cookie에 쿠키를 담아 보내면 클라이언트에선 쿠키 저장소에 저장해 필요할 때마다 꺼내어 사용해줄 수 있습니다.

  • set-cookie : 서버에서 주는 sessionid, path, secure 등으로 구성됩니다.

쿠키는 sessionKey나 OAuth의 경우 인증토큰을 쿠키로 서버에 요청할 때마다 서버가 처리를 해야하는데, 이를 보완하기 위해 웹 스토리지(LocalStorage)에 담아놓고 필요할 때마다 꺼내어 쓸 수 있는 방법이 있습니다.

하지만 쿠키는 안전하지 않기 때문에 민감정보(주민등록번호, 전화번호)는 사용하지 않아야합니다.

  • 도메인 지정 : 쿠키가 어떤 도메인에 속하는지 설정을 가능하게 합니다.
  • 경로 : 경로를 포함한 하위 경로 패키지는 쿠기에 접근할 수 있습니다.
  • 보안 : secure는 HTTPS만 쿠키 전송이 가능하게 막을 수 있습니다.
  • HTTPOnly : XSS(Cross-Site-Script) 공격을 방지하기 위해 쿠키가 HTTP에만 사용가능 하고 스크립트(Javascript) 내에선 사용이 불가하도록 합니다.
  • SameSite : 요청도메인, 설정된 도메인이 같을 때만 쿠기 전송이 가능하도록 해줍니다. XSRF(Cross-Site-Request-Forgery)를 방지할 수 있습니다.

참조: 인프런 김영한님 HTTP 강의

'개발공부 > HTTP' 카테고리의 다른 글

[HTTP강의] HTTP 캐시  (0) 2022.05.26
[HTTP강의] HTTP 상태코드  (0) 2022.05.24
[HTTP강의] HTTP 메서드  (0) 2022.05.23
[HTTP강의] HTTP 특징  (0) 2022.05.23
[HTTP강의] TCP/UDP와 URI  (0) 2022.04.21