Excel: Klicken Sie dreimal auf die Hyperlink-Aufruf-URL

964
n.r.

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.

0

2 Antworten auf die Frage

0
Bes Gh

Ich bin nicht sicher, aber als ich testete, habe ich festgestellt, dass Excel Links im "Internet Explorer" öffnet, um nach Sicherheit oder nach Existenz zu suchen.

Wenn Sie beispielsweise eine falsche URL eingeben, die von Excel nicht angezeigt werden kann, ist ein Sicherheitsproblem aufgetreten, kein Brawser.

Ich habe es getestet

=HYPERLINK("https://test.test") 

und diese Fehlermeldung erhalten

Ich glaube nicht, dass es möglich ist, diese Art von Problem von Excel zu "beheben"

Ja, das habe ich auch gemerkt. Es scheint eine Art Funktion zu sein, aber es wäre großartig, wenn Sie Excel daran hindern würden. Für mich als Benutzer ist es auch völlig in Ordnung und auch kein Unterschied, wenn ich in meinem Browser eine 404 erhalte. n.r. vor 5 Jahren 0
0
n.r.

Dieses Verhalten (zumindest die erste HEAD-Anforderung) wird durch die mit Office 2007 eingeführte so genannte Microsoft Office Protocol Discovery verursacht. Siehe blogs.msdn.microsoft.com :

Der Zweck der HEAD-Anforderung besteht darin, zu prüfen, ob der Inhalt an der URL-Position als Dokument vorhanden ist und nicht einfach als temporäre Ressource, die für eine schreibgeschützte Sitzung heruntergefahren wird

Die HEAD-Methode ist mit GET identisch, mit der Ausnahme, dass der Server KEINEN Nachrichtentext in der Antwort zurückgeben darf. Quelle: w3.org

Laut diesem Technet-Thread gibt es keine Möglichkeit, diese Funktion zu deaktivieren.

Problemumgehung

Da es keine Möglichkeit gibt, diese Funktion tatsächlich zu deaktivieren, können Sie die Anforderung nur auf der Serverseite blockieren (oder eine clientseitige Firewall verwenden ...):

PHP-Whise ist es möglich, eine solche Anfrage mit diesen Zeilen abzulehnen. Dadurch wird einfach REQUEST_METHOD für die erste verborgene Anforderung abgefangen und der seltsame Benutzeragent aus der zweiten ausgeblendeten Anforderung erneut geprüft:

 if ($_SERVER['REQUEST_METHOD'] == 'HEAD' OR  strpos($_SERVER['USER_AGENT'], 'ms-office') != NULL) {  throw new Exception('This script may only be called directly'); die();  } 

Heads up : Dies funktioniert in dem oben beschriebenen Szenario, passen Sie es gerne an, um das Blockieren des Verkehrs zu verhindern, das eigentlich "erwünscht" ist.

Lesen Sie weiter