| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > ответ на HTTP запрос |
| Автор: froex 17.4.2009, 08:47 | ||
Посылаю http-запрос на сервер. В ответе получаю ответ следующего вида:
Во-первых, мне не нравится, что не прислали content-length. Можно ли составить запрос таким образом, чтобы content-length прислали в ответе? Во-вторых, обратите внимание на символы "f60" перед принятым исходным кодом страницы. Что эти символы означают? Для разных web-страниц эти символы тоже разные. |
| Автор: azesmcar 17.4.2009, 08:59 | ||||
вот так получать длину, если ее не отправили..тут описан случай когда сервер "НЕ ДОЛЖЕН" посылать Content-Length
|
| Автор: froex 17.4.2009, 09:08 |
| спасибо. А про те три символа не знаете ничего? |
| Автор: azesmcar 17.4.2009, 09:18 | ||
Там должны быть только заголовки в формате MIME. Кто возвращяет страницу на сервере? Скрипт какой-то? Может он заголовки попортил? Попробуйте запросить у сервера простой HTML. Какой будет результат? Добавлено через 2 минуты и 28 секунд Нет нет..кажется понимаю..это похоже на http://en.wikipedia.org/wiki/Byte-order_mark Файл у вас UTF8? |
| Автор: froex 17.4.2009, 09:22 |
| HTTP 1.0 - тех символов нет HTTP 1.1 - те символы присутствуют |
| Автор: azesmcar 17.4.2009, 09:27 |
| froex Можете попробовать с файлов в кодировке ANSI на HTTP 1.1? |
| Автор: froex 17.4.2009, 09:36 | ||||
да, файл UTF-8. Насчет BOM - не совсем понял.
тоже не понял. |
| Автор: azesmcar 17.4.2009, 09:42 |
| froex Там ссылка http://en.wikipedia.org/wiki/Byte-order_mark BOM - Byte order mark. хранится в начале файла, хранит информацию о кодировке Юникода. Побольше информации, ОС Сервера, какой сервер и желательно файл в студию. |
| Автор: froex 17.4.2009, 09:48 |
Сервер на линуксе стоит. Какой сервер точно не знаю. Файл? Да любой файл web-страницы любого сайта. У меня для всех эти символы выводятся. Иногда f60, иногда c57. |
| Автор: azesmcar 17.4.2009, 10:01 | ||
| froex Про BOM
Добавлено через 24 секунды уберите БОМ из файла..все должно работать нормально |
| Автор: froex 17.4.2009, 10:03 |
Я принимаю ответ на char*, после чего вывожу в терминал. Редактора нет. |
| Автор: azesmcar 17.4.2009, 10:05 | ||
Речь идет о редакторе которым сохранялся файл, которые вы открываете на сервере. к примеру вы запрашиваете http://localhost/index.html Откройте index.html и уберите из него БОМ. Поищите в настройках редактора которым открываете, если нет, пришлите файл мне, я уберу - проверим. |
| Автор: froex 17.4.2009, 10:13 |
| В самом файле этих символов нету. А когда запрашиваю страницу с помощью GET-запроса, то символы появляются. |
| Автор: azesmcar 17.4.2009, 10:18 |
| froex А как проверял что их нет? в редакторе? Так их и не будет, они не видимы. Откройте в HEX редакторе. И все таки - файл можно посмотреть? Я его у вас уже 4-ый пост выпрашиваю. Что я могу сказать если вы мне информацию не даете.. |
| Автор: azesmcar 17.4.2009, 10:34 |
| Проверьте эти два файла http://217.73.200.72/hello.php - тут нет БОМ http://217.73.200.72/hello_bom.php - тут есть результат в студию |
| Автор: froex 17.4.2009, 10:38 | ||||
для hello.php:
для hello_bom.php:
во втором случае перед "привет мир" есть пробел. |
| Автор: azesmcar 17.4.2009, 10:40 | ||
| froex 22-19=3 - это БОМ. Просто браузер его игнорирует и не показывает. Вам надо делать тоже самое. Добавлено через 50 секунд
а пробел это не лишний символ? учитывая что в файлах написано абсолютно тоже самое. Добавлено через 3 минуты и 4 секунды Еще я бы проверил снифером что получает браузер при запросе на эти сайты (php.net например) |
| Автор: froex 17.4.2009, 10:44 |
| Значит, эти символы нужны только для опознания кодировки UTF? Ничего страшного не будет, если я их игнорирую просто? Я думаю, что проблема решена. Спасибо. |
| Автор: azesmcar 17.4.2009, 10:48 | ||
| froex ничего страшного, конкретно для UTF8 они вообще не нужны и ничего не означают кроме как - что файл в кодировке UTF8. Там должна быть константа EF BB BF. Почему конкретно в этом случае пробел, в случае с php.net какие-то символы сказать сложно. Может разница в версиях сервера, как они распознают БОМ. Надо бы снифером посмотреть чтобы быть уверенным. Добавлено через 1 минуту и 28 секунд
пожалуйста - удачи |
| Автор: froex 17.4.2009, 10:50 |
Я со сниферами не работал. Не подскажете для Debian GNU/Linux? Как-нибудь тогда посмотрю, чем отличаются они. |
| Автор: azesmcar 17.4.2009, 10:52 |
| froex Wireshark http://www.wireshark.org/ |
| Автор: froex 17.4.2009, 10:58 |
| Спасибо за все. |
| Автор: phprus 17.4.2009, 17:53 |
| azesmcar, Это не BOM и вообще эти символы к кодировке никакого отношения не имеют. Эти символы часть протокола HTTP 1.1. froex, Согласно этим заголовкам используется режим keep-alive, те через одно соединение можно будет отправить более одного HTTP-запроса. Судя по отсутствию Content-Length сервер на момент начала отдачи файла не знает его длину, по этому он вынужден посылать данные по кусочкам и как-то об этом информировать клиента. Что-бы клиент понял что данные ему шлют по кускам сервер высылает заголовок Transfer-Encoding: chunked, а эти дополнительные символы появляются для того чтобы клиент мог эти куски опознавать и определить конец передачи данных. Подробнее все это описано в описании протокола HTTP 1.1. Будет, так как, если мне память не изменяет, эти символы могу и посреди HTMLя всплыть. |
| Автор: froex 18.4.2009, 21:22 |
| Ммм... и на этом спасибо. Сейчас документацию буду читать. |
| Автор: azesmcar 19.4.2009, 17:57 | ||||
Возможно, это было только предположение (но вправду похоже
Да, но тогда они не проигнорируются..хотя надо протокол полностью изучить перед тем как работать с ним..а то мали ли что еще всплывет.. www.ietf.org поможет |
| Автор: froex 19.4.2009, 18:18 | ||
BOM ведь всегда один и тот же? Тем более его я не видел, когда ты давал проверять, а когда смотрел на всех сайтах - три символа было видно. Почитаю на днях, опять же. |
| Автор: azesmcar 19.4.2009, 18:38 | ||
Да, но Content-Length различался на три байта. Впрочем уверенности у меня как небыло, так и нет |