Wenn Sie in Excel auf einen Hyperlink klicken, wird die Ressource dreimal aufgerufen (oder zweimal, wenn die URL zuvor besucht wurde). Erstes und zweites Mal versteckt, drittes Mal wie erwartet in einem Browser.
Einzelheiten
Ich verwende das HYPERLINK-Formular in Excel 2016 wie das folgende, aber das Problem tritt auch auf, wenn Sie ohne Formular und nur mit dem Hyperlink-Feature arbeiten:
=HYPERLINK(CONFIRM_NO_DATA_URL&B3)
Wie auch immer, es soll eine URL wie diese aufrufen
http://example.org/index.php?action=replyToEmailId&emailId=123123123
Wenn ich auf die Zelle klicke, wird eine neue Registerkarte mit der richtigen URL geöffnet.
Aber: Die URL wird tatsächlich dreimal aufgerufen (ich habe es zuerst bemerkt, weil drei E-Mails mit einer kurzen Verzögerung gesendet wurden).
Ich habe versucht herauszufinden, woher das kam, indem ich die HTTP-Header in eine Datei packte. Es stellte sich heraus, dass Excel den Hyperlink intern kurz vor dem Öffnen des Links in einem Browser aufruft. Auch die zur Verfügung gestellten HTTP-Header unterscheiden sich von der endgültigen Anfrage.
Erste versteckte Anfrage
Dies ist die erste Anfrage, die die HEAD HTTP-Request-Methode verwendet:
{ "HTTP_USER_AGENT": "Microsoft Office Excel 2014 (16.0.10730) Windows NT 10.0", "HTTP_X_OFFICE_MAJOR_VERSION": "16", "HTTP_X_MS_COOKIEURI_REQUESTED": "t", "HTTP_X_FEATUREVERSION": "1", "HTTP_ACCEPT_AUTH": "badger,Wlid1.1,Bearer", "REMOTE_PORT": "50216", "REQUEST_METHOD": "HEAD", "REQUEST_TIME_FLOAT": 1537284526.406, "REQUEST_TIME": 1537284526 }
Die HEAD-Methode ist mit GET identisch, mit der Ausnahme, dass der Server KEINEN Nachrichtentext in der Antwort zurückgeben darf. Quelle: [w3.org] [1]
Zweite versteckte Anfrage
Die zweite Anforderung ist schwer zu identifizieren und sieht aus, als würde Excel mehrere Benutzeragenten verspotten:
{ "HTTP_ACCEPT": "*\/*", "HTTP_USER_AGENT": "Mozilla\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office)", "HTTP_ACCEPT_ENCODING": "gzip, deflate", "REMOTE_PORT": "50221", "REQUEST_METHOD": "GET", "REQUEST_TIME_FLOAT": 1537284527.807, "REQUEST_TIME": 1537284527 }
Frage
Wie kann dieses Verhalten auf Excel-Seite verhindert werden?
(Natürlich kann ich es in meinem PHP-Skript verhindern, indem ich das HTTP_USER_AGENT mit " ms-office " oder REQUEST_METHOD " HEAD " blockiere, aber ich bevorzuge eine saubere Lösung).
Seitennotizen
UPDATE # 1
Ich habe gerade diese SO- Frage gefunden, die irgendwie dasselbe Verhalten beschreibt: https://stackoverflow.com/questions/24993813/link-in-excel-cause-duplicate-invocation
UPDATE # 2 Während ich tiefer in dieses Thema eintauche, finde ich immer mehr SO- Threads, die so miteinander verbunden sind, wie dies hier beschrieben wird und eine schöne Beschreibung dieser "Funktion" enthält: https://webmasters.stackexchange.com/a/71151
Es gibt jedoch einen kleinen Unterschied. Die Anfragemethode der ersten Anfrage in meinem Fall ist HEAD, nicht OPTION wie in der oben genannten Antwort. Trotzdem hilft mir das immer noch nicht, das Problem zu lösen.
UPDATE # 3 Beim Versuch, dies zu reproduzieren, stellte ich fest, dass nicht zwei, sondern drei Anfragen gemacht wurden.