Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2022, 13:29   #1
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
Вопрос Неполученные HTTP запросы сервером на C++

Здравствуйте! Написал веб-сервер, изначально, при обработке нескольких запросов (index.html, favicon, one js and css file) сервер получал каждый из них. Но как только колличество запросов увеличилось (index.html, favicon, one css and six js, one image) я начал замечать непонятное для меня поведение:

Браузер считает, что он отправил запрос на получение, условно important.js и ждет на него ответ, со стороны сервера же (по логам) видно, что такой запрос не поступал. В настройках apache я видел конфигурацию, связанную с ответом на прерванные запросы (или как то так), помогите разобраться с этим

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

Код:
# Sun May 29 13:23:42 2022 Connection Controller : "Accept": Socket accept successful.
# Sun May 29 13:23:42 2022 Connection Controller : "HTTPProtocolAction": HTTP module: Request url: /.
# Sun May 29 13:23:42 2022 Connection Controller : "HTTPProtocolAction": HTTP module: Request url: /style.css.
# Sun May 29 13:23:42 2022 Connection Controller : "Accept": Socket accept successful.
# Sun May 29 13:23:42 2022 Connection Controller : "HTTPProtocolAction": HTTP module: Request url: /general.js.
формошлеп.рф
witech.su

Последний раз редактировалось maks1331; 29.05.2022 в 13:36.
maks1331 вне форума Ответить с цитированием
Старый 29.05.2022, 15:57   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Посмотрите здесь
macomics вне форума Ответить с цитированием
Старый 29.05.2022, 20:14   #3
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Посмотрите здесь
Прочитал, что есть настройка, которая позволяет отправлять несколько запросов по одному соединению. Но не понято изначально зачем было делать его не одним)

Про "недошедшие" запросы есть идеи?
формошлеп.рф
witech.su

Последний раз редактировалось maks1331; 29.05.2022 в 21:56.
maks1331 вне форума Ответить с цитированием
Старый 29.05.2022, 20:20   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Да это ссылка на описание настройки сервера Apache, но в ее описании дают понять особенности работы протоколов и отправляют в нужную сторону для разбирательств. А именно, в протоколе HTTP/1.0 необходимо дополнительно у клиента спрашивать о поддержании соединения. А в протоколе HTTP/1.1 все соединения по умолчанию keep-alive, если не указано обратное.
Цитата:
For HTTP/1.0 clients, Keep-Alive connections will only be used if they are specifically requested by a client. In addition, a Keep-Alive connection with an HTTP/1.0 client can only be used when the length of the content is known in advance. This implies that dynamic content such as CGI output, SSI pages, and server-generated directory listings will generally not use Keep-Alive connections to HTTP/1.0 clients. For HTTP/1.1 clients, persistent connections are the default unless otherwise specified. If the client requests it, chunked encoding will be used in order to send content of unknown length over persistent connections.
macomics вне форума Ответить с цитированием
Старый 29.05.2022, 21:13   #5
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Попробую покопаться, спасибо
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 30.05.2022, 21:18   #6
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Вчера искал информацию по 1.1 HTTP протоколу, но не нашел ничего особенного.
Код:
Connection: keep-alive
или
Код:
Connection: close
В заголовке ответа разницы не даёт, разве что с первым вариантом работает чуть стабильнее.

После первого подключения при нескольких перезагрузках страницы устанавливается стабильное соединение и все загружается нормально, что еще больше смущает
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Старый 30.05.2022, 21:31   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А зачем долго искать
Или вот это

Последний раз редактировалось macomics; 30.05.2022 в 21:37.
macomics вне форума Ответить с цитированием
Старый 30.05.2022, 21:46   #8
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Нашел вот такое:

После получения метода, подчиненного этим требованиям, от HTTP/1.1 (или более позднего) клиента, HTTP/1.1 (или более поздний) сервер ДОЛЖЕН либо ответить кодом состояния 100 (Продолжать, Continue) и продолжать чтение входного потока, либо ответить ошибочным кодом состояния. Если сервер ответил ошибочным кодом состояния, то он МОЖЕТ либо закрыть транспортное соединение (TCP), либо продолжать читать и отбрасывать оставшуюся часть запроса. Он НЕ ДОЛЖЕН выполнять запрошенный метод, если возвратил код состояния ошибки.
----
Отправка 100 Continue не исправило ситуацию
формошлеп.рф
witech.su

Последний раз редактировалось maks1331; 30.05.2022 в 22:06.
maks1331 вне форума Ответить с цитированием
Старый 30.05.2022, 22:26   #9
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А вы точно правильную информацию отправляете. Проверьте

Цитата:
100 Continue
The client may continue with its request. This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server. The client should continue by sending the remainder of the request or, if the request has already been completed, ignore this response. The server must send a final response after the request has been completed.

Последний раз редактировалось macomics; 30.05.2022 в 22:37.
macomics вне форума Ответить с цитированием
Старый 31.05.2022, 21:51   #10
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

В общем мне удалось выяснить в чем проблема, я на каждый коннект открываю поток с функцией обработки данных с сокета, но некоторые потоки никогда не выполняют эту функцию, причем после таких потоков могут быть нормальные

Код:
pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
pthread_attr_setscope(&attr, SCHED_FIFO);
pthread_attr_setscope(&attr, PTHREAD_CREATE_DETACHED);
pthread_attr_setscope(&attr, PTHREAD_EXPLICIT_SCHED);
Запускаю поток со следующими атрибутами.
формошлеп.рф
witech.su
maks1331 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Http-запросы java 803 Помощь студентам 4 20.11.2013 21:00
Обработка http запросов сервером MkG PHP 2 13.03.2012 19:36
Winsock http-запросы SmartCream Работа с сетью в Delphi 5 14.03.2011 15:34
http запросы на j2me J.D. Общие вопросы по Java, Java SE, Kotlin 1 28.01.2010 12:06
HTTP запросы KAKTYC PHP 23 01.10.2008 10:14