File protocol url windows

Как открыть файл по протоколу http://, если он открыт в браузере локально, т.е. по протоколу file:/// ?

Статья может быть полезна тем, кто работает с html-страницами локально, т.е. на своем персональном компьютере.

Если найти в проводнике Windows какой-либо html-файл и кликнуть по нему два раза мышью, он откроется в браузере, являющимся браузером по умолчанию по протоколу file:/// . Это — так называемый локальный протокол, точнее, даже псевдо протокол. При этом никакие серверные технологии (например, SSI, PHP, node.js и т.п.) доступны не будут. Не будет функционировать AJAX. Соответственно, страница сайта может отображаться не полностью, а то и некорректно. Как быть?

Необходимо открыть эту страницу в браузере по протоколу HTTP

Однако, для этого необходимо знать ее URL и, что самое главное, потребуется вписать этот URL в адресную строку браузера (или как вариант, можно перейти на эту страницу по ссылке откуда-нибудь, но там, опять-таки, должен присутствовать корркетный URL). Разумеется, потратив пару минут, вполне можно написать URL в адресной строке вручную и затем кликнуть мышью «Перейти». Но, это как-то долго и неудобно, хотелось бы ускорить процесс, чтобы страница сама открылась по протоколу http (вместо file) без особых затруднений. Одним из выходов является создание букмарклета.

Пишем букмарклет

Приведем сразу javascript-код букмарклета:

Этот букмарклет можно скопировать, создать закладку браузера и в ее (закладки) свойствах в поле для адреса вставить код букмарклета.

Не пугайтесь на некий «страшный» код: дело в том, что для удобства, букмарклет выдает русскоязычное сообщение и оно как раз и отображается символами вида %D1%80%D0%BE%D1%81. . Для облегчения понимания работы букмарклета дадим его «обычный» вид:

script type= «text/javascript» >
var status = checkServerStatus();
function setServerStatus(status) <
alert (status);
return status;
>
function checkServerStatus() <
// setServerStatus(«unknown»);
var img = document . createElement ( «img» );
img . onload = function ()< // Проверяем доступность сервера на загрузку картинки
// setServerStatus(«online»);
// Если находимся на локальном сайте, то пробуем изменить URL c file:/// на http://
change_URL_from_file_to_HTTP();
>;
img . onerror = function () < // Если сервер недоступен
setServerStatus( «Запрос сделан на сайт site.ru в интернете, а не на локальный сайт. \n Поэтому перейти с протокола file:/// на протокол http:// пока не получится. \n\n Попробуйте полностью обновить страницу (Ctrl + F5)» );
>;
img . src = » http://site.ru/server_CONTROL.png » ;
>

function change_URL_from_file_to_HTTP() <
var hr = window . location . href ;
if ( window . location . protocol . replace ( /[^a-zA-Z]/ , «» ). toLowerCase () === ‘file’ ) <
// Заменяем запрос file:///C:/dir/site.ru/www/ на http://site.ru/
hr = hr . replace ( /file:\/\/\/[a-zA-Z]:\/(.*?)[a-zA-Z/-_]*?(\/[a-zA-Z-_]+?\.[a-zA-Z]*?)\/w<3>/ , «http:/$2» );
// Если URL страницы совпадает с полученным адресом (hr), то ничего не делаем; если нет — переходим по адресу hr
if ( hr != window . location . href ) <
window.location.href = hr;
>
>
>
script >

Как все работает

При вызове букмарклета из закладки на соответствующую html-страницу подгружается указанный скрипт. Который вначале проверяет доступность локального сервера. Если речь идет о локальном компьютере (т.е. именно на нем была открыта вкладка, имеющая URL вида file:///C:/dir/site.ru/www/TEST/123.html и которую требуется открыть по протоколу http, т.е. в виде http://site.ru/TEST/123.html ), то, соответственно, должен быть запущен локальный сервер. Автор статьи использовал старый добрый (и надежный, к тому же) Denwer, но вполне можно применить и что-то другое.

Доступность локального сервера проверяется путем попытки скачивания с него какой-нибудь картинки, в данном случае — имеющей URL http://site.ru/server_CONTROL.png . Чем меньше ее размер, тем лучше. Важно, чтобы такой картинки НЕ БЫЛО на сайте site.ru в интернете (по указанному URL), но чтобы она присутствовала на локальном сайте. Способ проверки доступности сервера при помощи картинки применялся еще, наверное, лет 20 назад и уже вполне зарекомендовал себя. Это — наиболее эффективный, простой и, главное, кроссбраузерный способ. То, что предлагают на ряде других сайтов — из серии: использовать AJAX, или JSONP-запрос, или специальные сервисы в интернете, является неоправданно сложным, да и неудобным для данного случая.

Кстати, отображать картинку на странице нет необходимости, да и мешаться она там будет. Для гарантии того, что запрос был именно на локальный сервер, вполне достаточно проверить событие onload.

Если картинка скачается (сработает событие onload), то есть ясная гарантия, что запрос был направлен именно на локальный сервер. А, значит, можно пытаться загрузить страницу по протоколу http:// вместо file:/// . Это пытается делать функция change_URL_from_file_to_HTTP() . Эта функция при помощи регулярного выражения заменяет строку в запросе вида file:///C:/dir/site.ru/www/ на строку вида http://site.ru/ , формируя соответствующий URL. Затем функция проверяет, не по этому ли URL уже открыта текущая html-страница: если нет, то загружает страницу по URL, содержащем протокол http. Дело в том, что если не сделать такой проверки, может возникнуть зацикливание: страница будет каждый раз пытаться открыться вновь по тому же самому URL вида http://site.ru/ .

Читайте также:  Использовать windows как airplay

Если же локальный сервер (Denwer или т.п.) не будет запущен, картинка загрузиться не сможет и букмарклет выдаст соответствующее сообщение.

Как мне создать свой собственный протокол URL? (например, так: //…) [закрыто]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он был по теме переполнения стека.

Закрыто 2 года назад .

Что это за первый раздел, где вы видите http и тому подобное?

Могу ли я зарегистрироваться самостоятельно?

Часть с HTTP:// , FTP:// и т. Д. Называется схемами URI

Вы можете зарегистрировать свой собственный через реестр.

Откройте блокнот и вставьте в него код ниже. Измените «YourApp» на имя вашего приложения. Сохраните его в YourApp.reg и выполните его, нажав на него в проводнике. Это оно! Ура! Эрвин Хаантес

Это отличается для каждого браузера, в IE и Windows вам нужно создать то, что они называют подключаемым обработчиком протокола.

Основные шаги заключаются в следующем:

  1. Реализовать интерфейс IInternetProtocol.
  2. Реализуйте интерфейс IInternetProtocolRoot.
  3. Реализуйте интерфейс IClassFactory.
  4. По желанию. Реализуйте интерфейс IInternetProtocolInfo. Поддержка протокола HTTP обеспечивается обработчиком транзакций.
  5. Если реализовано IInternetProtocolInfo, обеспечьте поддержку PARSE_SECURITY_URL и PARSE_SECURITY_DOMAIN, чтобы менеджер зон безопасности URL-адресов мог правильно обрабатывать безопасность. Напишите код для вашего обработчика протокола.
  6. Обеспечить поддержку BINDF_NO_UI и BINDF_SILENTOPERATION.
  7. Добавьте подраздел для вашего обработчика протокола в реестре в HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler.
  8. Создайте строковое значение CLSID в подразделе и установите для строки значение CLSID вашего обработчика протокола.

Посмотрите Об Асинхронных Сменных Протоколах на MSDN для получения дополнительной информации на стороне Windows. Существует также образец в Windows SDK.

Быстрый Google также показал эту статью на codeproject: http://www.codeproject.com/KB/IP/DataProtocol.aspx .

Наконец, как сотрудник службы безопасности, я должен указать, что этот код должен быть усилен в бою. Это связано с высокой степенью риска, потому что для надежного выполнения этого вы не можете сделать это в управляемом коде и должны делать это в C ++ (я полагаю, вы могли бы использовать VB6). Вы должны подумать, действительно ли вам нужно это делать, и если вы это сделаете, тщательно продумайте его и надежно закодируйте. Злоумышленник может легко контролировать передаваемый вам контент, просто включив ссылку на страницу. Например, если у вас простое переполнение буфера, тогда никто не сделает этого: Click me for free porn

How do I create my own URL protocol? (e.g. so://…) [closed]

Want to improve this question? Update the question so it’s on-topic for Stack Overflow.

Closed 3 years ago .

What is that first section where you see http and the like called?

Can I register my own?

8 Answers 8

The portion with the HTTP:// , FTP:// , etc are called URI Schemes

You can register your own through the registry.

Open notepad and paste the code below into it. Change «YourApp» into your app’s name. Save it to YourApp.reg and execute it by clicking on it in explorer. That’s it! Cheers! Erwin Haantjes

This is different for each browser, in IE and windows you need to create what they call a pluggable protocol handler.

The basic steps are as follows:

  1. Implement the IInternetProtocol interface.
  2. Implement the IInternetProtocolRoot interface.
  3. Implement the IClassFactory interface.
  4. Optional. Implement the IInternetProtocolInfo interface. Support for the HTTP protocol is provided by the transaction handler.
  5. If IInternetProtocolInfo is implemented, provide support for PARSE_SECURITY_URL and PARSE_SECURITY_DOMAIN so the URL security zone manager can handle the security properly. Write the code for your protocol handler.
  6. Provide support for BINDF_NO_UI and BINDF_SILENTOPERATION.
  7. Add a subkey for your protocol handler in the registry under HKEY_CLASSES_ROOT\PROTOCOLS\Handler.
  8. Create a string value, CLSID, under the subkey and set the string to the CLSID of your protocol handler.

See About Asynchronous Pluggable Protocols on MSDN for more details on the windows side. There is also a sample in the windows SDK.

A quick google also showed this article on codeproject: http://www.codeproject.com/KB/IP/DataProtocol.aspx.

Finally, as a security guy I have to point out that this code needs to be battle hardened. It’s at a high risk because to do it reliably you can’t do it in managed code and have to do it in C++ (I suppose you could use VB6). You should consider whether you really need to do this and if you do, design it carefully and code it securely. An attacker can easily control the content that gets passed to you by simply including a link on a page. For example if you have a simple buffer overflow then nobody better do this: Click me for free porn

Читайте также:  Windows cmd exit on error

How to specify a local file within html using the file: scheme?

I’m loading a html file hosted on the OS X built in Apache server, within that file I am linking to another html file in the same directory as follows:

This works. However (for reasons too lengthy to go into) I am experimenting using the file: scheme instead, however I cannot get anything to work. Here is how I am re-writing the above line using file:

(192.168.1.57 is my current IP address)

Changing it to the following does also not work:

But the file cannot be found, how should it be specified using the file: scheme?

5 Answers 5

The file: URL scheme refers to a file on the client machine. There is no hostname in the file: scheme; you just provide the path of the file. So, the file on your local machine would be file:///

User/2ndFile.html . Notice the three slashes; the hostname part of the URL is empty, so the slash at the beginning of the path immediately follows the double slash at the beginning of the URL. You will also need to expand the user’s path;

does no expand in a file: URL. So you would need file:///home/User/2ndFile.html (on most Unixes), file:///Users/User/2ndFile.html (on Mac OS X), or file:///C:/Users/User/2ndFile.html (on Windows).

Many browsers, for security reasons, do not allow linking from a file that is loaded from a server to a local file. So, you may not be able to do this from a page loaded via HTTP; you may only be able to link to file: URLs from other local pages.

The ‘file’ protocol is not a network protocol. Therefore file://192.168.1.57/

User/2ndFile.html simply does not make much sense.

Question is how you load the first file. Is that really done using a web server? Does not really sound like. If it is, then why not use the same protocol, most likely http? You cannot expect to simply switch the protocol and use two different protocols the same way.

I suspect the first file is really loaded using the apache server at all, but simply by opening the file? href=»2ndFile.html» simply works because it uses a «relative url». This makes the browser use the same protocol and path as where he got the first (current) file from.

the «file://» url protocol can only be used to locate files in the file system of the local machine. since this html code is interpreted by a browser, the «local machine» is the machine that is running the browser.

if you are getting file not found errors, i suspect it is because the file is not found. however, it could also be a security limitation of the browser. some browsers will not let you reference a filesystem file from a non-filesystem html page. you could try using the file path from the command line on the machine running the browser to confirm that this is a browser limitation and not a legitimate missing file.

I had similar issue before and in my case the file was in another machine so i have mapped network drive z to the folder location where my file is then i created a context in tomcat so in my web project i could access the HTML file via context

For apache look up SymLink or you can solve via the OS with Symbolic Links or on linux set up a library link/etc

My answer is one method specifically to windows 10.

So my method involves mapping a network drive to U:/ (e.g. I use G:/ for Google Drive)

open cmd and type hostname (example result: LAPTOP-G666P000 , you could use your ip instead, but using a static hostname for identifying yourself makes more sense if your network stops)

Press Windows_key + E > right click ‘This PC’ > press N (It’s Map Network drive, NOT add a network location)

If you are right clicking the shortcut on the desktop you need to press N then enter

Fill out U: or G: or Z: or whatever you want Example Address: \\LAPTOP-G666P000\c$\Users\username\

related: You can also use this method for FTPs, and setup multiple drives for different relative paths on that same network.

Как открыть файл по протоколу http://, если он открыт в браузере локально, т.е. по протоколу file:/// ?

Статья может быть полезна тем, кто работает с html-страницами локально, т.е. на своем персональном компьютере.

Читайте также:  Linux mint sarah upgrade

Если найти в проводнике Windows какой-либо html-файл и кликнуть по нему два раза мышью, он откроется в браузере, являющимся браузером по умолчанию по протоколу file:/// . Это — так называемый локальный протокол, точнее, даже псевдо протокол. При этом никакие серверные технологии (например, SSI, PHP, node.js и т.п.) доступны не будут. Не будет функционировать AJAX. Соответственно, страница сайта может отображаться не полностью, а то и некорректно. Как быть?

Необходимо открыть эту страницу в браузере по протоколу HTTP

Однако, для этого необходимо знать ее URL и, что самое главное, потребуется вписать этот URL в адресную строку браузера (или как вариант, можно перейти на эту страницу по ссылке откуда-нибудь, но там, опять-таки, должен присутствовать корркетный URL). Разумеется, потратив пару минут, вполне можно написать URL в адресной строке вручную и затем кликнуть мышью «Перейти». Но, это как-то долго и неудобно, хотелось бы ускорить процесс, чтобы страница сама открылась по протоколу http (вместо file) без особых затруднений. Одним из выходов является создание букмарклета.

Пишем букмарклет

Приведем сразу javascript-код букмарклета:

Этот букмарклет можно скопировать, создать закладку браузера и в ее (закладки) свойствах в поле для адреса вставить код букмарклета.

Не пугайтесь на некий «страшный» код: дело в том, что для удобства, букмарклет выдает русскоязычное сообщение и оно как раз и отображается символами вида %D1%80%D0%BE%D1%81. . Для облегчения понимания работы букмарклета дадим его «обычный» вид:

script type= «text/javascript» >
var status = checkServerStatus();
function setServerStatus(status) <
alert (status);
return status;
>
function checkServerStatus() <
// setServerStatus(«unknown»);
var img = document . createElement ( «img» );
img . onload = function ()< // Проверяем доступность сервера на загрузку картинки
// setServerStatus(«online»);
// Если находимся на локальном сайте, то пробуем изменить URL c file:/// на http://
change_URL_from_file_to_HTTP();
>;
img . onerror = function () < // Если сервер недоступен
setServerStatus( «Запрос сделан на сайт site.ru в интернете, а не на локальный сайт. \n Поэтому перейти с протокола file:/// на протокол http:// пока не получится. \n\n Попробуйте полностью обновить страницу (Ctrl + F5)» );
>;
img . src = » http://site.ru/server_CONTROL.png » ;
>

function change_URL_from_file_to_HTTP() <
var hr = window . location . href ;
if ( window . location . protocol . replace ( /[^a-zA-Z]/ , «» ). toLowerCase () === ‘file’ ) <
// Заменяем запрос file:///C:/dir/site.ru/www/ на http://site.ru/
hr = hr . replace ( /file:\/\/\/[a-zA-Z]:\/(.*?)[a-zA-Z/-_]*?(\/[a-zA-Z-_]+?\.[a-zA-Z]*?)\/w<3>/ , «http:/$2» );
// Если URL страницы совпадает с полученным адресом (hr), то ничего не делаем; если нет — переходим по адресу hr
if ( hr != window . location . href ) <
window.location.href = hr;
>
>
>
script >

Как все работает

При вызове букмарклета из закладки на соответствующую html-страницу подгружается указанный скрипт. Который вначале проверяет доступность локального сервера. Если речь идет о локальном компьютере (т.е. именно на нем была открыта вкладка, имеющая URL вида file:///C:/dir/site.ru/www/TEST/123.html и которую требуется открыть по протоколу http, т.е. в виде http://site.ru/TEST/123.html ), то, соответственно, должен быть запущен локальный сервер. Автор статьи использовал старый добрый (и надежный, к тому же) Denwer, но вполне можно применить и что-то другое.

Доступность локального сервера проверяется путем попытки скачивания с него какой-нибудь картинки, в данном случае — имеющей URL http://site.ru/server_CONTROL.png . Чем меньше ее размер, тем лучше. Важно, чтобы такой картинки НЕ БЫЛО на сайте site.ru в интернете (по указанному URL), но чтобы она присутствовала на локальном сайте. Способ проверки доступности сервера при помощи картинки применялся еще, наверное, лет 20 назад и уже вполне зарекомендовал себя. Это — наиболее эффективный, простой и, главное, кроссбраузерный способ. То, что предлагают на ряде других сайтов — из серии: использовать AJAX, или JSONP-запрос, или специальные сервисы в интернете, является неоправданно сложным, да и неудобным для данного случая.

Кстати, отображать картинку на странице нет необходимости, да и мешаться она там будет. Для гарантии того, что запрос был именно на локальный сервер, вполне достаточно проверить событие onload.

Если картинка скачается (сработает событие onload), то есть ясная гарантия, что запрос был направлен именно на локальный сервер. А, значит, можно пытаться загрузить страницу по протоколу http:// вместо file:/// . Это пытается делать функция change_URL_from_file_to_HTTP() . Эта функция при помощи регулярного выражения заменяет строку в запросе вида file:///C:/dir/site.ru/www/ на строку вида http://site.ru/ , формируя соответствующий URL. Затем функция проверяет, не по этому ли URL уже открыта текущая html-страница: если нет, то загружает страницу по URL, содержащем протокол http. Дело в том, что если не сделать такой проверки, может возникнуть зацикливание: страница будет каждый раз пытаться открыться вновь по тому же самому URL вида http://site.ru/ .

Если же локальный сервер (Denwer или т.п.) не будет запущен, картинка загрузиться не сможет и букмарклет выдаст соответствующее сообщение.

Оцените статью