Как веб-сервер находит файл на сервере через URL-адрес?

Кто-нибудь когда-нибудь пытался реализовать веб-сервер? Или знаете что-нибудь о сути работающей программы веб-сервера? Мне интересно, что именно происходит, когда веб-сервер получает URL-адрес, когда файл на веб-сервере находится и отправляется обратно в качестве ответа.

Хранит ли сервер только внутреннюю таблицу для запоминания сопоставления между URL-адресами, которые он поддерживает, и соответствующими локальными путями? Или есть что-то более сложное?

Спасибо!

Обновление

Спасибо за ответы. Вот мое понимание на данный момент.

Я проверил в Microsoft IIS (Internet Information Service), я заметил, что IIS может размещать несколько сайтов, и каждый сайт IIS запоминает свой корневой путь в локальной файловой системе. Разные сайты на одном и том же хосте используют одно и то же имя хоста или IP-адрес, и они различаются разными портами. Например:

http://www.myServer.com:1111/folderA/pageA.htm

Веб-сервер будет использовать www.myServer.com:1111 часть строки URL-адреса, чтобы определить, какой путь в его локальной файловой системе будет использоваться, а затем в этом локальном пути он ищет подпапку , папкуA , а затем файл pageA. htm .

Веб-сервер только должен запомнить следующее сопоставление между двумя простыми строками:

"http://www.myServer.com:1111/" <---> "D:\myWebRoot"

Я не знаю, где хранится такая информация о сопоставлении, возможно, некоторые файлы конфигурации для рассматриваемой программы веб-сервера.

Но результатом этого сопоставления степени детализации является то, что мы могли получить доступ только к контенту в этой сопоставленной локальной папке. Мы не могли выполнить произвольное сопоставление.

Обновление - 2 -

Я обнаружил, где IIS хранит сопоставление, вот несколько цитат из applicationHost.config:

<sites>
    <site name="Default Web Site" id="1" serverAutoStart="false">
        <application path="/">
            <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:80:" />
            <binding protocol="net.tcp" bindingInformation="808:*" />
            <binding protocol="net.pipe" bindingInformation="*" />
            <binding protocol="net.msmq" bindingInformation="localhost" />
            <binding protocol="msmq.formatname" bindingInformation="localhost" />
        </bindings>
    </site>
    <site name="myIISService" id="2" serverAutoStart="true">
        <application path="/" applicationPool="myIISService">
            <virtualDirectory path="/" physicalPath="D:\MySites\MyIISService" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8022:" />
        </bindings>
    </site>
    <siteDefaults>
        <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
        <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
    </siteDefaults>
    <applicationDefaults applicationPool="DefaultAppPool" />
    <virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>

Обновление - 3 -

После того, как я прочитал ] foo , мое понимание "сервера" расширяется. Я хочу сделать несколько комментариев, основанных на моем недавнем изучении WCF.

Независимо от того, что это за сервер, мы всегда можем отправлять им сообщения, указав протокол, URL, порт. Например:

[http://www.myserver.com:1111/]page.htm

[net.tcp://www.myserver.com/]someService.svc/someMethod

[net.msmq://www.myserver.com/]someService.svc

[net.pipe://localhost/]

После того, как сообщения поступят в серверную программу с использованием частей в квадратных скобках вышеуказанных URL-адресов, оставшаяся часть URL-адреса будет отправлена ​​серверной программе в качестве входных данных для дальнейшей обработки. И следующее поведение может быть таким простым, как подача статического контента, или сложным, как создание динамического контента.

5
задан Community 23 May 2017 в 10:34
поделиться