Как работает веб-сервер
Опубликовано 7 января, 2009 в СайтостроительствоНачнем с того, как работает протокол http. Несмотря на то, что это несколько удаленно от темы PHP, это очень важно знать. Почему – вы сами поймете в будущем, когда возникнет необходимость работать с сокетами, заголовками, cookies.
Итак, что же происходит, когда мы жмем на ссылку, чтобы перейти на какую-то страницу сайта? Все очень просто. Браузер посылает заголовок веб-серверу в виде текста:
GET /page.php HTTP/1.1
GET – метод запроса. (Может быть и POST, но он нас пока мало интересует, так как мы всего-лишь нажали на ссылку).
/page.php – страница, контент которой нужно получить.
HTTP/1.1 – протокол, по которому будет осуществлена связь..
Далее сервер получает этот заголовок. Теперь его главнейшей задачей является отдать то, что находится в файле page.php.
Вполне логично, что прежде чем отдать файл, веб-сервер должен сказать браузеру, что сейчас будет отдано. А будет ли отдано вообще что-либо? Давайте посмотрим, какие заголовки вернет нам 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. Обязательно оставьте свой!
Может подскажете что делать сервер возвращает 403 и по ftp попасть не могу . все это после сайтмап генератора
эх.. а как вебсервер выдачу статического контента осуществляет, узнать бы ?
сам алгоритм выдачи, неужели каждый файл открывает, читает, а затем отдает данные с этого файла ?
«у веб-сервера Apache эти команды называются mode_rewrite»
что за бред, правильно писать так:
«на стороне сервера Apache все запросы к файлам (в т.ч. скриптам) могут предварительно обрабатываться модулем mod_rewrite, логику работы которого задаете вы сами (как правило, через файл .htaccess)»