[JAVA] Comment déterminer la demande de prélecture depuis le navigateur

TL;DR Il existe des cas où les demandes de lecture anticipée (prélecture, prélecture) volent non seulement vers le CSS mais également vers d'autres URL. Pour un point de terminaison spécifique

--Je souhaite connaître plus précisément le nombre de requêtes GET causées par les actions des utilisateurs C'est un processus relativement lourd, donc je ne veux pas traiter autant que possible les demandes supplémentaires.

Si vous avez les besoins ci-dessus, vous devez prendre des mesures de prélecture.

Contexte

Lors du développement d'un système Web, j'ai pensé à la cause car une demande GET involontaire est entrée dans le journal du serveur de test. Après enquête, il semble que le navigateur puisse ignorer la demande GET en tant que processus de recherche anticipée (prélecture) lors de la saisie de quelque chose dans la barre du navigateur, et comme une valeur unique est définie dans l'en-tête de cette demande, chaque navigateur Le processus de détection a été mis en œuvre pour prendre en charge les spécifications de.

En-tête affichant la prélecture pour chaque navigateur

Chrome(Chromium) Purpose: prefetch https://www.chromestatus.com/feature/6247959677108224 https://bugs.chromium.org/p/chromium/issues/detail?id=86175#c65

Firefox X-Moz: Prefetch https://developer.mozilla.org/ja/docs/Web/HTTP/Link_prefetching_FAQ

Safari X-Purpose: preview

Exemple d'implémentation

import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;

public static boolean isPrefetchRequest(HttpServletRequest request) {
    return StringUtils.equalsAny(request.getHeader("purpose"), "Prefetch", "prefetch") ||
            StringUtils.equalsAny(request.getHeader("X-moz"), "Prefetch", "prefetch") ||
            StringUtils.equalsAny(request.getHeader("X-Purpose"), "Preview", "preview");
}

Supplément

―― Puisque les spécifications ne sont pas décidées par un examen léger, un suivi sera effectué en supposant que des modifications seront apportées.

Recommended Posts

Comment déterminer la demande de prélecture depuis le navigateur
Comment déterminer le nombre de parallèles
[Java] Comment extraire le nom du fichier du chemin
Comprendre le flux approximatif de la demande à la réponse dans SpringWebMVC
Comment créer un formulaire pour sélectionner une date dans le calendrier
Comment obtenir les informations les plus longues de Twitter à partir du 12/12/2016
Comment désactiver Set-Cookie de l'API sur la face avant
[Docker] Comment accéder à l'hôte depuis l'intérieur du conteneur. http: //host.docker.internal:
Comment appliquer le format de code C à partir de la ligne de commande
Comment utiliser la méthode link_to
Comment utiliser la méthode include?
Comment utiliser la méthode form_with
Comment trouver l'angle moyen
Comment utiliser la classe wrapper
[Rails] Comment changer le titre de la page du navigateur pour chaque page
Comment exécuter l'exemple Kotlin Coroutine à partir de la ligne de commande
Comment ajouter la fonction de suppression
La route de JavaScript à Java
[Java] Comment convertir du type String en type Path et obtenir le chemin
Comment passer du HTML à Haml
Comment appliquer immédiatement les modifications de Thymeleaf au navigateur avec #Spring Boot + maven
Comment renvoyer une valeur du modèle au contrôleur en utilisant le protocole [Swift5]
[Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.
Comment exécuter un fichier GIF à partir de la ligne de commande Linux (Ubuntu)
Confirmation et refactoring du flux de la requête au contrôleur dans [httpclient]
Comment comparer uniquement le temps avec Rails (de quelle heure à quelle heure, quelque chose comme)
Comment obtenir la valeur du paramètre (valeur de la propriété) à partir de la base de données dans Spring Framework
[Java] Comment utiliser la classe File
Examinez le remplacement de Docker vers Podman.
Comment désactiver le regroupement d'erreurs
[Ruby] Des bases à la méthode inject
[Rails] Comment utiliser la méthode de la carte
Etudier comment utiliser le constructeur (java)
Comment appeler le code Swift 5.3 depuis Objective-C
[Traitement × Java] Comment utiliser la boucle
[Java] Comment régler la date sur 00:00:00
[Java] Comment obtenir le répertoire actuel
[Flutter] Comment utiliser C / C ++ depuis Dart?
[Traitement × Java] Comment utiliser la classe
Java: Comment envoyer des valeurs du servlet au servlet
Comment trier une liste de SelectItems
Comment trouver les dizaines et les unités
Comment passer la valeur à un autre écran
Comment obtenir la date avec Java
[Traitement × Java] Comment utiliser la fonction
[Java] Comment utiliser la classe Calendar