При нажатии на гиперссылку в Excel ресурс будет вызываться три раза (или два раза, если URL был посещен ранее). Первый и второй раз скрыты, третий раз, как и ожидалось в браузере.
подробности
Я использую HYPERLINK-формуляр в Excel 2016, как показано ниже, но проблема также возникает при работе без формул и только с функцией гиперссылки:
=HYPERLINK(CONFIRM_NO_DATA_URL&B3)
Во всяком случае, он должен вызывать URL-адрес, как это
http://example.org/index.php?action=replyToEmailId&emailId=123123123
Когда я щелкаю ячейку, открывается новая вкладка с правильным URL-адресом.
Но: URL на самом деле вызывается три раза (во-первых, я заметил это, потому что три письма были отправлены с небольшой задержкой).
Я попытался выяснить, откуда это взялось, поместив Http-заголовки в файл. Оказалось, что Excel вызывает внутреннюю гиперссылку за несколько секунд до открытия ссылки в браузере. Также предоставленные Http-заголовки отличаются от окончательного запроса.
Первый скрытый запрос
Это первый запрос, использующий HADTP-запрос-метод HEAD:
{ "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 }
Метод HEAD идентичен GET, за исключением того, что сервер НЕ ДОЛЖЕН возвращать тело сообщения в ответе. источник: [w3.org] [1]
Второй скрытый запрос
Второй запрос довольно сложно идентифицировать, похоже, что Excel высмеивает нескольких пользовательских агентов:
{ "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 }
Вопрос
Как предотвратить это поведение на Excel-стороне?
(Конечно, я могу предотвратить это в своем PHP-скрипте, заблокировав HTTP_USER_AGENT, содержащий « ms-office » или REQUEST_METHOD « HEAD », но я предпочитаю чистое решение).
Примечания стороны
ОБНОВЛЕНИЕ № 1
Я только что нашел этот SO- вопрос, который как бы описывает то же поведение: https://stackoverflow.com/questions/24993813/link-in-excel-cause-duplicate-invocation
ОБНОВЛЕНИЕ № 2 При углубленном изучении этого вопроса я нахожу все больше и больше связанных с SO потоков, например, вот что дает хорошее описание этой "функции": https://webmasters.stackexchange.com/a/71151.
Хотя есть небольшая разница. МЕТОД ЗАПРОСА первого запроса в моем случае - ГОЛОВА, а не ОПЦИЯ, как в вышеупомянутом ответе. Во всяком случае, это все еще не помогает мне решить проблему.
ОБНОВЛЕНИЕ № 3 При попытке воспроизвести это я обнаружил, что было сделано не два, а три запроса.