web-dev-qa-db-fra.com

Faire en sorte que le serveur oblige Excel à transmettre le lien hypertexte au navigateur sans essayer de charger la page elle-même

Je ne sais pas s'il s'agit d'une question Excel (SuperUser) ou WebMasters, car j'ai peut-être épuisé l'option du serveur.

Cas d'utilisation

Notre site permet de télécharger une liste de résultats au format XLS. Un lien hypertexte est présent pour chaque résultat, qui le chargera dans le navigateur par défaut.

En regardant dans notre fichier journal, nous trouvons plusieurs requêtes par clic:

  1. OPTIONS (que j'ai maintenant générant un 405 - lorsque j'ai commencé cette quête, toutes les options étaient retournées avec un 200OK, mais j'ai lu Arrêter l'intégration de Microsoft Office 2010 au serveur Subversion comme s'il s'agissait de Sharepoint et KB838028 )

  2. Lien Pré-récupération HTTP GET à partir de l'agent utilisateur MSIE 7.0 ([gestionnaire d'URL intégrée de Microsoft) - 200 OK - Les deux tiers des données réelles

  3. HTTP GET à partir de IE 11 agent utilisateur - 200 OK - données complètes

Entrées du fichier journal

1.2.3.4 - - [17/Oct/2014:11:20:02 +0200] "OPTIONS /myfolder/ HTTP/1.1" 405 36 "-" "Microsoft Office Protocol Discovery" - -
1.2.3.4 - - [17/Oct/2014:11:20:02 +0200] "GET /myfolder/mypage?myparm=myvalue HTTP/1.1" 200 57288 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; ....; InfoPath.3; ms-office)" - -
1.2.3.4 - - [17/Oct/2014:11:20:03 +0200] "GET /myfolder/mypage?myparm=myvalue HTTP/1.1" 200 75326 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko" - -

La deuxième demande est un gaspillage de bande passante et un traitement probable du serveur

Y a-t-il un moyen sur le serveur de ne pas servir les données sur la 2e demande que Excel charge, au cas où il pourrait montrer quelque chose, puis abandonner quand ce ne serait pas le cas?

Dans le lien prélecture de Microsoft Office Link et authentification unique donnée par @Perry, je vois un séduisant

RewriteCond %{HTTP_USER_AGENT} ;\sms-office(\)|;) [I] ...

mais je ne vois pas comment je pourrais en tirer parti pour qu'Execel NE télécharge PAS en partie le fichier que nous devons ouvrir dans le navigateur par défaut.

UPDATE

J'ai vu des clients de bureau envoyer réellement ms-office avec l'agent utilisateur, mais pas le mien. Mon Win7 Office 2013 envoie

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4. 0C; .NET4.0E; InfoPath.3)

UPDATE: abandonnera ceci, mais avec une suggestion:

Si vous créez des liens dans une feuille Excel réelle et que vous êtes certain de ne pas vouloir prendre en charge IE7 pour la page réelle, ajoutez un paramètre au lien et renvoyez 200OK avec une charge utile vide à MSIE 7 agents utilisateurs.

5
mplungjan

Intéressant - je n'ai jamais su ça!

Je viens de tester mon serveur Web personnalisé (Rapid Server) et d'obtenir les mêmes résultats (3 requêtes GET après avoir cliqué sur un lien hypertexte), nous savons donc que ce n'est pas le serveur Web:

127.0.0.1:1062 - - [17/Oct/2014:03:57:45 -0700] "GET / HTTP/1.1" 0 
127.0.0.1:1063 - - [17/Oct/2014:03:57:47 -0700] "GET / HTTP/1.1" 0 
127.0.0.1:1064 - - [17/Oct/2014:03:57:47 -0700] "GET /favicon.ico HTTP/1.1" 404

Ce que j'ai observé, c'est que la requête supplémentaire ne sera pas répétée, mais la première fois, puis sera mise en cache.

Cela semble être lié au fonctionnement de la découverte de protocole Office. KB838028 l'explique:

La décision sur la manière d'ouvrir la ressource Web est résolue en recherchant le chemin du dossier d'où provient le document et en recherchant les fonctionnalités du serveur qui gère ce chemin. Pour déterminer les fonctionnalités prises en charge par le serveur, Office 2003 émet une commande OPTIONS standard HTTP 1.1. La commande OPTIONS demande au serveur d'identifier les commandes et les méthodes prises en charge par le serveur pour le dossier dans lequel se trouve le document. L'identification du serveur est effectuée conformément aux règles décrites dans la RFC 2616.

Office essaie également de déterminer le type de serveur Web. Cette détermination est basée sur les informations d'en-tête renvoyées par l'appel OPTIONS. Plus précisément, Office recherche des valeurs d'en-tête indiquant les communications avec une bibliothèque de documents SharePoint ou un dossier Exchange WebStore.

En gros, cela est dû à la manière dont Office tente de jouer correctement ou offre une extensibilité à d'autres logiciels collaboratifs pouvant être liés à ces liens hypertexte.

Vous pouvez créer une règle de réécriture pour intercepter la demande OPTIONS et renvoyer un 405, voir ici .

EDIT: il semble que j'ai raté certains détails de votre question lorsque j'ai posté cette réponse pour la première fois, et je n'ai pas vraiment fourni de réponse utile. Nos résultats HTTP sont similaires, mais aussi un peu différents. Dans l’intervalle, ces articles semblent offrir quelques informations supplémentaires: 1 , 2 , . Si vous examinez à nouveau vos résultats, l'agent utilisateur de la deuxième requête est "plus ancien", ce qui pourrait signifier que c'est un client Web interne dans Office qui effectue cette demande, comme vous le soupçonniez. Bizarrement, je vois un résultat GET pour favicon.ico dans mes résultats, mais pas le vôtre.

De this article:

Lorsque vous cliquez sur un lien hypertexte dans un fichier Office (document Word, feuille de calcul Excel, présentation PowerPoint, etc.), l'URL n'est pas immédiatement transmise à votre navigateur. D'abord, Office va chercher l'adresse en interne. Si le lien retourne un code de redirection 3xx, Office demande la nouvelle adresse et le répète. Si le lien renvoie un code d'erreur client 4xx, Office annule la demande et indique à l'utilisateur que le lien n'est pas disponible car il n'a jamais ouvert de navigateur (je suppose que c'est tout l'intérêt de cette "fonctionnalité"). Et si le lien renvoie un code 2xx Success, l'URL est finalement ouverte dans un navigateur. Seule l'URL finale est transmise au navigateur. toutes les redirections sont masquées par Office.

Pour résumer, lorsque vous cliquez sur un lien hypertexte dans un programme Microsoft Office, vous pouvez créer jusqu'à 4 requêtes HTTP:

  1. Office effectue une demande HTTP OPTIONS à l'aide d'un client Web interne pour vérifier les capacités du serveur Web. L'agent utilisateur est "Microsoft Office Protocol Discovery".
  2. Office effectue une demande HTTP GET pour l'URL du lien hypertexte cliqué à l'aide d'un client Web interne afin de s'assurer que le serveur Web renvoie 200 OK avant de lancer l'URL dans le navigateur Web - l'agent utilisateur est "Mozilla/4.0", également appelé "ms-office".
  3. Office lance l'URL dans le navigateur Web et ce dernier effectue la troisième demande HTTP GET pour l'URL du lien hypertexte cliqué - l'agent utilisateur est "Mozilla/5.0".
  4. Le navigateur Web (pas toujours apparemment, apparemment) envoie une requête HTTP GET pour l'agent favicon.ico - user est "Mozilla/5.0".

Références:

6
perry