Введение
С момента окончания учебы и работы прошло уже больше года, за этот не один год я обнаружил, что некоторые фоновые программисты дажеПараметры запроса для URLЯ не знаю, и я также недавно столкнулся с некоторыми проблемами при использовании node и python для подключения зашифрованного mongodb, поэтому я решил сделать краткий обзор того, что я знаю об URL-адресах.
Что такое URL
Глоссарий
URLЯвляется аббревиатурой от Uniform Resource Location, что переводится как «Унифицированный указатель ресурсов». С точки зрения непрофессионала, URL-адрес — это строка, используемая для описания информационных ресурсов в Интернете, в основном используемая в различных клиентских программах www и серверных программах. С помощью URL можно использовать единый формат для описания различных информационных ресурсов, включая файлы, адреса серверов и каталоги.
КстатиURIБар:
Каждый ресурс, доступный в Интернете, — HTML-документы, изображения, видеоклипы, программы и т. д. — является Используйте идентификатор ресурса (универсальный идентификатор ресурса, называемый «URI») для поиска.
URI обычно состоит из трех частей:
- Механизм именования для доступа к ресурсам.
- Имя хоста, на котором хранится ресурс.
- Имя самого ресурса, представленное путем.
URL-адрес является подмножеством URI, но в обычной разработке нам нужно понимать только URL.
формат URL
кhttp://test.com:8080/example/index.html
Возьмите пример для иллюстрации.
Формат URL-адреса состоит из следующих трех частей:
- Первая часть — это протокол (или метод службы), в данном случае
HTTP 协议
. - Вторая часть — это IP-адрес или доменное имя (а иногда и номер порта) хоста, на котором хранится ресурс, в данном случае —
test.com:8080
. Обычно вы видите имя домена, а затем клиент будет запрашивать IP-адрес, соответствующий имени домена, через DNS (система доменных имен), а затем подключится к серверу в соответствии с IP-адресом и номером порта. Подробнее об этом позже. - Третья часть — это конкретный адрес хост-ресурса, такой как имя каталога и файла, в данном примере это
/example/index.html
.
Синтаксис URL
общая грамматика
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
- схема: протокол, распространенные http(80), https(443), mailto, ftp(21), rtsp, rtspu, file.
- пользователь: Имя пользователя.
- пароль: пароль.
- хозяин: хозяин.
- порт: порт.
- params: параметры. как правило
key=value
. - запрос: параметр запроса или строка запроса.
- frag: Фрагмент (разрешается в браузерах как
window.location.hash
).
Это всего лишь общий синтаксис, большинство URL-адресов следуют только его части, не каждый URL-адрес будет содержать всю приведенную выше информацию.
Из приведенной выше грамматики видно, что по крайней мере:/@;?# все являются конфиденциальными символами, поэтому эти символы нельзя включать в другие параметры.Если они содержат конфиденциальные символы или специальные символы, вам необходимо использовать соответствующие escape-символы, в противном случае это может привести к непредсказуемым результатам.В процессе разработки легко содержать конфиденциальные символы в параметрах запроса, поэтому обычно необходимо использовать значение строки запроса.encodeURIComponent
кодировать.
Синтаксис в http(s)
http://test.com:8080/user/index.html?id=1&nickName=test#/list
Формат после парсинга в браузере:
{
protocol: 'http:', // 协议
host: 'test.com:8080', // 主机名或域名,带端口号
hostname: 'test.com', // 主机名或域名,不带端口号
port: '', // 端口号,http默认80,https默认443
path: '/user/index.html', // 路径
query: '?id=1&nickName=test', // 查询字符串
hash: '#list', //片段或者哈希,
}
Примечание. Ничего после # не будет передано от клиента к серверу.
При изменении строки после # в адресной строке страница не обновляется, но срабатывает событие hashchange.На основе этой функции реализованы многие режимы хэширования маршрутизации во внешнем интерфейсе. и изменилсяfrag(hash)
Все, кроме этого, приведет к обновлению браузера, потому что в это время это эквивалентно выполнению нового запроса к серверу.
синтаксис в фтп
Протокол передачи файлов, который можно использовать для загрузки или выгрузки файлов с сервера.
Основной формат:
ftp://<user>:<password>@<host>:<port>/<path>;<params>
Пример:
ftp://ftpuser:123456.com@test.com:21/path/example
синтаксис в файле
Этот протокол обычно используется в сценариях, когда локальный файл открывается в браузере, а также это может быть сетевая файловая система или некоторые другие системы обмена файлами. Не буду подробно останавливаться на этом, мне кажется, тут нечего сказать.
протокол mongodb
Обычно используется в фоновых программах для подключения к базе данных mongodb. Хотя наши общие пакеты используют объектный формат для подключения к базе данных, в конечном итоге они будут преобразованы в строковую форму.
Основной формат:
mongodb://<user>:<password>@<host>:<port>/<path>?<query>
Пример:
mongodb://test:123456@127.0.0.1:27017/novel?authSource=admin
Эта строка представляет протокол mongodb, имя пользователя — test, пароль — 123456, база данных dbName — новая, аутентифицированная база данных — admin, и она подключается к порту 27017 хоста 127.0.0.1.
Примечание. Если сервер mongodb не включает шифрование, вам необходимо удалить параметры запроса, иначе соединение не будет установлено. Если шифрование включено, значение authSource должно соответствовать предыдущему пользователю и паролю. , иначе страница аутентификации пользователя не может быть подключена.Я использую thinkjs, который изначально не настроенauthSource, Ошибка, о которой мне сообщили, заключалась в том, что время ожидания соединения истекло.В то время я задавался вопросом, достаточно ли медленный удаленный сервер? ? ? Позже я скорректировал время ожидания, и обнаружил, что время ожидания все еще истекло, и я продолжал пытаться переподключиться, я думал, что проверка могла не пройти, что заняло много времени.
Весь процесс выполняется после ввода URL в браузере
Весь процесс выглядит следующим образом:
- ДНС;
- Инициировать трехстороннее рукопожатие TCP;
- После установления TCP-соединения инициируйте http-запрос;
- Сервер отвечает на запросы HTP;
- Браузер анализирует HTML-код и запрашивает ресурсы в HTML-коде (такие как js, css, картинки и т. д.);
- отключить TCP-соединение;
- Браузер отображает страницу пользователю.
На самом деле, процесс разрешения доменного имени все еще немного сложен, если он проработан, короче говоря, иногда он занимает довольно много времени.РазобратьЭто использование слов, мы можем видеть, что это должно занять время? Имя домена будет преобразовано DNS в IP-адрес, за которым следует IP-адрес и порт подключения.
Если использовать сервер доступа по IP, то можно сэкономить часть времени, но делать это все же не рекомендуется, т.к. при замене сервера доменное имя может резолвиться на другой IP, можно оставить соответствующие данные на сторона браузера, и IP не может этого сделать. Кроме того, доступность и читаемость доменного имени может быть больше, чем IP.
Динамические и статические серверы
Большая часть вышеперечисленного применима только к статическим серверам.Если это динамический сервер, у него будет свой набор правил парсинга, но он примерно такой же.Самое большое отличие может быть в динамической маршрутизации динамических серверов (front-end маршрутизация теперь также поддерживается динамическая маршрутизация).
Ниже в основном говорится об особых моментах динамического сервера по отношению к статическому серверу:
динамическая маршрутизация
Например, чтобы определить интерфейс для получения информации о человеке, его путь:{ path: '/user/:id' }
при посещении/user/1?name=test
, интерфейс будет разрешен фреймворком как:
{
params: {
id: 1,
},
query: {
name: 'test',
}
}
Если это статический маршрут, вы можете использовать только/user?id=1&name=test
Таким образом передаются параметры, из чего видно, что динамическая маршрутизация имеет некоторые преимущества перед статической маршрутизацией в определенной степени, и динамическая маршрутизация выглядит более элегантно.
Однако, если определение маршрутизации в фоновом режиме неудовлетворительно, а параметры, переданные внешним интерфейсом, пусты, динамическая маршрутизация станет/user/
, доступный интерфейс не/user/:id
этот маршрут, но/user/
Этот интерфейс отсутствует, серверная часть не может найти маршрут и напрямую возвращает 404 или пользовательскую ошибку.
маршрут переписать
Фоновые фреймворки, с которыми я столкнулся, это ThinkPHP и thinkjs. Эти два относительно похожи. У них обоих есть функция, позволяющая выполнять перезапись маршрута, например добавлять суффикс после определенного маршрута.ext: '.html'
, затем посетите/user/1.html
будет проанализирован как/user/:id
, В тех компаниях, которые еще не разделили фронт и бэкенд, это должен быть метод вывода главной страницы (помните, я не знаю, где я видел, что это вроде бы способствует SEO-оптимизации?).
Так что смотрите позжеhttp://test.com/user/1.html
При использовании такого URL-адреса больше нельзя просто предполагать, что он должен указывать на статический файл на сервере. Теперь он также может быть ответом после рендеринга шаблона.
Давайте поговорим о динамических серверах, давайте поговорим о статических серверах, потому что я столкнулся с фоном, после загрузки файлов на переднем конце, непосредственно сохраняя файлы в корневом каталоге системы Linux, а затем прописывая путь к файлу за доменом name Поднимитесь и удивитесь, почему я не могу получить к нему доступ?
корневой каталог веб-сервера
Обычно используемый статический сервер — nginx.Настройте сжатие статических файлов, кеширование, прокси, идентификацию оборудования для прыжков, кадрирование изображений и т. д. — все это очень просто.
Сказав это, текущая компания по-прежнему помещает мои внешние файлы в контейнер tomcat и не предоставляет мне выделенный сервер nginx, о (╥﹏╥) о. Каждый раз, когда я заканчиваю изменять файл, я должен запаковать его в сжатый пакет и отправить в фон, положить под контейнер tomcat, затем загрузить на сервер, перезапустить контейнер, и, наконец, кеш плохо контролируется , а сжатие не делается. После перезапуска у меня возникает вопрос, не правильно ли был отправлен мой файл, почему этот файл не обновляется? ? ? На самом деле, использование nginx вкупе с git hooks — это всего лишь несколько командных строк.Давайте поговорим о корневом каталоге веб-сервера.Популярными веб-серверами в основном являются nginx, apache и tomcat Последние два в основном используются в фоновом режиме и не раскрывают интерфейс напрямую. Эти статические серверы будут иметь корневой каталог, настроенный для настройки веб-сервера, так какова роль этого корневого каталога?Которые контролируют доступ клиента к каталогу верхнего уровня.Например, корневой каталог WWW, который является файлом, который не может быть доступен для доступа к другим файлам, кроме каталога WWW.
Ссылка на ссылку
- Глоссарий URL и URI
- Полное руководство по HTTP
- Весь процесс выполняется после ввода URL в браузере