You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Christian Myrvold <ch...@mitec.no> on 2004/03/04 10:35:53 UTC
[httpClient] Performance and reverse DNS lookup
Greetings,
I does not seem like my first mail went through so I am gonna try again.
In short I have a performance problem with the HttpClient when using
https agains private networks over dialup/PPP connections. DNS records
are not available for the webservers I am connecting to. When I go
connect through my application (which is a sort of a httpsproxy),
performance is significally slower then when i connect directly to the
webserver. Allthough when I add correct DNS records (both forward and
reverse) to my DNS-server, I get a good performance gain. So, I am
asuming it is the reverse lookup of the DNS that is consuming time.
Actually I can se from debugging that it is the part where a new
socket/connection is beeing created that is timeconsuming. So I am
wondering if there is a way to turn off the reverse lookup in the
HttpClient or SSL library? I am using the SSLSocketFactory I found on
these mailinglist. Please see below.
As additional information I can add that I use the whole URL to connect.
When I create a method i use for an example an URL like this in the
constructor: https://192.168.20.3. Is this ok? Or should I use another
way to add the IP-address to avoid reverse lookup?
Also I would like to know if there is any good tips or hints for
performance in general for the HttpClient?
Help is greatly appreciated!
Best Regards,
Christian Myrvold
************
/*
* ProxySSLSocketFactory.java
*
* Created on 3. mars 2004, 14:36
*/
package no.mitec.sacs.application.proxy;
/**
*
* @author cm
*/
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
public class ProxySSLSocketFactory implements SecureProtocolSocketFactory
{
private static class TM implements X509TrustManager
{
public X509Certificate[] getAcceptedIssuers()
{
return new X509Certificate[0];
}
public void checkClientTrusted(X509Certificate[] arg0, String
arg1) throws CertificateException
{
}
public void checkServerTrusted(X509Certificate[] arg0, String
arg1) throws CertificateException
{
}
}
private static SSLSocketFactory getSocketFactory()
{
try
{
SSLContext context = SSLContext.getInstance("SSL");
context.init(null, new TrustManager[] {new TM()}, null);
return context.getSocketFactory();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
public Socket createSocket(String host, int port, InetAddress
clientHost,
int clientPort) throws IOException, UnknownHostException
{
return getSocketFactory().createSocket(host, port, clientHost,
clientPort);
}
public Socket createSocket(String host, int port)
throws IOException, UnknownHostException
{
return getSocketFactory().createSocket(host, port);
}
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException
{
return getSocketFactory().createSocket(socket, host, port,
autoClose);
}
}
************
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org
Re: [httpClient] Performance and reverse DNS lookup
Posted by Michael Becke <be...@u.washington.edu>.
Hello Christian,
I don't know much about the internal workings of JSSE and it's DNS
behavior, but here's a stab in the dark... It seems that a new
instance of SSLSocketFactory is being created in every call to
getSocketFactory(). My guess is that any caching (DNS and otherwise)
is done by the socket factories. Creating a new instance every time
may cause some problems here.
Mike
On Mar 4, 2004, at 4:35 AM, Christian Myrvold wrote:
> Greetings,
>
> I does not seem like my first mail went through so I am gonna try
> again. In short I have a performance problem with the HttpClient when
> using https agains private networks over dialup/PPP connections. DNS
> records are not available for the webservers I am connecting to. When
> I go connect through my application (which is a sort of a httpsproxy),
> performance is significally slower then when i connect directly to the
> webserver. Allthough when I add correct DNS records (both forward and
> reverse) to my DNS-server, I get a good performance gain. So, I am
> asuming it is the reverse lookup of the DNS that is consuming time.
> Actually I can se from debugging that it is the part where a new
> socket/connection is beeing created that is timeconsuming. So I am
> wondering if there is a way to turn off the reverse lookup in the
> HttpClient or SSL library? I am using the SSLSocketFactory I found on
> these mailinglist. Please see below.
>
> As additional information I can add that I use the whole URL to
> connect. When I create a method i use for an example an URL like this
> in the constructor: https://192.168.20.3. Is this ok? Or should I use
> another way to add the IP-address to avoid reverse lookup?
>
> Also I would like to know if there is any good tips or hints for
> performance in general for the HttpClient?
>
> Help is greatly appreciated!
>
> Best Regards,
> Christian Myrvold
>
> ************
> /*
> * ProxySSLSocketFactory.java
> *
> * Created on 3. mars 2004, 14:36
> */
>
> package no.mitec.sacs.application.proxy;
>
> /**
> *
> * @author cm
> */
> import java.io.IOException;
> import java.net.InetAddress;
> import java.net.Socket;
> import java.net.UnknownHostException;
> import java.security.cert.CertificateException;
> import java.security.cert.X509Certificate;
>
> import javax.net.ssl.SSLContext;
> import javax.net.ssl.SSLSocketFactory;
> import javax.net.ssl.TrustManager;
> import javax.net.ssl.X509TrustManager;
>
> import
> org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory;
>
> public class ProxySSLSocketFactory implements
> SecureProtocolSocketFactory
> {
> private static class TM implements X509TrustManager
> {
> public X509Certificate[] getAcceptedIssuers()
> {
> return new X509Certificate[0];
> }
>
> public void checkClientTrusted(X509Certificate[] arg0, String
> arg1) throws CertificateException
> {
> }
>
> public void checkServerTrusted(X509Certificate[] arg0, String
> arg1) throws CertificateException
> {
> }
> }
>
> private static SSLSocketFactory getSocketFactory()
> {
> try
> {
> SSLContext context = SSLContext.getInstance("SSL");
> context.init(null, new TrustManager[] {new TM()}, null);
> return context.getSocketFactory();
> }
> catch (Exception e)
> {
> throw new RuntimeException(e);
> }
> }
>
> public Socket createSocket(String host, int port, InetAddress
> clientHost,
> int clientPort) throws IOException, UnknownHostException
> {
> return getSocketFactory().createSocket(host, port, clientHost,
> clientPort);
> }
>
> public Socket createSocket(String host, int port)
> throws IOException, UnknownHostException
> {
> return getSocketFactory().createSocket(host, port);
> }
>
> public Socket createSocket(Socket socket, String host, int port,
> boolean autoClose) throws IOException, UnknownHostException
> {
> return getSocketFactory().createSocket(socket, host, port,
> autoClose);
> }
> }
> ************
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org