[그림HTTP]요청 헤더 필드(2)

박상준·2023년 7월 20일
0
post-thumbnail

Accept-Encoding

  • 브라우저가 지원하는 콘텐츠 인코딩 방식을 알려줌.
Accept-Encoding: gzip, deflate
-> 클라이언트가 gzip 과 deflate 방식으로 인코딩된 경우에만 디코딩할수있음을 알려줌
  • gzip, compress , deflate ,identity 의 인코딩 밸류가 존재.
  • Accept 헤더 필드와 같이 품질지수에 의해 상대적 우선 순위 지정
  • * 지정으로 모든 인코딩 포맷을 허용

Accept-Language

  • 클라이언트가 처리할 수 있는 자연어의 세트와 자연어 세트의 상대적인 우선 순위를 전달하기 위하여 사용
Accept-Language: ko-kr, en-us;q=0.7,en;q=0.3
  • ko-kr 이 품질지수 1로 최대 우선

  • en-us 는 2순위

    한국어 리소스가 있으면 한국 → 없으면 영어로 응답을 받길 원함

Authorization

Authorization: Basic dWVub3NlbjpwYXNzd29yZA==

  • 인증정보를 담아서 전달할때 사용함
  • 보통 401 미인증 발생시 이어지는 헤더필드입니다.

Expect

Expect: 100-continue
  • 클라이언트가 서버에 특정 동작을 수행할 것을 요청하는 방법을 제공
  • EX
    • 클라이언트가 매우 큰 파일을 업로드시
    • Expect: 100-continue 헤더를 포함하여 요청
    • 서버는 확인 후
      • 가능하면 ⇒ 100 Continue 상태코드와 메시지 전달
      • 불가능하면 ⇒ 417 Expectation Failed 상태코드와 메시지 전달
  • 네트워크 비효율성을 방지

From

From: info@hackr.jp
  • 에이전트 책임자 메일주소를 전달

Host

Host: www.hackr.jp

HTTP/1.1 에서 유일하게 필수인 헤더 필드임.

  • 1개의 서버에서 도메인을 여러개 할당이 가능한 가상 호스트 개념과 연관
  • 요청에서 HOST: 의 밸류값에 맞는 리소스를 서버가 응답할 수 있음.
  • HOST 가 설정되어있지않으면 값을 비워서 전달

If-Match

  • If-XXX 는 조건부 요청인 헤더필드임
If-Match: "123456"

로 클라이언트가 요청을 전송한 경우

서버는 리소스의 ETag 값이 일치한 경우에만 요청을 받을 수 있음.

일치 X → 412 Precondition Failed 반환

  • ETag (엔티티 태그)
    • 웹 서버가 웹 리소스에 할당하는 고유한 식별자.
    • 웹 서버가 리소스를 변경시 ETag 값도 변경됩니다.
      • 클라이언트는 이전에 받았던 ETag 를 기억하다가 ⇒ 같은 리소스 요청시 ETag를 헤더필드 값에 넣어서 보냄
      • 서버는 ETag 값을 비교하여 같지 않으면 요청을 거부할 수 있음 ⇒ **동시 업데이트 충돌 방지**

If-Match 에서는 엄격한 일치를 정책으로 삼기에, ETag 값이 정확하게 일치해야합니다.

If-Modified-Since

If-None-Match

  • If-Match와 반대로 동작합니다.
  • ETag 와 일치하지 않는다면 요청을 받습니다.

If-Range

  • HTTP 조건부 요청의 한가지
  • 클라이언트가 요청한 리소스의 일부만 받고 싶은 경우 사용
  • 예시
    GET /index.html
    If-Range: "123456"
    Range: bytes=5001-10000
    • “123456” ⇒ ETag , 서버에서의 해당 Etag가 최신 버전과 일치하는지 체크함.
      1. Etag 가 일치하면, 서버는 클라이언트가 요청한 파일의 해당 부분을 전송.

        HTTP 상태코드 206 Partial Content 반환

      2. Etag가 일치하지 않는다면, 클라이언트의 파일이 최신이 아니기에, 서버는 파일의 전체를 반환하고, HTTP 상태코드 200 OK 반환

  • 사용하는 이유에 대한 예시
    GET /index.html
    If-Match: "123456"
    Range: bytes=5001-10000
    • Etag 가 맞지 않음으로 ⇒ 클라이언트가 가진 파일이 최신이 아니면. ⇒ 서버는 412 Precondition Failed 반환하고, 클라이언트가 전체 리소스를 다시 요청해야함. ⇒ 2번의 요청이 필요함 ( 자원의 낭비임 )

If-Unmodified-Since

If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT
  • If-Modified-Since 의 반대동작
  • 지정 날짜 이후에 갱신 X 시에만 요청을 받아들임

Max-Forwards

Max-Forwards: 10
  • 개요
    • TRACE 또는 OPTIONS 메서드와 사용됨
    • 요청이 경우해야 하는 최대 서버 수 지정
    • Max-Forwards 0이 되면, 서버는 더 이상 요청을 전달하지 않고 응답을 반환.
  • 어떨때 사용하나..
    • 요청이 여러 프록시 서버를 거치는 경우.. 요청 전송이 실패 혹은 요청이 루프하는 문제가 생긴 경우, 문제가 어디에서 발생했는지 파악가능
  • 예시

Proxy-Authorization

Proxy-Authorization: Basic dGlwOjkpNLAGIFY5
  • 개요
    • 프록시 서버에서 인증 요구를 받은 경우, 인증에 필요한 클라이언트 정보를 전달
  • Authorization 헤더 필드와 차이
    • Authorization 필드는 클라이언트와 서버 간의 HTTP 엑세스 인증에 사용됨,
    • Proxy-는 클라이언트와 프록시 서버 사이에 이루어 집니다.
  • 예시
    • 위 헤더 예시는 Basic 인증 방식 + dGlwOjkpNLAGIFY5( 사용자 인증 정보)
    • Basic , Digest, Bearer 등의 인증방식이 별도로 더 있음.

Range

Range: bytes=5001-10000
  • 개요
    • 리소스의 일부분만 요청할 때 사용함.
    • 원하는 리소스의 특정 범위를 지정가능
  • 서버 응답에 대한 Range 영향
    • Range 헤더 필드의 범위의 요청 처리 가능 ⇒ 206 (Partial Content) 와 함께 요청한 범위의 리소스 반환
    • Range 요청 처리 X ⇒ 200 OK 반환 + 전체 리소스
  • 예시
    GET /resource HTTP/1.1
    Range: bytes=5001-10000
    특정 웹 페이지의 5001 바이트에서 10000 바이트까지의 데이터만을 요청

Referer

Referer: http://www.hackr.jp/index.htm
  • 개요
    • 클라이언트가 요청보내는 리소스의 이전 URI 전달
    • 사용자가 현재 페이지에 도달했는지 추적가능
  • 특수 케이스
    • 원래는 요청과 함께 보내짐
    • 하지만, 사용자가 브라우저의 주소창에 URI 직접 입력, 보안상 적절하지 않는 경우 생략 가능
      • 이전 페이지가 ID, 비밀번호 등의 보안정보를 가지고 있다면 Referer 를 통해 그 정보가 다른 서버에 노출 위험 있음
  • 예시

TE

  • 개요
    • 클라이언트가 수신할 수 있는 전송 인코딩 방식 + 상대적 우선순위 서버에 전달
  • 사용법
    • TE 헤더필드로 서버에게 청크 전송 인코딩이 가능한지 물어볼 수 있음
    • 그에 따른 메타데이터인 트레이러를 받을 수 있는지
  • 예시
    TE: gzip, deflate;q=0.5
    • gzip 인코딩 방식을 받을 수 있으며, deflate 인코딩 방식도 가능하지만, 우선순위가 낮음

      TE: trailers
    • 클라이언트가 청크 전송 인코딩 + 트레일러를 받을 수 있따는 것을 알림

User-Agent

User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML,
like Gecko) Chrome/18.0.1025.162 Safari/535.195
  • 헤더필드에 요청한 브라우저와 유저 에이전트 이름 전달용
profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글