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

Опубликовано 7 января, 2009 в Сайтостроительство

Начнем с того, как работает протокол http. Несмотря на то, что это несколько удаленно от темы PHP, это очень важно знать. Почему – вы сами поймете в будущем, когда возникнет необходимость работать с сокетами, заголовками, cookies.
Итак, что же происходит, когда мы жмем на ссылку, чтобы перейти на какую-то страницу сайта? Все очень просто. Браузер посылает заголовок веб-серверу в виде текста:

GET /page.php HTTP/1.1

GET – метод запроса. (Может быть и POST, но он нас пока мало интересует, так как мы всего-лишь нажали на ссылку).
/page.php – страница, контент которой нужно получить.
HTTP/1.1 – протокол, по которому будет осуществлена связь..

Далее сервер получает этот заголовок. Теперь его главнейшей задачей является отдать то, что находится в файле page.php.

Небольшое замечание – такого файла может вообще не существовать на сервере, так как есть специальные команды, которые могут перенаправлять вызовы на другой файл, но тем не менее в адресной строке браузера клиента будет отображаться тот файл, который он ввел (у веб-сервера Apache эти команды называются mode_rewrite).

Вполне логично, что прежде чем отдать файл, веб-сервер должен сказать браузеру, что сейчас будет отдано. А будет ли отдано вообще что-либо? Давайте посмотрим, какие заголовки вернет нам www.php.net. Посылаем заголовок GET / HTTP/1.1, тоесть пытаемся получить главную страницу сайта. Если страница найдена, браузеру будет первым делом выслан заголовок:

HTTP/1.1 200 OK
Date: Wed, 30 Apr 2008 09:58:22 GMT
Server: Apache/1.3.41 (Unix) PHP/5.2.1
X-Powered-By: PHP/5.2.1
Last-Modified: Wed, 30 Apr 2008 09:33:56 GMT
Content-language: en
Set-Cookie: COUNTRY=RUS%2C62.165.54.6; expires=Wed, 07-May-2008 09:58:22 GMT; path=/; domain=.php.net
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html;charset=utf-8

Особую важность представляет первая строчка заголовков. Как видите, сервер вернул 200 ОК, это значит, что все впорядке, серверу есть что отдать. Если бы он вернул нам 404 Not Found, это значило бы, что такого документа не существует. Наверно, вы уже поняли, что будет возвращен код ошибки с описанием или 200 OK в случае успеха. Вот перечень кодов ответа сервера, которые могут быть возвращены браузеру.

Код. Название.
100 Continue
101 Switching Protocols
200 ОК
201 Created
202 Accepted
203 Non-Authoritative Information
204 No Content
205 Reset Content
206 Partial Content
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
303 See Other
304 Not Modified
305 Use Proxy
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Time-out
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request URL Too Long
415 Unsupported Media Type
416 Requested Range Not Satisfiable
417 Requested Range Not Satisfiable
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Time-out
505 HTTP Version not supported

Далее, через отступ, браузеру сообщается о типе файла, дате его последней модификации, языке страницы и прочее. В данном случае Content-Type: text/html;charset=utf-8 говорит браузеру, что сейчас ему будет передан текстовый HTML документ в кодировке UTF-8. Да, да, это тот же параметр, который мы можем отдавать в мета-тегах HTML страницы. После двух отступов будет содержаться сам HTML код, который браузер должен будет обработать и вывести на экран в удобочитаемом виде. Стоит заметить, что найдя код, например, картинки, браузер получает её параметр src и отправляет снова заголовок веб-серверу, что ему нужно получить такой-то файл. Сервер отдаёт браузеру заголовок о том, что далее следует картинка, браузер ее скачивает и выводит на экран. Тоже самое происходит с прикреплёнными таблицами стилей, JS скриптами и т.д.

Вообще, http – это целая наука, которую PHP программист знать не обязан. Но обязан знать самые азы. Хотябы что такое заголовки.

Сделаем вывод. Грубо говоря, заголовки – это язык общения между браузером и веб-сервером по протоколу http.

Спонсор записи – сайт mobiicq.ru, на котором вы можете скачать icq 3.0 для мобильного. Для меня мобильная аська – это необходимость. Ведь заказчик каждый час хочет знать, что нового с проектом, и разработчик должен быть всегда на связи, даже когда он где-то далеко от компьютера.

Скоро доживем и до мобильного веб-сервера на Java :)




Комментарии «Как работает веб-сервер»:
Комментариев: 3. Обязательно оставьте свой!
zael 05.05.2010 в 5:55

Может подскажете что делать сервер возвращает 403 и по ftp попасть не могу . все это после сайтмап генератора

Тенгри 21.12.2010 в 11:30

эх.. а как вебсервер выдачу статического контента осуществляет, узнать бы ?
сам алгоритм выдачи, неужели каждый файл открывает, читает, а затем отдает данные с этого файла ?

Сергей 02.08.2011 в 7:40

«у веб-сервера Apache эти команды называются mode_rewrite»
что за бред, правильно писать так:
«на стороне сервера Apache все запросы к файлам (в т.ч. скриптам) могут предварительно обрабатываться модулем mod_rewrite, логику работы которого задаете вы сами (как правило, через файл .htaccess)»

Ваш комментарий: