Эта статья требует дополнительных ссылок для проверки . ( октябрь 2012 г. ) ( Узнайте, как и когда удалить это сообщение-шаблон ) |
Файла URI схема является схемой URI определен в RFC 8089 , как правило , используются для извлечения файлов из собственного компьютера.
Ранее схема URI файла была указана в RFC 1630 и RFC 1738 . Целевая группа Internet Engineering (IETF) опубликовала RFC 8089 , обновление последнего RFC, с «синтаксисом на основе общего синтаксиса RFC 3986 , который совместим с большинством существующих использований.» [1]
Форматировать [ редактировать ]
URI файла имеет форму
файл: // хост / путь
где хозяин является полным доменным именем системы , на которой путь доступен, и путь иерархический путь к директории в виде каталога / директорий /.../ имя . Если host опущен, это будет " localhost ", машина, с которой интерпретируется URL. Обратите внимание, что при опускании host косая черта не опускается (в то время как "файл: ///foo.txt" действует, "файл: //foo.txt"нет, хотя некоторым переводчикам удается справиться с последним).
RFC 3986 включает дополнительную информацию об обработке ".." и "." сегменты в URI.
Сколько косых черт? [ редактировать ]
- // после того , как файл: означает , что либо имя хост или буквальный термин
localhost
будет следовать, [2] , хотя эта часть может быть полностью опущена, или может содержать пустое имя хоста. [3] - Одиночная косая черта между хостом и путем обозначает начало части URI локального пути и должна присутствовать. [4]
- Следовательно, действительный URI файла должен начинаться с либо
file:/path
,file:///path
либоfile://hostname/path
. file://path
(т.е. две косые черты без имени хоста) никогда не является правильным, но часто используется.- Дальнейшие косые черты в пути разделяют имена каталогов в иерархической системе каталогов и подкаталогов. В этом случае косая черта - это общий, независимый от системы способ разделения частей, и в конкретной хост-системе он может использоваться как таковой в любом имени пути (как в системах Unix).
Существует два способа представления имен файлов Windows UNC (например, \\server\folder\data.xml
). Оба они описаны в [5] как «нестандартные». Первый способ (называемый здесь форматом с двумя косыми чертами) - представить имя сервера с помощью части Authority URI, которая затем становится file://server/folder/data.xml
. Второй способ (называемый здесь форматом с четырьмя косыми чертами) - представить имя сервера как часть компонента Path , так что URI станет file:////server/folder/data.xml
. Обе формы активно используются. Microsoft .NET (например, метод new Uri(path)
) обычно использует форму с двумя косыми чертами; Java (например, методnew URI(path)
) обычно использует форму с четырьмя косыми чертами. Любая форма позволяет успешно использовать наиболее распространенные операции с URI (разрешение относительных URI и разыменование для получения соединения с удаленным файлом). Однако, поскольку эти URI нестандартны, некоторые менее распространенные операции терпят неудачу: примером является операция нормализации (определенная в RFC 3986 и реализованная в java.net.URI.normalize()
методе Java ), которая сводится file:////server/folder/data.xml
к непригодной для использования форме file:/server/folder/data.xml
.
Примеры [ править ]
Unix [ править ]
Вот два примера Unix, указывающих на один и тот же файл / etc / fstab :
файл: // локальный / etc / fstabфайл: /// etc / fstab
Windows [ править ]
Вот несколько примеров, которые могут быть приняты некоторыми приложениями в системах Windows, ссылаясь на тот же локальный файл c: \ WINDOWS \ clock.avi
файл: //localhost/c$/WINDOWS/clock.aviфайл: /// c: /WINDOWS/clock.avi
Вот URI, как он понимается Windows Shell API: [6]
файл: /// c: /WINDOWS/clock.avi
Обратите внимание, что буква диска, за которой следует двоеточие и косая черта, является частью допустимого URI файла.
Реализации [ править ]
Windows [ править ]
В системах Microsoft Windows обычное двоеточие (:) после буквы устройства иногда заменяется вертикальной чертой (|) в URL-адресах файлов. Это отражало исходный синтаксис URL, который сделал двоеточие зарезервированным символом в части пути.
Начиная с Internet Explorer 4 , URI файлов стандартизированы в Windows и должны соответствовать следующей схеме. Это относится ко всем приложениям, которые используют URLMON или SHLWAPI для синтаксического анализа, выборки или привязки к URI. Чтобы преобразовать путь в URL-адрес, используйте UrlCreateFromPath
, а для преобразования URL-адреса в путь используйте PathCreateFromUrl
. [6]
Для доступа к файлу "the file.txt" можно использовать следующее.
Для сетевого расположения:
файл: //hostname/path/to/the%20file.txt
Или для локального файла имя хоста опускается, но косая черта нет (обратите внимание на третью косую черту):
файл: // / 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-адресами файлов. [7]
В прошлом многие другие приложения использовали другие системы. Некоторые добавили еще две косые черты. Например, вместо «здорового» \\remotehost\share\dir\file.txt
стал бы путь UNC .file:////remotehost/share/dir/file.txt
file://remotehost/share/dir/file.txt
Веб-страницы [ править ]
URL-адреса файлов редко используются на веб-страницах в общедоступном Интернете, поскольку они подразумевают, что файл существует на указанном хосте. Спецификатор хоста может использоваться для извлечения файла из внешнего источника, хотя конкретный протокол извлечения файла не указан; и его использование должно приводить к появлению сообщения, информирующего пользователя о том, что механизм доступа к этой машине недоступен.
Ссылки [ править ]
- ^ Схема URI "файла" . DOI : 10,17487 / RFC8089 . RFC 8089 . Проверено 16 октября 2018 года .
- ^ RFC 8089 , раздел 2
- ^ RFC 3986 , раздел 3.2.2
- ^ RFC 3986 , раздел 3.3
- ^ RFC 8089 , приложение E
- ^ a b Рисни, Дэйв (2006). «Файловые URI в Windows» . IEBlog . Корпорация Microsoft . Проверено 2 октября 2020 .
- ^ Странная и печальная история URL-адресов 'file:' - Бесплатные ассоциации - Домашняя страница сайта - Блоги MSDN . Blogs.msdn.com (19 мая 2005 г.). Проверено 8 марта 2014.
Внешние ссылки [ править ]
- URL-адреса файлов