HTTP Header 이번에 확실히 정리하고 가세요!

YoungHo-Cha·2021년 9월 21일
18

network

목록 보기
1/5
post-thumbnail

매번, 자바의 HttpServletRequest, HttpServletResponse를 이용하여 Http Message를 다루어 왔다.

그런데 직접 Http Request를 요청하는 일이 생겼다.
막상 수기로 작성하려다 보니까 막막하다..

그래서 이번 기회에 정리를 해보려고 한다.


🧐목차

  • Http Header란?
  • Http Request python code로 생성
  • Http Header 속성
  • 마치며

🌈 Http Header란?

HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다.

부가적 정보라 함은, 대표적으로 "요청자", "컨텐트 타입", "캐싱" 등등(수십 가지)가 있다.

Header의 종류

Http Header는 다음과 같이 4가지가 있다.

  1. General header : 요청과 응답 모두에 적용되지만 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더.

  2. Request header : 페치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더. == 내가 보내는 메세지의 헤더

  3. Response header : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더. == 내가 받은 메세지의 헤더

  4. Entity header: 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더.

4가지를 살펴보자!

실제로 존재하는 사이트에서 위의 4가지 정보를 살펴보자.

3가지의 Header가 보인다.
(Entity Header는 request, response에 녹아있는 것 같다.)


🌈 Request Message 만들어보기

실제로 적용되는 Request Message를 작성해보자.

네이버 쇼핑을 이용한다.

  1. 네이버 쇼핑에 가서 "신발" 검색 후, 2페이지로 이동

  2. 개발도구 > network 창 켜기

  3. 다음 항목을 복사해서 URL 요청

    결과는

    데이터 파일이 잘 넘어오고 있다.

  4. URL에 따른 Http Request Header 생성해보기

    항목 내용을 "curl"로 복사해주자.

    다음 사이트에 가서 curl 생성을 해보자.
    https://curl.trillworks.com/

    나는 python으로 생성해보았다.


🌈 Http Header 속성

내용이 너무 많아서 대표적인 항목만 살펴보자.

General Header (공통 헤더)

1. Date

Date: (day-name), (day) (month) (year) (hour):(minute):(econd) GMT

예시

"Date: Wed, 21 Oct 2015 07:28:00 GMT"

2. Connection

close, Keep-Alive가 있다.
-- close는 메세지 교환 후 TCP 연결 종료
-- Keep-Alive는 메세지 교환 후 TCP 연결 유지

예시

Connection: close
Connection: Keep-Alive


Request Header

1. Host

요청하는 자의 호스트명, 포트 번호를 포함하고 있다.

- 예시

Host: developer.mozilla.org

2. User-Agent

요청자의 소프트웨어 정보를 표현한다.
-- 소프트웨어 정보 : os, 브라우저, 기타 버전 정보

User-Agent를 Request에 넣지 않고 요청을 했을 경우, 정보를 주지 않는 곳도 있다. 이유는 봇(스크래핑, 크롤링, 기타 등등)이 요청을 하는 경우에는 User-Agent의 경로로 오지 않기 때문이다.

하지만 봇에 User-Agent를 기입하면 이것마저도 봇이 아니라 사람이 요청한 줄 안다..ㅋㅋ

- 예시

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0

3. Accept

요청자가 원하는 미디어의 타입 및 우선순위를 표현한다.

Accept는 부속 속성이 더 있다.

  • Accept-Language : 사용자가 원하는 언어셋이다.
  • Accept-Encodig : 사용자가 원하는 인코딩 방식이다.

- 예시

Accept: application/json, text/plain, */*
-> json > text > all type 순으로 받는다는 표현이다.
Accept-Language: en-US,en;q=0.5
-> 언어는 en이라는 표현이다. q는 가중치다.
Accept-Encoding: gzip, deflate, br
-> gzip, deflate, br(Brotli) 등등의 압축 포맷을 받는다는 표현이다.

서버에 의해서 이전에 저장된 쿠키를 포함시키는 속성이다.

- 예시

cookie: aaa=3LEMQRTO6EBF4; page_uid=bbb123p0YihsshvyCBRssssstWG-3033307; nx_ssl=100; nid_inf=333333333;NID_AUT=PSS11Z0wmL63LVUNoGF2ft123123123123/AomAn5zPT6Ni2uGyyuWIfp9hb; NID_JKL=TNg7Y994769rvA+5dcCHhdB7TBdl12345676+nQdCM=; AD_SHP_BID=9;spage_uid=hRDT1233455
(네이버 쇼핑에서의 쿠키 - 내 맘대로 수정좀 했음)

5. Referer

Referer 요청 헤더는 현재 요청을 보낸 페이지의 절대 혹은 부분 주소를 포함한다.

두 가지의 속성을 더 가지고 있다.

  • referrer-policy : 우선 스펠링이 다르다.(오타가 스펙이 되어버렸다고 한다..) 이 헤더는 요청과 함께 얼마나 많은 레퍼럴 정보를 포함하는지 알려준다.

  • referer-after : 응답 헤더에 속하는 것인데, 다음에 올 요청이 이루어지기 전에 사용자가 대기해야 하는 시간을 가르킨다.

- 예시

referer:https://search.shopping.naver.com/search/allquery=%EA%B3%BC%EC%9E%90&cat_id=&frm=NVSHATC


Response Header

1. Server : 서버 소프트웨어의 정보를 표현한다.

2. content-encoding : 응답하는 내용의 인코딩 포맷을 표현한다.

3. content-type: 응답하는 내용의 타입과 문자 포맷을 표현한다.

4. cache-control : 캐시 관리에 대한 정보를 표현한다.

ex) cache-control :
no-cache(서버측에 캐시를 사용해도 되는지 확인),
no-store(캐싱x),
must-revalidate(만료 캐시만 서버측에 확인),
public(중개 서버에 저장 가능)/private(사용자 브라우저에만 등록),
max-age(캐시 유효기간)

5. date : 응답 메세지가 생성된 시간을 표현한다.

6. vary : 캐시된 응답을 향후의 응답에 사용할 기준을 표현한다.

ex) Vary: User-Agent
이렇게 설정되어 있으면, 모바일 유저에게 데스크탑 유저를 위한 캐시 컨텐츠가 제공되지 않게 할 수 있다.

8. Age : max-age내에서 캐시가 얼마나 지났는지 초 단위로 표현한다.


마치며

이것말고도 수많은 속성과 수많은 내용이 있다. 기본적인 틀만 알아놓고 필요하다면 구글 서칭을 통해서 알아보도록 하자!

📋 Reference

profile
관심많은 영호입니다. 궁금한 거 있으시면 다음 익명 카톡으로 말씀해주시면 가능한 도와드리겠습니다! https://open.kakao.com/o/sE6T84kf

0개의 댓글