Network/Network(Http)

김영한 (HTTP 웹 기본지식 8) HTTP 헤더 1

Tony Lim 2021. 2. 21. 21:38
728x90

header-field = field-name":" OWS field-value OWS (OWS: 띄어쓰기 허용)

field-name 은 대소문자 구문 없음

HTTP 전송에 필요한 모든 부가정보

헤더 분류

  • General 헤더 = 메시지 전체에 적용되는 정보, 예) connection: close
  • Request 헤더 = 요청 정보, 예)User-Agent: Mozilla/5.0
  • Response 헤더 = 응답 정보, 예)Server: Apache
  • Entity 헤더 = 엔티디 바디 정보, 예) Content-Type: text/html, Content-Length: 3423

HTTP body

메시지 본문(message body) 은 엔티티 본문(entity body) 을 전달하는데 사용

엔티티 본문은 요청이나 응답에서 전달할 실제 데이터

엔티티 헤더는 엔티티 본문의 데이터를 해석할 수 있는 정보 제공

엔티티 -> 표현  으로 최신버젼에서는 말이 바뀌었다.

표현 = 표현 메타데이터 + 표현 데이터 = 요청이나 응답에서 전달할 실제 데이터

 

표현 (서버가 전달하는것)

Content-Type = 표현 데이터의 형식

Content-Encoding = 표현 데이터의 압축방식

Content-Language = 표현 데이터의 자연언어

Content-Length = 표현 데이터의 길이

 

협상 (콘텐츠 네고시에이션) 클라이언트가 선호하는 표현 요청

Accept: 클라이언트가 선호하는 미디어 타입 전달

Accept-Charset = 클라이언트가 선호하는 문자 인코딩

Accept-Encoding = 클라이언트가 선호하는 압축 인코딩

Accept-Language = 클라이언트가 선호하는 자연언어

협상헤더는 요청시에만 사용

 

협상과 우선순위1

Quality Values(q)

0~1 클수록 높은 우선순위를 가지게 된다.

구체적인 것이 우선한다.

예) Accept: text/* , text/plain, text/plain;format=flowed, */*

 

전송방식 (서버입장)

단순 전송 = Content-Length 가 딱 정해져있다. 

압축 전송 = Content-Encoding: gzip 으로 압축해서 전송을 해준다. 

분할 전송 = Transfer-Encoding: chunked 덩어리로 쪼개서 보냄. 5byte 보내고 Hello다. 클라이언트가 먼저 Hello를 받아 볼수 있다.  Content-length를 넣어서는 안됨 예상이 안되고 byte정보가 다 있다.

범위 전송 = 이미지를 받는데 중간에 끊겼으면 나머지 절반을 달라고 요청을 하는 방식이다.

 

일반정보

Referer =이전 웹페이지 주소 ,  유입 경로 분석 가능

A->B 로 이동하는 경우 B를 요청할 때 Referer: A를 포함해서 요청 , 요청에서 사용

User-Agent = 내 웹브라우저 정보, 요청에서 사용

Server = 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보 , 응답에서 사용

Date = 응답에서 사용

 

특별한 정보

Host = 요청한 호스트 정보(도메인), 하나의 서버가 여러 도메인을 처리해야할 떄, 하나의 IP주소에 여러 도메인이 적용되어있을때, 요청에서 사용 

Location (페이지 리다이렉션)

웹브라우저는 3xx 응답의 결과에 Location 헤더라가있으면, Location 위치로 자동 이동한다. 

201 (Created) = Location 값은 요청에 의해 생성된 리소스 URI

3xx (Redirection) = Location 값은 요청을 자동으로 리디렉션하기 위한 대상 리소스를 가리킴

 

Allow = 허용가능한 HTTP 메서드

Allow:GET,HEAD,PUT 잘 쓰지 않음

 

Retry-After = 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

 

인증

Authorization = 클라이언트 인증 정보를 서버에 전달

WWW-Authenticate = 리소스 접근시 필요한 인증 방법 정의 , 401 Unauthorized 응답과 함께

 

쿠키

Set-Cookie = 서버에서 클라이언트로 쿠기 전달(응답)

Cookie = 클라이언트가 서버에서 받은 쿠기를 저장하고, HTTP 요청시 서버로 전달

요청할때마다 쿠키 저장소에서 조회 자동으로 포함이 된다.

서버에서 쿠키를 세팅할 때

  • 예) set-cookie: sessionId=abcde1234; expires=Sat,26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com;Secure
  • 위 의 방식처럼 user= 홍길동을 주는것은 위험 하니 서버 DB에 따로 Session id를 만들어놔서 쿠키와 함께 보내준다. 그러면 요청할때마다 Session id 를 쿠키에 넣어서 요청한다.
  • 사용자 로그인 세션 관리 ,광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송이됨
  • 네트워크 추가 트래픽 유발 , 최소한의 정보만 사용(세션 id, 인증 토큰) , 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지 (localStorage, sessionStorage) 참고
  • 보안에 민감한 데이터는 저장하면 안됨

쿠키 - 생명주기

세션 쿠키= 만료날 짜를 생략하면 브라우저 종료시 까지만 유지

영속 쿠키 = 만료 날짜를 입력하면 해당 날짜까지 유지

 

쿠키 - 도메인

명시 = 명시한 문서 기준 도메인 + 서브 도메인 포함

예) domain=example.org 하면 dev.example.org도 쿠키 접근함

생략한 경우 dev.example.org 는 쿠키 접근 불가능

 

쿠키 - 경로

예) path=/home 이경로를 포함한 하위 경로페잊만 쿠키 접근, 

일반적으로는 path=/ 루트로 지정

 

쿠키 - 보안 Secure , HttpOnly, SameSite

Secure = 쿠키는 http, https 를 구분하지 않고 전송 , Secure를 사용하면 https인 경우에만 전송

HttpOnly = XSS공격방지 , 자바스크립트에서 접근불가(document.cookie) , HTTP 전송에만 사용

SameSite = XSRF 공격방지 , 요청 도메인과 쿠케에 설정된 도메인이 같은 경우만 쿠키 전송

 

 

 

 

 

728x90