Devops

HTTP 헤더 결과 분석

피리음 2023. 3. 22. 15:40

[C421] 스크린샷을 보고, HTTP의 구조, 요청과 응답, 헤더 등 유추할 수 있는 내용을 모두 작성하세요.

https://toss.im/  URL 로 접속한 뒤 헤더 정보를 획득한 후 결과를 해석하였습니다.

https://toss.im 에서 얻은 html 리소스 헤더를 분석하였다.

<헤더 분석 결과>

General

Request URL: https://toss.im/

=> 클라이언트는 https://toss.im 주소에 대응되는 리소스를 요청한 것을 알 수 있다.

Request Method: GET

=> 요청은 HTTP Method 중에 GET 을 사용했다.

Status Code: 200 OK

=> 요청이 성공했음을 알 수 있다.

Remote Address: 211.115.96.201:443

=> 클라이언트의 원격 주소가 211.115.96.201:443 일 것으로 예상된다. 서버로부터 응답받은 라우터는 NAT 테이블에서 원격 IP 와 매핑되는 내부 IP 주소를 찾아 클라이언트에게 정보를 전달한다.

* 다만 프록시 서버나 CDN 을 통해 요청받은 경우에는 원격 주소가 프록시 서버나 CDN 서버로 변경될 수 있다.

다른 이미지 등은 원격 주소가 달랐는데 이유가 CDN 혹은 프록시를 통했기 때문으로 보인다.

Referrer Policy: same-origin

=> 현재 페이지에서 다른 페이지로 이동할 때에, 이동하려는 페이지가 이전페이지와 동일한 호스트일 경우에만 Referer 정보를 서버에 전달한다. Strict-origin 리퍼러 정책과의 차이점이라면 same-origin 정책은 이전 페이지의 전체 URL 을 전달한다는 점이다. Strict-origin 의 경우 origin-url 만을 전달한다. (origin-url 는 scheme, hosts, port 의 조합이다.)

 

Response Headers

Connection: keep-alive

=> http 연결이 열린 상태로 유지되기 때문에 동일한 서버에 요청할 때에 새 연결을 설정하는 오버헤드를 줄일 수 있다.

content-encoding: gzip

=> gzip 형식의 인코딩방식을 사용했다. 따라서 응답 본문, 즉 payload는 gzip형식의 디코딩 방식을 사용해 압축을 풀어 원문을 얻는다.

Content-Type: text/html; charset=utf-8

=> 응답 본문이 HTML 형식으로 UTF-8 형식의 문자 집합을 사용해 인코딩되었다.

요청 헤더에서는 Accept 헤더를 포함하여 원하는 형식을 요구할 수 있으며 해당 요청에 대한 적절한 응답으로 서버는 Content-Type 헤더를 사용할 수도 있습니다.

cross-origin-opener-policy: same-origin

=> 브라우징 콘텍스트나 팝업에 대해서도 same-origin-policy를 적용한다. 이를 통해 다른 도메인인 경우에만 스크립트를 실행할 수 있도록 하여 XSS 등의 악의적 공격을 예방할 수 있다.

Date: Wed, 22 Mar 2023 01:01:19 GMT

=> GMT 기준으로 2023년 3월 22일 수요일이다.

Keep-Alive: timeout=60

=> 현재 헤더의 키값을 보면 Connection: keep-alive 으로 되어 있다. 이 때에 http 와 연결이 유지되어 있을 수 있는 최대 시간이 60초이다.

key-event-id: AGWF3PJQJQ

=> toss.im 웹 사이트에서만 별도로 정의한 키 헤더라 의미를 알 수 없다.

referrer-policy: same-origin

=> 이전 general 에서 다뤘으므로 PASS

Server: nginx

=> nginx 서버를 사용하고 있다.

Transfer-Encoding: chunked

=> 서버는 chunked 방식으로 클라이언트에게 전송하였음을 의미한다. chunked 방식은 데이터를 클라이언트에게 한번에 전달하지 않고 나누어서 전달할 때에 사용된다. 따라서 클라이언트는 한번에 전달받지 않고 여러번 나누어서 정보를 받았음을 예상할 수 있다.

vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers

=> 아래의 값에 대해서 클라이언트는 Accept 를 사용해 콘텐츠 협상을 할 수 있음을 의미한다.

   - Origin,Access-Control-Request-Method,Access-Control-Request-Headers

x-content-type-options: nosniff

=> 브라우저가 임의적으로 MIME 방식을 고르지 않도록 해 잠재적인 MIME 유형 스니핑 공격을 방지한다.

x-envoy-upstream-service-time: 13

=> 백엔드 응답결과 처리에 13 밀리세컨초가 걸렸다.

X-Frame-Options: SAMEORIGIN

=> 동일한 도메인의 iframe 만을 허용하여 보안 공격으로부터 예방한다.

x-toss-event-id: AGWF3PJQJQ

=> toss.im 웹 사이트에서만 별도로 정의한 키 헤더라 의미를 알 수 없다.

 

Request  Headers

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

=> 서버로부터 획득 요청 우선순위를 설정했다. text/html 와 application/xhtml+xml 가 제일 높은 우선순위를 가졌고 application/xml가 두번째, 이후 순서대로 우선순위가 낮아진다.

Accept-Encoding: gzip, deflate, br

=> 서버에 인코딩 우선순위를 gzip, deflate, br 순으로 요청했다.

Accept-Language: en,ko-KR;q=0.9,ko;q=0.8,en-US;q=0.7,la;q=0.6

=> 인코딩 우선순위를 한국어, 영어, la 순으로 요청했다.

Cache-Control: max-age=0

=> 클라이언트(예: 웹 브라우저)가 리소스를 캐시하지 않고 항상 서버에서 새 복사본을 요청하도록 지정한다.

Connection: keep-alive

=> 서버에 연결을 열린 상태로 유지시켜달라고 요청했다.

Cookie: _gaexp=GA... 이하 생략

=> 쿠키값을 전달했다.

Host: toss.im

=> 리소스를 얻으려고 하는 URL 의 host 가 toss.im 이다.

sec-ch-ua: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"

=> 브라우저의 버전 정보 등이다. 내 Chrome 의 버전이 110 이고 이를 통해 서버는 관련 정보를 처리할 수 있다.

sec-ch-ua-mobile: ?0

=> 모바일 장치에서 이용중이지 않음을 의미한다.

sec-ch-ua-platform: "Linux"

=> 클라이언트 브라우저에서 동작하는 운영체제가 리눅스임을 알 수 있다.

Sec-Fetch-Dest: document

=> 리소스 유형을 서버로부터 문서형식으로 받도록 요청한다. 문서 형식이란 HTML 문서 또는 다른 유형의 문서를 의미한다.

Sec-Fetch-Mode: navigate

=> 링크나 URL 을 입력함을 통해 정보를 요청했음을 서버에 알린다.

Sec-Fetch-Site: same-origin

=> 요청한 URL origin 과 요청 페이지 제공자와 같은 origin 을 사용하도록 요청합니다.

Sec-Fetch-User: ?1

=> '?1'을 통해 사용자의 상호작용을 통해서 요청되었음 알 수 있다.

Upgrade-Insecure-Requests: 1

=> 클라이언트가 보안 연결에 대한 업그레이드를 지원하고 있음을 알린다. 초기에 비보안 HTTP 를 사용하였더라도 이후의 접속에서는 HTTPS 사용을 통한 리소스 접근을 선호한다는 것을 알린다.

User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36

=>    Chat-GPT 결과로 대신함...

  • Mozilla/5.0: 원래 Mozilla 웹 브라우저와의 호환성을 나타내는 레거시 문자열입니다.
  • (X11; Linux x86_64): 이것은 클라이언트 시스템의 운영 체제 및 아키텍처를 나타냅니다. 이 경우 Linux는 x86_64 프로세서에서 실행됩니다.
  • AppleWebKit/537.36: WebKit 기반의 브라우저에서 사용하는 렌더링 엔진입니다.
  • (KHTML, like Gecko): 이것은 브라우저가 KHTML 및 Gecko 렌더링 엔진의 기능을 모두 사용하는 페이지를 렌더링할 수 있음을 나타내는 호환성 문자열입니다.
  • Chrome/110.0.0.0: 사용 중인 Google Chrome 브라우저의 특정 버전을 나타냅니다.
  • Safari/537.36: 이것은 브라우저가 Safari 렌더링 엔진의 기능을 사용하는 페이지를 렌더링할 수 있음을 나타내는 또 다른 호환성 문자열입니다.

 

이하 상세 헤더 결과 :

html 결과이다.