[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/네트워크

[Network] HTTP 일반헤더

inu 2021. 7. 6. 14:22
반응형

HTTP 헤더

  • field-name ":" field-value
  • field-name은 대소문자 구분이 없다.
  • HTTP 전송에 필요한 부가정보를 담는 역할을 한다.
  • 매우 다양한 표준 헤더가 존재하며, 필요시 임의의 헤더를 추가할 수 있다.

RFC2616 (과거버전)

출처 : https://developer.mozilla.org/docs/Web/HTTP/Messages

  • General 헤더 : 메세지 전체에 적용되는 정보 (ex. Connection: close)
  • Request 헤더 : 요청정보 (ex. User-Agent: Mozilla/5.0 ...)'
  • Response 헤더 : 응답정보 (ex. Server: Apache)
  • Entity 헤더 : 엔티티 바디에 대한 정보 (ex. Content-Type: text/html, Content-Length: 2433)
  • 메시지 본문 안에 엔티티 본문이 포함되어 있다. 따라에 이에 대한 정보를 해석하는데 Entity 헤더가 사용된다. (데이터유형, 데이터길이, 압축정보 등)

RFC7230~7235

  • 엔티티(Entity)라는 용어를 표현(Representation)으로 변경
  • Representation : Representation Metadata + Representation Data
  • 이에 따라 Entity 헤더표현 헤더로 용어변경
  • HTTP는 메시지 본문(페이로드)을 통해 표현을 전달한다.
  • 표현은 요청이나 응답에서 전달할 실제 데이터값이다.
  • cf. 표현 헤더는 표현 메타데이터와 페이로드 메시지를 구분해야하지만, 생략

표현

  • Content-Type: 표현 데이터의 형식 (ex. text/html; charset=utf-8, application/json, image/png)
  • Content-Encoding: 표현 데이터의 압축 방식 (ex. gzip, deflate, identity)
  • Content-Language: 표현 데이터의 자연 언어 (ex. ko, en, en-US)
  • Content-Length: 표현 데이터의 길이
  • 표현 헤더는 전송, 응답 둘다 사용

Content-negotitation

  • 클라이언트가 선호하는 표현을 우선적으로 전달받도록 하는 헤더정보 (요청시에만 사용)
  • Accept: 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어
  • 단일값을 넣을 수도 있지만, Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7와 같이 Quality Value값을 넣어서 전달해줄 수도 있다. 이 경우, 값이 높은 것을 우선적으로 전달받는다. (존재하지 않을 경우에 다음값으로) 값을 생략하는 경우는 1이라는 의미로 해석한다.

전송방식

  • 단순 전송 : 가장 기본적인 전달방식
  • 압축 전송 : 응답을 특정 형식으로 압축해서 전달
  • 분할 전송 : 값들을 분할하여 전달한다. (Transfer-Encoding) 이 경우 값들이 각각 나누어져 전달되기 때문에 Content-Length를 표기해선 안된다.
  • 범위 전송 : 값의 특정범위만을 필요로 할 경우 해당 부분만 전달

인증

  • Authorization : 클라이언트 인증 정보를 서버에 전달
  • WWW-Authenticate : 리소스 접근시 필요한 인증 방법 정의

쿠키

  • HTTP는 기본적으로 무상태 프로토콜이기 때문에 연결이 끊어지면 서버는 이전 요청에 대한 정보를 기억하지 못한다.
  • 모든 요청과 링크에 사용자 정보를 포함하는 방법도 있지만, 이는 보안적으로 좋지 못한 방법이다.
  • 따라서 쿠키저장소에 정보를 저장하는 방식으로 정보를 기억하고 유지한다. 사용자 로그인 세션을 유지하거나, 광고 정보 트래킹에 사용된다.
  • 네트워크에 추가적인 트래픽을 발생시키기 때문에 최소한의 정보만 사용하는 것이 중요하며, 보안에 완전 민감한 정보(주민번호, 신용카드번호 등)은 사용해선 안된다.
  • Set-Cookie : 서버에서 클라이언트로 쿠키를 전달한다. 클라이언트는 이를 쿠키저장소에 저장한다.expire나 max-age를 활용해 일정시간이 지나면 쿠키가 만료되도록 할 수 있다. 그외에도 domain 정보를 전달해 해당하는 domain에만 적용되게 하거나, path 정보를 전달해 해당 경로 페이지에만 쿠키를 접근하도록 할수도 있다.
  • Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달함

그 외 헤더에 담긴 다양한 정보

  • From : 유저 에이전트의 이메일정보. 일반적으로 잘 사용되지 않음. 검색엔진 등에서 요청정보 확인을 위해 필요로 하는 경우가 가끔 있음.
  • Referer : 접속 이전 웹페이지 주소. 유입경로를 분석하는데 활용. (cf. referrer의 오타인데, 수정하면 많은 번거로움이 있어 이대로 사용중)
  • User-Agent : 유저의 애플리케이션(웹 브라우저 등) 정보
  • Server : 요청을 처리한는 오리진 서버의 소프트웨어(apache, nginx 등) 정보
  • Date : 메시지 생성날짜
  • Host : 요청한 호스트의 도메인정보. 필수적으로 사용된다. (하나의 IP주소에 여러 도메인이 적용되어 있는 경우, 이를 명확하게 구분해주어야 함)
  • Location : 페이지 리다이렉션에 이용 (3xx 응답 결과에서 Location 헤더가 있을 때 자동으로 리다이렉트를 수행한다.)
  • Allow : 허용 가능한 HTTP 메소드. (405, Method Not Allowed에서 사용되지만 많이 사용하지 않는다.)
  • Retry-After : 특정 오류가 발생시 유저가 다음 요청을 성공적으로 수행하기까지 걸리는 시간. 현실적으로 사용되기 어려움.
반응형