Схема URI файла
В программировании схема универсального идентификатора ресурса файла (URI) представляет собой особый формат URI , используемый для конкретной идентификации файла на главном компьютере. Хотя URI можно использовать для идентификации чего угодно, существует особый синтаксис, связанный с идентификацией файлов. [1] [2]
Формат
[ редактировать ]URI файла имеет формат
file://host/path
где хост — это полное доменное имя системы, в которой путь доступен , а путь — это иерархический путь к каталогу в форме каталог / каталог /.../ имя . Если хост опущен, то считается « localhost », то есть машина, с которой интерпретируется URL-адрес. Обратите внимание, что при опускании хоста косая черта не опускается (в то время как " файл:///piro.txt "действителен", файл://simpen.txt нет, хотя некоторым переводчикам удается справиться с последним).
RFC 3986 включает дополнительную информацию об обработке «..» и «.» сегменты в URI.
Количество символов косой черты
[ редактировать ]- Последовательность двух символов косой черты (//) после строкового файла: означает, что за ним следует либо имя хоста, либо буквальный термин localhost , [3] хотя эта часть может быть полностью опущена или может содержать пустое имя хоста. [4]
- Одинарная косая черта между хостом и путем обозначает начало части URI, связанной с локальным путем, и должна присутствовать. [5]
- Поэтому действительный URI файла должен начинаться либо с
file:/path
(без имени хоста),file:///path
(пустое имя хоста) илиfile://hostname/path
. file://path
(т.е. две косые черты без имени хоста) никогда не являются правильными, но часто используются.- Дальнейшие косые черты в пути разделяют имена каталогов в иерархической системе каталогов и подкаталогов. В этом случае косая черта является общим, независимым от системы способом разделения частей, и в конкретной хост-системе она может использоваться как таковая в любом пути (как в системах Unix).
Существует два способа создания имен файлов Windows UNC (например, \\server\folder\data.xml
) можно представить. Оба они описаны в RFC 8089, Приложение E, как «нестандартные». Первый способ (называемый здесь форматом с двумя косыми чертами) заключается в представлении имени сервера с использованием части полномочий URI, которая затем становится file://server/folder/data.xml
. Второй способ (называемый здесь форматом с 4 косыми чертами) заключается в представлении имени сервера как части компонента Path , поэтому URI становится file:////server/folder/data.xml
. Обе формы активно используются. Microsoft .NET (например, метод new Uri(path)
) обычно использует форму с двумя косыми чертами; Java (например, метод new URI(path)
) обычно использует форму с 4 косыми чертами. Любая форма позволяет успешно использовать наиболее распространенные операции с URI (разрешение относительных URI и разыменование для получения соединения с удаленным файлом). Однако, поскольку эти URI нестандартны, некоторые менее распространенные операции завершаются сбоем: примером является операция нормализации (определенная в RFC 3986 и реализованная в Java). java.net.URI.normalize()
метод), который уменьшает file:////server/folder/data.xml
в непригодную для использования форму file:/server/folder/data.xml
. [6]
Примеры
[ редактировать ]Юникс
[ редактировать ]Вот два примера Unix , указывающие на один и тот же файл /etc/fstab :
file://localhost/etc/fstab file:///etc/fstab
Среда KDE использует URI без поля полномочий:
file:/etc/fstab
Окна
[ редактировать ]Вот несколько примеров, которые могут быть приняты некоторыми приложениями в системах Windows, ссылаясь на один и тот же локальный файл c: \ WINDOWS \ lock.avi.
file://localhost/c:/WINDOWS/clock.avi file:///c:/WINDOWS/clock.avi
Вот URI, понятный API оболочки Windows: [7]
file:///c:/WINDOWS/clock.avi
Обратите внимание, что буква диска, за которой следуют двоеточие и косая черта, является частью допустимого URI файла.
Реализации
[ редактировать ]Окна
[ редактировать ]В системах Microsoft Windows обычное двоеточие (:) после буквы устройства иногда заменялось вертикальной чертой (|) в URL-адресах файлов. Это отражало исходный синтаксис URL-адреса, в котором двоеточие было зарезервированным символом в части пути.
Начиная с Internet Explorer 4 , URI файлов стандартизированы в Windows и должны следовать следующей схеме. Это относится ко всем приложениям, которые используют URLMON или SHLWAPI для анализа, выборки или привязки к URI. Чтобы преобразовать путь в URL-адрес, используйте UrlCreateFromPath
и чтобы преобразовать URL-адрес в путь, используйте PathCreateFromUrl
. [7]
Чтобы получить доступ к файлу «file.txt», можно использовать следующее.
Для сетевого расположения:
file://hostname/path/to/the%20file.txt
Или для локального файла имя хоста опускается, но косая черта отсутствует (обратите внимание на третью косую черту):
file:///c:/path/to/the%20file.txt
Это не то же самое, что предоставить строку «localhost» или точку «.» вместо имени хоста. Строка «localhost» попытается получить доступ к файлу по UNC . пути \\localhost\c:\path\to\the file.txt
, что не будет работать, поскольку в имени общего ресурса не допускается использование двоеточия. Точка "." приводит к тому, что строка передается как \\.\c:\path\to\the file.txt
, который будет работать с локальными файлами, но не с общими папками в локальной системе. Например file://./sharename/path/to/the%20file.txt
не будет работать, поскольку это приведет к тому, что имя общего ресурса будет интерпретироваться как часть пространства имен DOSDEVICES, а не как общий сетевой ресурс.
В следующей схеме примерно описаны требования.
- Следует использовать двоеточие, которое не следует заменять вертикальной чертой в Internet Explorer.
- Для разделения путей следует использовать косую черту.
- Такие символы, как решетка (#) или вопросительный знак (?), являющиеся частью имени файла, должны быть закодированы в процентах .
- Символы, которые не разрешены в URI, но разрешены в именах файлов, также должны быть закодированы в процентах. Например, любой из " {}`^ " и все управляющие символы. В приведенном выше примере пробел в имени файла закодирован как %20.
- Символы, разрешенные как в URI, так и в именах файлов, НЕ должны кодироваться в процентах.
- Не следует использовать устаревшие кодировки ACP. (Кодовые страницы ACP задаются языковыми настройками DOS CHCP или панели управления Windows.)
- Символы Юникода за пределами диапазона ASCII должны иметь кодировку UTF-8 , а эти кодировки UTF-8 должны быть закодированы в процентах.
Если есть возможность, используйте предоставленные функции. Если вам необходимо создать URL-адрес программным способом и вы не можете получить доступ к SHLWAPI.dll (например, из сценария или другой среды программирования, где эквивалентные функции недоступны), приведенная выше схема поможет.
Устаревшие URL-адреса
[ редактировать ]В помощь установленной базе устаревших приложений на Win32. PathCreateFromUrl
распознает определенные URL-адреса, которые не соответствуют этим критериям, и обрабатывает их единообразно. Они называются «устаревшими» URL-адресами файлов, в отличие от «здоровых» URL-адресов файлов. [8]
В прошлом множество других приложений использовали другие системы. Некоторые добавили еще две косые черты. Например, путь UNC \\remotehost\share\dir\file.txt
стал бы file:////remotehost/share/dir/file.txt
вместо "здорового" file://remotehost/share/dir/file.txt
.
Веб-страницы
[ редактировать ]URL-адреса файлов редко используются на веб-страницах в общедоступном Интернете, поскольку они подразумевают, что файл существует на назначенном хосте. Спецификатор хоста может использоваться для получения файла из внешнего источника, хотя конкретный протокол получения файла не указан; и его использование должно привести к появлению сообщения, информирующего пользователя о том, что механизм доступа к этой машине недоступен.
Ссылки
[ редактировать ]- ^ Кервин, Мэтью (февраль 2017 г.). Схема URI «файл» (отчет). Рабочая группа по интернет-инжинирингу.
- ^ «Что такое универсальный идентификатор ресурса (URI)?» . WhatIs.com . Проверено 12 сентября 2023 г.
- ^ RFC 8089, раздел 2
- ^ RFC 3986, раздел 3.2.2.
- ^ RFC 3986, раздел 3.3.
- ^ RFC 8089, Приложение E
- ^ Перейти обратно: а б Рисни, Дэйв (2006). «Файловые URI в Windows» . IEBlog . Корпорация Майкрософт . Проверено 2 октября 2020 г.
- ^ Причудливая и несчастная история URL-адресов «file:» — Свободные ассоциации — Домашняя страница сайта — Блоги MSDN . Blogs.msdn.com (19 мая 2005 г.). Проверено 08 марта 2014 г.