Я использую com.sun.net.httpserver.HttpsServer
в моем текущем проекте, который касается аутентификации клиента и т. Д. В настоящее время он только распечатывает адрес / порт клиента, чтобы я мог проверить, используется ли одно TCP-соединение для нескольких запросов (keep-alive
) или если новое соединение устанавливается для каждого запроса (и, таким образом, каждый раз выполняется новое SSL-рукопожатие).Когда я использую FireFox для выполнения нескольких запросов к серверу, я вижу, что keep-alive работает.Таким образом, серверная часть отлично работает с GET и POST-запросами.
Если я использую HttpURLConnection
, чтобы сделать запрос к Серверу (в этом случае с помощью нет 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
.Но ничего не изменилось.Проблема все еще существует.