Как повторно использовать одно и то же HTTPS-соединение для множества запросов в течение сеанса?

Чтобы отправить файлы на сервер, я делаю запрос HTTPS в Windows, который выглядит так:

hSession = WinHttpOpen(  L"Agent/1.0",..
hConnect = WinHttpConnect(hSession,..
hRequest = WinHttpOpenRequest( hConnect, L"PUT",..
WinHttpSetCredentials(hRequest,..
WinHttpAddRequestHeaders( hRequest,..
WinHttpSendRequest( hRequest,..
WinHttpWriteData(hRequest,..
WinHttpReceiveResponse(hRequest,..
WinHttpQueryHeaders(hRequest,..
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);

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

Итак, у меня есть два вопроса:

  • Нужно ли открывать и закрывать новое HTTPS-соединение для каждого запроса?
  • Есть ли способ установить сеанс и повторно использовать одно и то же соединение HTTPS для многих запросов на размещение в этом сеансе?

2

Решение

Ответы следующие:

  1. Нет. Одно соединение может выполнять кучу запросов.
  2. Это проект кодекса:

    hSession = WinHttpOpen( L"Agent/1.0",..
    hConnect = WinHttpConnect(hSession,..
    for (all_files_to_upload) {
    hRequest = WinHttpOpenRequest( hConnect, L"PUT",..
    WinHttpSetCredentials(hRequest,..
    WinHttpAddRequestHeaders( hRequest,..
    WinHttpSendRequest( hRequest,..
    WinHttpWriteData(hRequest,..
    WinHttpReceiveResponse(hRequest,..
    WinHttpQueryHeaders(hRequest,..
    WinHttpCloseHandle(hRequest);
    }
    
    if (hConnect) WinHttpCloseHandle(hConnect);
    if (hSession) WinHttpCloseHandle(hSession);
    
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]