блог • Механизм обмена
Используйте URL Hash, чтобы поделиться JSON: Принципы, ограничения и использование отказа от загрузки на сервер.
Коллега сказал: «Ваша сторона JSON верна, как только вы ее отформатируете, но я сообщу об ошибке здесь». Переносить файлы туда и обратно раздражает, а скриншоты уже нельзя изменить.
URL Hash ПоделитьсяНапишите текущий инструмент и введите его в адресную строку.#позже. Когда другая сторона открывает ту же ссылку, браузер локально восстанавливает левый и правый столбцы; обычные запросы страниц не будут отправлять эти данные на сервер.
Это не то же самое, что «разместить его на веб-сайте онлайн-форматирования, а затем нажать «Поделиться». Последний обычно сначала отправляет исходный текст POST на чужой сервер, а затем дает вам короткую ссылку. Hash В обмене такого шага нет.
Эта статья объяснит:
- URL Hash Почему обычно это не отображается в логах сервера?
- DevBox из
#tool=…&data=…как кодировать - Почему Base64 не зашифровано
- Насколько будет расширяться ссылка и какой софт ее обрежет?
- Когда следует использовать общий доступ, а когда следует прекратить делиться?
Запомни это в первую очередь:Hash работает, потому что браузер не использует его по умолчанию.#Отправьте его на сервер позже. Но это не шифрование, и оно не может помешать программному обеспечению чата отключить ссылку. Давайте разберем этот вопрос по принципу «Принцип → Кодирование → Длина → Граница».
URL Hash Что значит делиться?
Полный URL можно разбить на две части: часть, которую увидит сервер, и часть, которая останется только в браузере.
Запрос на сервер фрагмент / Hash (оставить только в браузере)
Функция «Поделиться» DevBox: кодирует текущий идентификатор инструмента и левый ввод в Hash, а затем кодирует весь абзац.location.hrefСкопировать в буфер обмена. После того, как другая сторона откроет ее, скрипт страницы читает:location.hash,существоватьего собственный браузерИнструменты восстановления и тексты.
-
1
Вы нажимаете «Поделиться» в браузере
Входные данные сначала преобразуются в UTF-8, затем компилируются в Base64 и записываются как
#tool=&data=. -
2
Отправьте полный URL коллегам.
После того, как другая сторона откроет тот же сайт, скрипт страницы читает:
location.hash. -
3
Восстановить в браузере собеседника
Локальное форматирование, контрольная сумма или Diff. Сервер получает только саму страницу, а не этот JSON.
Это иСтавим обработку JSON в браузереПринцип тот же: вычисления происходят локально, и обмен не осуществляется через нашу базу данных. Границы конфиденциальности прописаны вЗаявление о конфиденциальностиРаздел 3.
Почему Hash не будет загружено на сервер
Фрагмент не входит в HTTP-запрос
в соответствии сОбъяснение MDN URL.hashифрагмент в стандарте WHATWG URL,#После этого идет идентификатор фрагмента. При навигации браузера путь/запрос HTTP-запроса не содержит этот абзац.
Таким образом, журнал доступа обычно содержит только:
GET /json/format.html HTTP/1.1
вместо:
GET /json/format.html#data=……
Вот почему Hash подходит для «Я не хочу, чтобы сайт сохранял копию моей вставки», ноНе подходитКогда безопасный канал: данные все еще не повреждены в URL, они просто не проходят через этот переход сети по умолчанию.
Разница между строкой запроса и строкой запроса
| Метод письма | пример | Сервер его не видит | Подходит для того, что делать |
|---|---|---|---|
| Query | ?tool=json-format&data=… |
встреча. Появляется в строках запросов, обратных прокси-серверах и журналах CDN. | Параметры, которые необходимо прочитать серверу |
| Hash | #tool=json-format&data=… |
Обычные запросы страниц не принесут | Статус только для внешних скриптов |
Если кто-то поставит тот же Base64 в?Позже эффект выглядит так же, но данные заносятся в журнал сервера. DevBox Пишите только Hash, чтобы избежать этого слоя.
Кроме того: Реферер обычно не несет фрагмента. Когда вы переходите со страницы обмена на внешнюю ссылку, другой сайт обычно не может получить JSON в Hash. Это поведение браузера по умолчанию, а не дополнительное шифрование, которое мы используем.
Как выглядит ссылка для обмена DevBox?
После нажатия «Поделиться» Hash — это группа.URLSearchParams:
#tool=json-format&data=<Base64>
tool
Текущий идентификатор инструмента. Открыв ссылку, вы переключитесь на соответствующую рабочую область, а не всегда попадете в «JSON Формат». Общие ценности включают в себяjson-format,json-validate,json5,json-path,json-diff.
Если вы переключаете только инструменты и не нажимаете кнопку «Поделиться», адресная строка будет обновлена до#tool=…,Не содержит данных. Это чтобы запомнить какой инструмент вы используете и не записывать в историю содержимое редактора.
data
Введите текст UTF-8 слева, затем нажмите Base64. Реализация эквивалентна:
btoa(unescape(encodeURIComponent(input)))
ПервыйencodeURIComponentЭто сделано для того, чтобы сделать китайский язык и эмодзи приемлемыми.btoa. При восстановлении идите противоположным путем. Это обсуждается с MDNBase64 кодировка строки UnicodeЭто такая же проблема.
Кодирование — это не шифрование
Назначение Base64 — «любой байт можно поместить в URL», а не «его могут прочитать только доверенные лица». Любой, кто получит ссылку, сможет восстановить ее в консоли:
const data = new URLSearchParams(location.hash.slice(1)).get("data");
decodeURIComponent(escape(atob(data)));
Вы также можете поставитьdata=На этот сайт выбрасывается следующая строкаBase64 Декодирование. Здесь нет пароля, одноразовой ссылки и срока действия.
Полный пример
Предположим, вы вводите «JSON Формат»:
{
"name": "Ada",
"role": "dev"
}
Сжатый в одну строку это 27 байт:
{"name":"Ada","role":"dev"}
UTF-8 → Base64 получает 36 символов ASCII (нет+ / /, он больше не будет растягиваться на кодировку знака процента при помещении в URL):
eyJuYW1lIjoiQWRhIiwicm9sZSI6ImRldiJ9
Заполните Hash:
#tool=json-format&data=eyJuYW1lIjoiQWRhIiwicm9sZSI6ImRldiJ9
После того, как собеседник откроет его и увидит тот же абзац JSON, он сможет продолжать форматировать и делатьJSONPath Извлечениеили выполните Diff со своим собственным ответом. Если исходный текст на самом деле представляет собой аннотированную конфигурацию, вместо него следует использовать его.JSON5 АнализПоделитесь результатом снова, вместо того, чтобы оставлять его недоступным.JSON.parseТекст перебрасывается непосредственно другой стороне.
Громкость становится более очевидной, если она содержит китайские иероглифы. Например{"msg":"格式化后两边一致"}Это 34 байта UTF-8, Base64, за которыми следуют 48 символов; где/и=После кодирования URL значение параметра станет 54 символами.
Насколько длинной станет ссылка?
Hash Жесткий лимит на совместное использование не является «лимитом загрузки на сервер»;Можно ли отправить весь абзац URL в браузер другой стороны?.
Для части JSON, которая представляет собой приблизительно чистый ASCII, измеренный порядок величины следующий (включаяtool=json-format&data=длина после расширения):
| Исходный текст ок. | После кодирования Hash ок. | Ограничения опыта |
|---|---|---|
| 200 B | 330 символов | Программное обеспечение для чата почти всегда может быть доставлено полностью |
| 1 KB | 1.4 KB | Большинство мгновенных сообщений подходят, но все же рекомендуется нажать на них для подтверждения. |
| 8 KB | 11 KB | Браузеры обычно могут открыть его; некоторые клиенты могут его обрезать. |
| 32 KB | 44 KB | Не ожидайте, что пересылка исходного текста WeChat/электронной почты по-прежнему будет работать. |
Chrome может обрабатывать очень длинную адресную строку, но между ними есть еще один слой: мгновенные сообщения, электронная почта, службы коротких ссылок и QR-коды. У каждого из них шапка короче, и они редко говорят вам: «Я отрезал хвост». Итак, процесс должен быть:
-
1
Нажмите «Поделиться»
Скопируйте полный адрес, а не просто копируйте его
#Немного позади. -
2
Сначала откройте его в новой вкладке на этом компьютере.
Прежде чем отправлять коллегам, убедитесь, что инструменты и материалы имеются в наличии.
Весь журнал доступа и файл экспорта размером в несколько мегабайт вставьте его локально или нажмите «Скачать». Hash Целью совместного использования является «воспроизведение короткого периода ввода», а не в виде сетевого диска.
Hash В чем разница между обменом и другими методами?
| Способ | Куда идут данные? | Как другая сторона может продолжать? | Подходящий | Не подходит |
|---|---|---|---|---|
| URL Hash | Остановитесь на обеих адресных строках | Откройте тот же сайт, чтобы продолжить работу. | Маленький абзац JSON, повторяющаяся ошибка | Ключи, очень большие файлы |
| Исходный текст чата | чат-сервер | Скопируйте его еще раз | Несколько строк конфигурации | Внутренние данные, записанные в постоянный сеанс |
| скриншот | картина | Можно только просмотреть, но нельзя проанализировать | Поговорим о структуре | Все еще нужно продолжить форматирование / Diff |
| Аксессуары/Сетевой диск | стороннее хранилище | Сообщение после скачивания | большие файлы | Хотите избежать еще одной копии |
| Онлайн вставка | чужой бэкэнд | открыть короткую ссылку | Требуется публичное и долговременное хранение. | Все, что не должно покидать эту машину |
Если у группы уже есть вложения в интрасети или рабочие задания, более стабильно использовать исходный канал для больших разделов журналов. Значение Hash составляет:Одна и та же ссылка содержит как «какой инструмент использовать», так и «какие входные данные»., собеседнику не нужно гадать, нажали ли вы на форматирование или проверку.
Границы, которые необходимо помнить при использовании
- Ссылка равна открытому тексту.Любой, кто сможет открыть страницу, сможет восстановить содержимое. Не передавайте секретные ключи, производственные токены, списки клиентов или нераскрытые интерфейсы.
- Нажмите на нее перед отправкой.Когда программное обеспечение чата обрезает слишком длинный URL, другая сторона откроет неполный Hash, что будет отображаться как пустой ввод или ошибка декодирования.
- Другая сторона должна иметь возможность открыть тот же сайт DevBox.Hash нельзя парсить отдельно от страницы;
#Последний абзац закидывать в блокнот бесполезно. - В истории браузера останется полный адрес.Можно увидеть локальную историю, синхронизированные учетные записи и совместное использование экрана. Когда вы не нажимаете «Поделиться», а просто переключаете инструменты, в Hash нет данных, просто нужно сохранить одну копию.
- Расширения и инструменты отладки могут читать
location.href.Локальные вычисления снижают риск того, что «наш сайт сохраняет копию», а не «никто на этом компьютере не увидит ее». - «Вытянуть из URL» — это еще один способ.Когда вы заполните удаленный адрес в рабочей области и нажмете «Получить», браузер отправит запрос на этот адрес. Поделитесь Hash Если принесёте
url=, человек, открывший его, также инициирует этот запрос. Доверяйте только тем источникам, которые вы проверили сами.
Когда дело доходит до реальной конфиденциальности, используйте офлайн-инструменты или инструменты интранета. Это не имеет ничего общего с тем, «есть ли на сайте окно входа».
Часто задаваемые вопросы
URL Hash Что значит делиться?
Закодируйте текущий инструмент и введите его в адресную строку.#позже. Когда другая сторона открывает ту же ссылку на том же сайте, браузер восстанавливает контент локально, не отправляя эти данные на сервер в виде запроса страницы.
Можно ли увидеть сервер данных в Hash?
Обычные запросы страниц не отправляют фрагмент на сервер, а в журнале доступа обычно указан только путь. Но это не значит, что это секрет: любой, у кого есть полная ссылка, может ее расшифровать.
В чем разница между кодированием и шифрованием?
Кодировка (здесь Base64) гарантирует, что текст можно поместить в URL, и любой сможет его перевернуть. Для шифрования требуется ключ, без которого его невозможно прочитать. DevBox Совместное использование делает первое.
Hash Можно ли использовать совместное использование ключей или токенов?
Не мочь. После отправки ссылки ее невозможно будет вернуть, и она все равно будет записана в истории. Пожалуйста, войдите в систему управления ключами вашей команды для получения ключа и не вводите адресную строку веб-сайта.
Другая сторона открывает его пустым?
Сначала проверьте, есть ли URLdata=Усечен посередине; еще раз подтвердите, что вы открываете тот же сайт DevBox, а не просто копию.#Немного позади. Вместо этого используйте это устройство для вставки слишком большого текста.
Какова связь с форматированием и проверкой JSON?
Совместное использование отвечает только за «удаление текущих данных и инструментов как есть». Форматирование, проверка синтаксиса, JSON5, JSONPath, Diff по-прежнему выполняются локально в браузере другой стороны. Сначала вам нужно посмотреть на структуру, использоватьJSON Формат;требуется позиционированиеUnexpected token,использоватьпроверятьилиJSON5.
Подвести итог
URL Hash По сути, обмен информацией означает:
Статус локального инструмента + обратимая кодировка + фрагмент браузера не загружается вместе с запросом.
Он подходит для воспроизведения короткого фрагмента JSON или конфигурации. Он не подходит для использования в качестве сетевого диска и не подходит для передачи секретов. Если вы используете его правильно, вы и ваши коллеги разговариваете с одними и теми же левыми и правыми столбцами; если вы используете его неправильно, это эквивалентно вставке обычного текста в адрес, который может открыть каждый.
下一步尝试