Я использую com.sun.net.httpserver.HttpsServer
в моем текущем проекте, который занимается аутентификацией клиента и т.д. В настоящее время он только распечатывает адрес/порт клиентов, так что я могу проверить, используется ли одно TCP-соединение для нескольких запросов (keep-alive
) или если для каждого запроса установлено новое соединение (и, таким образом, каждое новое SSL-рукопожатие делается каждый раз). Когда я использую FireFox, чтобы сделать несколько запросов к серверу, я вижу, что keep-alive работает. Таким образом, часть сервера отлично работает с GET и POST-запросами.
Если я использую HttpURLConnection
для запроса на сервер (в этом случае используется no SSL), то работает также: keep-alive
: только одно соединение установлено для нескольких последовательно запущенных запросов.
Но если я использую HttpsURLConnection
(используя точно такой же код, но используя SSL), то keep-alive
больше не работает. Поэтому для каждого запроса установлено новое соединение, хотя я использую те же SSLContext
(и SSLSocketFactory
):
// URL myUrl = ...
// SSLContext mySsl = ...
HttpsURLConnection conn = (HttpsURLConnection) myUrl.openConnection();
conn.setUseCaches(false);
conn.setSSLSocketFactory(mySsl.getSocketFactory());
conn.setRequestMethod("POST");
// send Data
// receive Data
Как заставить HttpsURLConnection
использовать keep-alive
, потому что многие запросы приведут к большому количеству SSL-рукопожатий, что является реальной проблемой производительности?
Обновление (2012-04-02):
Вместо вызова mySsl.getSocketFactory()
каждый раз я пытался кэшировать SSLSocketFactory
. Но ничего не изменилось. Проблема все еще существует.