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 :
- URL Hash Pourquoi n'apparaît-il généralement pas dans les journaux du serveur ?
- DevBox de
#tool=…&data=…comment coder - Pourquoi Base64 n'est pas crypté
- Dans quelle mesure le lien va-t-il s'étendre et quel logiciel le tronquera ?
- Quand devriez-vous utiliser le partage et quand devriez-vous arrêter de partager ?
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.
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
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
Envoyez le URL complet à vos collègues
Une fois que l'autre partie a ouvert le même site, le script de la page indique
location.hash. -
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 :
GET /json/format.html HTTP/1.1
au lieu de :
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:
#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 à :
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 :
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" :
{
"name": "Ada",
"role": "dev"
}
Comprimé en une seule ligne, il fait 27 octets :
{"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) :
eyJuYW1lIjoiQWRhIiwicm9sZSI6ImRldiJ9
Complétez 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
Cliquez sur "Partager"
Copiez l'adresse complète, ne vous contentez pas de la copier
#Un peu en retard. -
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
- Le lien équivaut à du texte clair.Toute personne pouvant ouvrir la page peut restaurer le contenu. Ne partagez pas de clés secrètes, de jetons de production, de listes de clients ou d'interfaces non divulguées.
- Cliquez dessus avant de l'envoyer.Lorsque le logiciel de chat tronque un URL trop long, l'autre partie ouvrira un Hash incomplet, qui apparaîtra comme une entrée vide ou un échec de décodage.
- L'autre partie doit pouvoir ouvrir le même site DevBox.Hash ne peut pas être analysé séparément de la page ;
#Il ne sert à rien de jeter le dernier paragraphe dans le bloc-notes. - L'historique du navigateur laissera l'adresse complète.L'historique local, les comptes synchronisés et le partage d'écran peuvent tous être consultés. Lorsque vous ne cliquez pas sur Partager et changez simplement d'outil, il n'y a aucune donnée dans Hash, juste pour enregistrer une copie.
- Les extensions et les outils de débogage peuvent lire
location.href.L'informatique locale réduit le risque de « notre site enregistre une copie », et non de « personne sur cet ordinateur ne peut la voir ». - "Tirer depuis URL" est une autre façon.Lorsque vous remplissez l'adresse distante dans l'espace de travail et cliquez sur « Pull », le navigateur enverra une requête à cette adresse. Partager Hash Si vous l'apportez
url=, la personne qui l'a ouvert initiera également cette demande. Faites uniquement confiance aux sources que vous avez vérifiées vous-même.
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.
下一步尝试