Exchange HTTP Header

Die meisten Anwender nutzen ja einfach ihren Browser um per Outlook WebApp ihre Mails zu lesen. Wer aber per Fiddler, Chromium Debugger oder anderer Tools einen Blick auf die HTTP-Antworten wirft, findet den ein oder anderen interessanten Header.

Debugger-Response

Ich habe also einfach mal den im Edge, Chrome, Firefox eingebauten Debugger gestartet und den Netzwerkverkehr einer OWA-Sitzung mitschneiden lassen. Hier z.B. die Antwort auf einen Request, der die Anlagen zur Mail "107" liefert.

https://outlook.office.com/owa/service.svc?action=GetAttachmentPreviews&app=Mail&n=107

zuerst sehen wir eine klassische Header zum Thema "caching-control", "content-length" und "content-type". Aber dann sehen wir erste Header, die wohl dem Client Hinweise zur Telemetrie geben und dann beginnt die lange Liste der "X-" Header. Da sind schon einige interessante Header darunter:

Einen Teil der Felder können Sie auch einfach per PowerShell "anonym" ermitteln. Da es dann aber einen 401 gibt, bekommen Sie den Header aus der Exception:

(Invoke-WebRequest https://outlook.office.com/owa/service.svc)
$error.exception.response.headers 

Key                          Value
---                          -----
Server                       {Microsoft-IIS/10.0}
request-id                   {d3316f5c-83cb-8c04-9996-05c3e9581361}
Strict-Transport-Security    {max-age=31536000; includeSubDomains; preload}
Alt-Svc                      {h3=":443", h3-29=":443"}
X-CalculatedFETarget         {GV3P280CU004.internal.outlook.com}
X-BackEndHttpStatus          {401, 401}
Set-Cookie                   {ClientId=6246C1696633478596EB600B97935513; expires=Tue, 28-Nov-2023 16:53:24 GMT; path=/…
WWW-Authenticate             {Bearer client_id="00000002-0000-0ff1-ce00-000000000000", trusted_issuers="00000001-0000-…
X-CalculatedBETarget         {GV1P191MB2243.EURP191.PROD.OUTLOOK.COM}
X-RUM-Validated              {1}
X-RUM-NotUpdateQueriedPath   {1}
X-Content-Type-Options       {nosniff}
X-BeSku                      {WCS7}
X-OWA-DiagnosticsInfo        {0;0;0}
X-IIDs                       {0}
X-BackEnd-Begin              {2022-11-28T16:53:24.260}
X-BackEnd-End                {2022-11-28T16:53:24.260}
X-DiagInfo                   {GV1P191MB2243}
X-BEServer                   {GV1P191MB2243}
X-UA-Compatible              {IE=EmulateIE7}
X-Proxy-RoutingCorrectness   {1}
X-MS-ForwardingCorrelationId {eec3b85c-5eaa-47a5-858a-e9f85286d018}
X-Proxy-BackendServerStatus  {401}
X-FEProxyInfo                {AS4P191CA0004.EURP191.PROD.OUTLOOK.COM}
X-FEEFZInfo                  {AMS}
X-FEServer                   {GV3P280CA0112, AS4P191CA0004}
Report-To                    {{"group":"NelOfficeUpload1","max_age":7200,"endpoints":[{"url":"https://exo.nel.measure.…
NEL                          {{"report_to":"NelOfficeUpload1","max_age":7200,"include_subdomains":true,"failure_fracti…
X-FirstHopCafeEFZ            {AMS}
Date                         {Mon, 28 Nov 2022 16:53:23 GMT}

Bedeutung einiger Felder

Ich versuche mich mal an einer Deutung der ein oder anderen Felder

  • x-backend-begin und x-backendend
    Ich würde diese beiden Zeiten als Zeitstempel des Backend ansehen aus deren Differenz ich die Zeit zur Beantwortung des Requests ermitteln kann.
  • x-beserver/x-calculatedbetarget
    In meinen Fall dürfte das der Server sein, auf dem zu dem Zeitpunkt mein Postfach gelegen hat. Wer mag, kann so also indirekt erkennen, ob im Backend grade eine Datenbank zu einem anderen Server geschwenkt wurde.
  • x-feefuinfo/x-firsthopcafeefz/x-feproxyinfo
    Anhand der Namen der Server und der anderen Felder kann man wohl behaupten, dass mein Client hier mit einem System in Amsterdam gesprochen hat.
  • x-feserver
    Diese Feld kommt aber mehrfach vor und ich interpretiere es derart dass Exchange Online, anders als Exchange On-Premises sogar zwei Frontends hintereinander kaskadiert, wen dies erforderlich ist. Meine Datenbank liegt wohl in Paris  (PA/PR) und da ich Netzwerktechnisch gerade in Amsterdam lande, muss der Frontend-Server den Zugriff ja nach Paris bringen. Damit nun aber nicht alle FE-Server in einem anderen Standort den genauen Server meiner Datenbank wissen müssen, sendet der erste Frontend die Zugriffe auf einen beliebigen Frontend im Ziel-Datacenter, der dann die Anfrage zum passenden Backend routet.
    Diese Verhalten habe ich aber schon früher erkannt und z.B. auf End2End EWS beschrieben.
  • x-owa-version
    Er wer drauf anlegt, kann hier eine Exchange Versionsnummer ermitteln. Am 27.11.2022 stand hier eine 15.20.5857.22. Die damals aktuelle On-Prem Version war 15.02.1118.20 (https://learn.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019#exchange-server-2019), d.h. deutlich hintendran. Wobei die Online-Versionsnummer wenig aussagekragt hat. Wir wissen nicht, ob die Nummer vom Backend oder einem der Frontends kommt und angeblich haben sich die Wege von Exchange 2019 und Exchange Online schon vor einigen Jahren "getrennt".
  • x-owa-diagnosticsinfo
    Leider habe ich noch keine Information, was diese drei Zahlen genau bedeuten. Ich könnte mir vorstellen, dass Sie ähnlich zum "Sharepoint HealthScore (Siehe End2End-SharePoint) ein paar Details über die "Gesundheit" des Exchange Servers bzw. der Performance beschreiben könnte.

Speziell zum Feld "x-owa-diagnosticsinfo" bin ich noch auf der Suche nach weiteren Informationen und Quellen. Es könnte durchaus interessant sein, diese Daten z.B. im Rahmen eines Monitorings auszuwerten.

Weitere Links