Blogue Mécanisme de partage

Utilisez URL Hash pour partager JSON : principes, limitations et utilisation du non-téléchargement sur le serveur

Le collègue a dit : « Votre côté JSON est correct dès que vous le formatez, mais je signalerai une erreur ici. C'est ennuyeux de transférer des fichiers d'avant en arrière et les captures d'écran ne peuvent plus être modifiées.

URL Hash PartagerÉcrivez l'outil actuel et saisissez-le dans la barre d'adresse#derrière. Lorsque l'autre partie ouvre le même lien, le navigateur restaure localement les colonnes de gauche et de droite ; les requêtes de page ordinaires n’enverront pas ces données au serveur.

Ce n'est pas la même chose que de « le publier sur un site Web de formatage en ligne, puis de cliquer sur Partager ». Ce dernier POST généralement le texte original sur le backend de quelqu'un d'autre, puis vous donne un court lien. Hash Il n'y a pas une telle étape dans le partage.

Cet article expliquera :

Souvenez-vous d'abord de ceci :Hash fonctionne car le navigateur ne l'utilise pas par défaut#Envoyez-le au serveur plus tard. Mais il ne s’agit ni d’un cryptage, ni d’un moyen d’empêcher le logiciel de chat de couper le lien. Décomposons cette question selon "Principe → Encodage → Longueur → Limite".

URL Hash Qu'est-ce que le partage ?

Le URL complet peut être divisé en deux parties : la partie que le serveur verra et la partie qui reste uniquement dans le navigateur.

https://jsonnote.com/json/format.html#data=eyJvayI6dHJ1ZX0=

Requête au serveur fragment / Hash (laisser dans le navigateur uniquement)

Ce que fait « Partager » de DevBox est : encodez l'identifiant de l'outil actuel et l'entrée gauche dans Hash, puis encodez le paragraphe entierlocation.hrefCopier dans le presse-papiers. Une fois que l'autre partie l'a ouvert, le script de la page indiquelocation.hash, dansson propre navigateurRestaurer les outils et les textes.

  1. 1
    Vous cliquez sur "Partager" dans votre navigateur

    L'entrée est d'abord convertie en UTF-8, puis compilée en Base64 et écrite comme#tool=&data=.

  2. 2
    Envoyez le URL complet à vos collègues

    Une fois que l'autre partie a ouvert le même site, le script de la page indiquelocation.hash.

  3. 3
    Restaurer dans le navigateur de l'autre partie

    Formatage local, somme de contrôle ou Diff. Le serveur ne reçoit que la page elle-même, pas ce JSON.

Ceci etMettez le traitement JSON dans le navigateurC'est le même principe : les calculs se font localement, et le partage ne passe pas par notre base de données. Les limites de confidentialité sont écritesDéclaration de confidentialitéSection 3.

Pourquoi Hash ne sera pas téléchargé sur le serveur

Le fragment n'entre pas dans la requête HTTP

appuyez surExplication de MDN sur URL.hashetfragment dans la norme WHATWG URL,#Vient ensuite l’identifiant du fragment. Lorsque le navigateur navigue, le chemin/requête de la requête HTTP ne contient pas ce paragraphe.

Ainsi, le journal d'accès ne contient généralement que :

Lignes de requête courantes dans les journaux du serveur
GET /json/format.html HTTP/1.1

au lieu de :

Hash n'apparaîtra pas dans la ligne de requête
GET /json/format.html#data=……

C'est pourquoi Hash convient pour "Je ne veux pas que le site enregistre une copie de ma pâte", maisNe convient pasLorsque le canal sécurisé : les données sont toujours intactes en URL, elles ne passent tout simplement pas par ce saut du réseau par défaut.

La différence entre la chaîne de requête et la chaîne de requête

Méthode d'écriture Exemple Le serveur ne peut pas le voir Convient pour quoi faire
Query ?tool=json-format&data=… Oui. Apparaît dans les lignes de requête, les proxys inverses et les journaux CDN Paramètres qui doivent être lus par le serveur
Hash #tool=json-format&data=… Les demandes de pages ordinaires n'apporteront pas Statut uniquement pour les scripts front-end

Si quelqu'un met le même Base64 dans?Plus tard, l'effet est le même, mais les données ont été saisies dans le journal du serveur. DevBox N'écrivez que Hash juste pour éviter cette couche.

De plus : le référent ne contient généralement pas de fragment. Lorsque vous cliquez depuis la page de partage vers le lien externe, l'autre site ne peut généralement pas obtenir le JSON dans le Hash. Il s'agit du comportement par défaut du navigateur, et non du cryptage supplémentaire que nous effectuons.

À quoi ressemble le lien de partage de DevBox ?

Après avoir cliqué sur "Partager", Hash est un groupeURLSearchParams:

DevBox Partager le lien au format Hash
#tool=json-format&data=<Base64>

tool

ID de l'outil actuel. Après avoir ouvert le lien, vous basculerez vers l'espace de travail correspondant, au lieu de toujours tomber sur "JSON Format". Les valeurs communes incluentjson-format,json-validate,json5,json-path,json-diff.

Lorsque vous changez uniquement d'outil et ne cliquez pas sur Partager, la barre d'adresse sera mise à jour pour#tool=…,Ne contient pas de données. Il s'agit de se souvenir de l'outil que vous utilisez et de ne pas écrire le contenu de l'éditeur dans l'historique.

data

Entrez le texte UTF-8 à gauche, puis faites Base64. Implémentation équivalente à :

JavaScript · Encodage
btoa(unescape(encodeURIComponent(input)))

d'abordencodeURIComponentIl s'agit de rendre le chinois et l'Emoji passablesbtoa. Prenez le chemin inverse lors de la restauration. Ceci est discuté avec MDNBase64 encodage de la chaîne UnicodeC'est le même genre de problème.

L'encodage n'est pas un cryptage

Le but de Base64 est "n'importe quel octet peut être mis dans URL", et non "seules les personnes de confiance peuvent le lire". Quiconque obtient le lien peut le restaurer dans la console :

JavaScript·Exemple de processus de restauration
const data = new URLSearchParams(location.hash.slice(1)).get("data");
decodeURIComponent(escape(atob(data)));

Vous pouvez également mettredata=La chaîne suivante est lancée sur ce siteBase64 Décodage. Il n'y a pas de mot de passe, pas de lien unique et pas de date d'expiration.

Un exemple complet

Supposons que vous saisissiez "JSON Format" :

JSON·Entrée gauche
{
  "name": "Ada",
  "role": "dev"
}

Comprimé en une seule ligne, il fait 27 octets :

JSON · Après compression
{"name":"Ada","role":"dev"}

UTF-8 → Base64 obtient 36 caractères ASCII (il n'y a pas+ / /, il ne sera plus étiré du codage du signe pourcentage lorsqu'il est placé dans URL) :

Base64
eyJuYW1lIjoiQWRhIiwicm9sZSI6ImRldiJ9

Complétez Hash :

Terminé Hash
#tool=json-format&data=eyJuYW1lIjoiQWRhIiwicm9sZSI6ImRldiJ9

Une fois que l'autre partie l'a ouvert et a vu le même paragraphe JSON, il peut continuer à formater et à faireJSONPath Extraction, ou faites Diff avec votre propre réponse. Si le texte original est en réalité une configuration annotée, il doit être utilisé à la placeJSON5 AnalysePartagez à nouveau la sortie au lieu de la laisser indisponibleJSON.parseLe texte est envoyé directement à l'autre partie.

Le volume est plus évident lorsqu'il contient des caractères chinois. Par exemple{"msg":"格式化后两边一致"}Il fait 34 octets UTF-8, Base64 suivis de 48 caractères ; où/et=Après avoir été codée en URL, la valeur du paramètre deviendra 54 caractères.

Combien de temps durera le lien ?

Hash La limite stricte pour le partage n'est pas la « limite de téléchargement sur le serveur » ;L'intégralité du paragraphe URL peut-elle toujours être envoyée au navigateur de l'autre partie ?.

Pour une section de JSON qui est approximativement du ASCII pur, l'ordre de grandeur mesuré est le suivant (y compristool=json-format&data=longueur après expansion) :

Texte original env. Après avoir codé Hash env. Limites de l'expérience
200 B 330 caractères Les logiciels de chat peuvent presque toujours être livrés dans leur intégralité
1 KB 1.4 KB La plupart des messages instantanés fonctionnent correctement, mais il est tout de même recommandé de cliquer dessus pour confirmer.
8 KB 11 KB Les navigateurs peuvent généralement l'ouvrir ; certains clients peuvent le tronquer.
32 KB 44 KB Ne vous attendez pas à ce que le transfert de texte original WeChat/e-mail fonctionne toujours

Chrome peut digérer une très longue barre d'adresse, mais il existe une autre couche intermédiaire : la messagerie instantanée, la messagerie électronique, les services de liens courts et les codes QR. Ils ont chacun une casquette plus courte et vous disent rarement « J'ai coupé la queue ». Le processus devrait donc être :

  1. 1
    Cliquez sur "Partager"

    Copiez l'adresse complète, ne vous contentez pas de la copier#Un peu en retard.

  2. 2
    Ouvrez-le d'abord dans un nouvel onglet sur cette machine

    Assurez-vous que les outils et les contributions sont là avant de les envoyer à vos collègues.

Pour l'intégralité du journal d'accès et le fichier d'exportation de plusieurs mégaoctets, veuillez le coller localement ou cliquer sur "Télécharger". Hash Le but du partage est de « reproduire une courte période de saisie », et non comme un disque réseau.

Hash Quelle est la différence entre le partage et les autres méthodes ?

manière Où vont les données ? Comment l'autre partie peut-elle continuer ? adapté pour Ne convient pas
URL Hash Arrêtez-vous aux deux barres d'adresse Ouvrez le même site pour continuer à travailler Petit paragraphe JSON, erreur récurrente Clés, fichiers très volumineux
Texte de discussion original serveur de discussion Copiez-le à nouveau Quelques lignes de configuration Données internes enregistrées en session permanente
capture d'écran des photos Peut uniquement être visualisé mais ne peut pas être analysé Parlons de structure Il faut encore continuer le formatage / Diff
Accessoires/Disque réseau stockage tiers Publier après le téléchargement gros fichiers Vous voulez éviter une copie supplémentaire
Coller en ligne le backend de quelqu'un d'autre ouvrir le lien court Nécessite un stockage public et à long terme Tout ce qui ne devrait pas quitter cette machine

Si l’équipe dispose déjà de pièces jointes de collage intranet ou de bons de travail, il est plus stable d’utiliser le canal d’origine pour de grandes sections de journaux. La valeur de Hash est :Le même lien contient à la fois "quel outil utiliser" et "quelle est l'entrée", l'autre partie n'a pas besoin de deviner si vous avez cliqué sur le formatage ou la vérification.

Limites à retenir lors de l'utilisation

Lorsqu'il s'agit de véritable confidentialité, utilisez des outils hors ligne ou intranet. Cela n'a rien à voir avec "si le site dispose d'une boîte de connexion".

FAQ

URL Hash Qu'est-ce que le partage ?

Encodez l'outil actuel et saisissez-le dans la barre d'adresse#derrière. Lorsque l'autre partie ouvre le même lien sur le même site, le navigateur restaure le contenu localement sans envoyer ces données au serveur sous forme de requête de page.

Le serveur de données en Hash est-il visible ?

Les requêtes de page ordinaires n'enverront pas le fragment au serveur et le journal d'accès ne contient généralement que le chemin. Mais cela ne veut pas dire que c’est secret : toute personne disposant du lien complet peut le décoder.

Quelle est la différence entre le codage et le cryptage ?

L'encodage (ici Base64) garantit que le texte peut être mis en URL, et que n'importe qui peut l'inverser. Le cryptage nécessite une clé sans laquelle il ne peut pas être lu. DevBox Le partage fait le premier.

Hash Le partage peut-il être utilisé pour des clés ou des jetons ?

Non. Une fois le lien envoyé, il ne peut plus être repris et il sera quand même enregistré dans l’historique. Veuillez saisir le système de gestion des clés de votre équipe pour la clé et ne saisissez aucune barre d'adresse Web.

L'autre partie l'ouvre vide ?

Vérifiez d'abord si URL est làdata=Tronqué au milieu ; confirmez à nouveau que vous ouvrez le même site DevBox, pas seulement une copie.#Un peu en retard. Veuillez plutôt utiliser cette machine pour coller du texte surdimensionné.

Quelle est la relation avec le formatage et la vérification JSON ?

Le partage est uniquement responsable de "supprimer les entrées et les outils actuels tels quels". Le formatage, la vérification de la syntaxe, JSON5, JSONPath, Diff sont toujours exécutés localement dans le navigateur de l'autre partie. Vous devez d'abord regarder la structure, utilisezJSONFormat;nécessite un positionnementUnexpected token, utiliserVérifierouJSON5.

Résumé

URL Hash Le partage, c'est essentiellement :

L'état de l'outil local + l'encodage réversible + le fragment de navigateur ne sont pas téléchargés avec la demande.

Il convient pour reproduire une courte section de JSON ou de configuration. Il ne convient pas à une utilisation comme disque réseau ni à la transmission de secrets. Si vous l'utilisez correctement, vous et vos collègues parlez dans les mêmes colonnes de gauche et de droite ; si vous l'utilisez mal, cela équivaut à coller du texte brut dans une adresse que tout le monde peut ouvrir.

← Retour au blog