Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

http запросы

74K
29 ноября 2011 года
wolfThGun
7 / / 29.11.2011
Хочу разобраться в http запросах. Прочитал статью. В пункте 1.2 написано, что если написать GET http://www.php.net/ HTTP/1.0\r\n\r\n, я получу в ответ хтмл код главной страницы сайта php.net. Но мне выдает только версию Apache и PHP. А между тегами <title> и<body> написано: "Bad request. Server colud not understand........." Что я не так делаю?
278
29 ноября 2011 года
Alexander92
1.1K / / 04.08.2008
 
Код:
GET / HTTP/1.0\r\n
Host: www.php.net\r\n\r\n
4
29 ноября 2011 года
mike
3.7K / / 01.10.2002
Дело в том что есть HTTP/1.0, а есть HTTP/1.1

Главное отличие 1.1 в том что поддерживается дополнительное поле "Host", где можно указать hostname сервера. Благодаря этому на этом физическом сервере можно размещать любое количество сайтов с разными именами хостов. В 1.0 было все очень просто: один IP адрес - один сайт.
74K
29 ноября 2011 года
wolfThGun
7 / / 29.11.2011
Ну сделал я запрос GET / HTTP/1.1\r\n
Host: php.net\r\n\r\n

Выдает ошибку 400. Как же все таки получить в ответ от сервера исходный код главной страницы? Может в запросе нужно указывать еще какие-то параметры?
278
29 ноября 2011 года
Alexander92
1.1K / / 04.08.2008
Ну 408-я ошибка - это таймаут, если правильно помню. Вы, скорее всего, делаете слишком большую задержку между физическим подключением и отправкой запроса.
285
29 ноября 2011 года
Romik
479 / / 24.11.2002
есть смысл показать сам код, который отправляет запрос, в противном случае прийдётся решать задачу основываясь на догадках
74K
29 ноября 2011 года
wolfThGun
7 / / 29.11.2011
В командной строке пишу: telnet php.net 80. После этого: GET / HTTP/1.1\r\n
Host: php.net\r\n\r\n
285
29 ноября 2011 года
Romik
479 / / 24.11.2002
\r\n подразумевает перевод строки, когда в telnet вы жмёте Enter, то тем самым отправляете перевод строки. А вот насчёт управляющих символов в telnet я не уверен. С чего бы ему кушать \r\n, когда он и без того получает код Enter?

вот что у меня получилось (представлено лишь начало вывода):

Код:
$ telnet www.php.net 80
Trying 69.147.83.197...
Connected to y2.php.net.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.php.net

HTTP/1.1 200 OK
Date: Tue, 29 Nov 2011 19:33:50 GMT
Server: Apache/1.3.41 (Unix) PHP/5.2.17
X-Powered-By: PHP/5.2.17
Content-language: en
Set-Cookie: COUNTRY=RUS%2C88.84.213.199; expires=Tue, 06-Dec-2011 19:33:50 GMT; path=/; domain=.php.net
Last-Modified: Tue, 29 Nov 2011 22:20:23 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html;charset=utf-8

f26
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <title>PHP: Hypertext Preprocessor</title>
 <style type="text/css" media="all">
  @import url("http://static.php.net/www.php.net/styles/site.css");
  @import url("http://static.php.net/www.php.net/styles/phpnet.css");
 
 </style>
 <!--[if IE]><![if gte IE 6]><![endif]-->
  <style type="text/css" media="print">
   @import url("http://static.php.net/www.php.net/styles/print.css");
  </style>
 <!--[if IE]><![endif]><![endif]-->
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
74K
29 ноября 2011 года
wolfThGun
7 / / 29.11.2011
Большое вам спасибо. Всё получилось :) Можете посоветовать какую нибудь литературу или статьи, где описана работа протокола http ?
14
30 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: mike

Главное отличие 1.1 в том что поддерживается дополнительное поле "Host", где можно указать hostname сервера. Благодаря этому ...


Это не совсем так. Поле Host в 1.1 - обязательное, в 1.0 - нет.

Цитата: wolfThGun
Большое вам спасибо. Всё получилось :) Можете посоветовать какую нибудь литературу или статьи, где описана работа протокола http ?


RFC2616 и связанные, можно тут

12
30 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Phodopus
Это не совсем так. Поле Host в 1.1 - обязательное, в 1.0 - нет.


"Борис, ты не прав!" (с)
...а точнее заблуждаешься. В RFC 1945 заголовка Host (глава 5) еще не было, в RFC 2616 он уже есть и описывается в 14.23.

Понятие host-та в RFC 1945 безусловно есть, но это не заголовок запроса, это часть URI.

14
30 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: alekciy
"Борис, ты не прав!" (с)


Да, это сложный момент, его там нет (но я ж не говорю что он там есть :) ). Просто насколько я помню историю этого вопроса дело было так. В заголовки ты имеешь право добавлять свои поля. И поле Host стало добавляться очень рано и очень многими. И констатировалось что 99% используемых в 2000 году браузеров (включая сильно устаревшие) это поле посылали в своих HTTP/1.0 запросах.

12
01 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Phodopus
Да, это сложный момент, его там нет (но я ж не говорю что он там есть :) ). Просто насколько я помню историю этого вопроса дело было так. В заголовки ты имеешь право добавлять свои поля. И поле Host стало добавляться очень рано и очень многими. И констатировалось что 99% используемых в 2000 году браузеров (включая сильно устаревшие) это поле посылали в своих HTTP/1.0 запросах.


Поскольку HTTP протокол является расширяемым, то в запросах можно использовать какие угодно заголовки. Сам несколько таких активно юзаю. Но это не делает их частью стандарта, поэтому вносить неоднозначность в их интерпретацию. Я на это обращаю внимание. Поэтому утверждение о том, что в HTTP 1.0 заголовок Host был необязательным не корректно.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог