X-REQUEST-ID http 헤더는 무엇입니까?


98

나는 이미이 주제를 많이 봤고,이 헤더, Heroku에서의 사용, Django 기반 프로젝트에 대한 다양한 기사를 읽었습니다.

그러나 여전히 내 머릿속은 모두 혼란 스럽습니다.

  • 이 헤더의 목적은 무엇입니까?
  • 사용자 개인 정보를 침해합니까?
  • 사용자 추적에 도움이 될 수 있습니까?

1
@Wrikken 나는 이미 그것을했습니다 ... 그리고 나는이 헤더에 대해 여전히 혼란 스럽습니다.
Stephan

그런 다음 (1) 웹 요청을 애플리케이션으로 전달 된 요청과 연관시키기 위해 (2) 아니요, 사용자가 요청을 보내지 않기 때문에 라우터가 설정합니다. (3) (2)를 참조하십시오. 디버깅하는 동안 요청합니다.
Wrikken 2014 년

답변:


174

클라이언트가 액세스하는 웹 서비스를 운영하는 경우 요청 (클라이언트가 볼 수 있음)을 서버 로그 (서버가 볼 수 있음)와 연관시키는 것이 어려울 수 있습니다.

의 아이디어는 X-Request-ID클라이언트가 임의의 ID를 만들어 서버에 전달할 수 있다는 것입니다. 그런 다음 서버는 생성하는 모든 로그 문에 해당 ID를 포함합니다. 클라이언트가 오류를 수신하면 버그 보고서에 ID를 포함하여 서버 운영자가 해당 로그 문을 조회 할 수 있습니다 (타임 스탬프, IP 등에 의존하지 않아도 됨).

이 ID는 클라이언트에 의해 (무작위로) 생성되므로 민감한 정보가 포함되어 있지 않으므로 사용자의 개인 정보를 침해해서는 안됩니다. 요청마다 고유 ID가 생성되므로 사용자 추적에도 도움이되지 않습니다.


@Wrikken은 자신의 의견에서 ID가 라우터와 여기에 해당 클라이언트에 의해 설정되었다고 언급합니다. 클라이언트는 무엇입니까?
Stephan

4
클라이언트는 서버에 요청을 보내는 소프트웨어이며 브라우저 또는 JMeter와 같은 스트레스 테스트 도구 일 수 있습니다. 또한 서버는 요청 ID를 원래 클라이언트에서 제공하지 않은 경우 생성하고이를 다른 서버에 전달할 수 있습니다. 예를 들어 웹 서버가 ID를 생성하여 응용 프로그램 서버에 전달합니다.
isapir

1
Heroku 블로그는 X-Request-ID가 여러 로그 항목을 개별 HTTP 요청과 연관시키는 데 도움이된다고 선언합니다. blog.heroku.com/…
Stephan

4
표준 HTTP 헤더가 아닌 CorrelationId라고도합니다. en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID. 클라이언트와 서버 간의 HTTP 요청을 연관시킵니다.
Major

모든 요청이 사용자 세션과 함께 제공되는 경우에도 X-Request-ID를 첨부해야합니까?
Jerry Chin

14

목적 : 멱 등성

모든 요청에 ​​대해 변경되지만 요청 재시도시 동일하게 유지되는 ID를 사용하여 수신자는 요청이 두 번 이상 처리되지 않도록 할 수 있습니다.

다음은 일부 API 제공 업체의 인용문입니다.

모든 POST, PUT 및 PATCH HTTP 요청에는 재시도시 멱 등성 메시지 처리를 보장하는 데 사용되는 고유 한 X-Request-Id 헤더가 포함되어야합니다.

당신이 경우 그것을 임의의 문자열, 독특한 당 요청을 , 당신의 개인 정보 보호 침해,도 추적을 사용하지 않습니다.

멱 등성이 제공해야하는 것에 대해 더 알고 싶다면 이 통찰력있는 기사를 읽어보십시오 .

NB Stefan Kögl이 언급했듯이이 헤더는 표준화되지 않았으므로 "X-"접두사가 사용되지 않습니다.


5
"일부 API 공급자"는 이러한 방식으로 X-Request-Id 헤더를 사용할 수 있지만 이는 표준 동작이 아닙니다. 일반적으로 이러한 목적으로 사용할 수 없습니다.
Stefan Kögl 2010 년

또 다른 간단한 스 니펫 : restapitutorial.com/lessons/idempotency.html
JayRizzo

1

이야기 / 유추를 사용한 설명

인터넷이 (평상시처럼) 재생되고 있으므로 Tellstra에 전화하면 영원히 전화를 기다리고 있습니다. 마침내 당신은 좌절감에 전화를 포기하고 내려 놓습니다. (실패한 통화입니다. Tellstra의 통화 기록에 기록이 있습니다.)

"그게 다야, 옴부즈맨에 전화 할게!"

그러나 Obmudsman에는 수천 개의 통화 기록이 있습니다 (Tellstra의 모든 실패한 쿼리). Telstra에 전화했는데 전화가 성공하지 못했다고 말하면 충분하지 않습니다 . 옴부즈맨은 Tellstra의 모든 통화 기록에서 어떤 것이 귀하의 것인지 어떻게 알 수 있습니까? ?

이것이 바로 X-Request-ID가 들어오는 곳입니다. Tellstra에 전화 할 때마다 임의의 번호 (X-Request-ID)를 전달하고 이것은 Tellstra 레코드에 기록됩니다. 이렇게하면 옴부즈맨 (모든 기록에 액세스 할 수 있음)이 수신 전화를 찾아서 무엇이 잘못되었는지 알아낼 수 있습니다.

HTTP에 스토리 적용

http 요청에도 동일하게 적용됩니다. 클라이언트가 오류 또는 큰 보고서를 발행 할 때 무엇이 ​​잘못되었는지 알아내는 데 사용되는 ID입니다 (백엔드 개발자로서).

이것이 기본적인 요약입니다. 질문 등은 그냥 댓글을 게시하고 정리하겠습니다.


1
여기에서 "유사"는 제 생각에 명확성보다는 혼란을 더합니다. 전화 통화의 경우 수신자가 자동으로 기록하는 임의의 번호를 전달할 방법이 없으므로 결과적으로 당신의 이야기는 무의미합니다.
Mark Amery

-12

이 요청 헤더는 동기화에 사용할 수 있습니다. 오프라인 기능을 제공하는 ToDo 목록을 작성했다고 가정 해 보겠습니다. 사용자가 3 개의 항목을 만들고 각 항목에는 오프라인 애플리케이션에서 고유 한 UUID가 제공됩니다. 네트워크 연결이 가능하면 레코드가 서버에 게시되고 데이터베이스에서 자동 생성 된 해당 ID가 반환됩니다. 그런 다음 앱의 ID (예 : HTML "li"요소의 "id"속성)를 바꿀 수 있습니다.


5
여기에 설명 된 시나리오는 UUID 전송을위한 HTTP 헤더 사용을 의미하지 않습니다.
Stephan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.