You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ve...@apache.org on 2011/09/22 21:26:48 UTC
svn commit: r1174334 -
/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
Author: veithen
Date: Thu Sep 22 19:26:48 2011
New Revision: 1174334
URL: http://svn.apache.org/viewvc?rev=1174334&view=rev
Log:
Performance improvement: avoid usage of InetAddress#getHostName(), especially in contexts where it is more consistent to use the HTTP Host header.
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java?rev=1174334&r1=1174333&r2=1174334&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java Thu Sep 22 19:26:48 2011
@@ -250,11 +250,25 @@ public class ServerWorker implements Run
msgContext.setProperty(NhttpConstants.REST_URL_POSTFIX, uri);
String servicePrefix = oriUri.substring(0, oriUri.indexOf(uri));
if (servicePrefix.indexOf("://") == -1) {
- HttpInetConnection inetConn = (HttpInetConnection) conn;
- InetAddress localAddr = inetConn.getLocalAddress();
- if (localAddr != null) {
- servicePrefix = (isHttps ? "https://" : "http://") +
- localAddr.getHostName() + ":" + inetConn.getLocalPort() + servicePrefix;
+ // If the URL in the request line is not absolute, then we first try to get the Host
+ // header to build the absolute URL. We only use the local network address/port of
+ // the HTTP connection if no Host header is present. This is not only consistent, but
+ // also avoids the overhead of the InetAddress#getHostName() method.
+ String host;
+ Header hostHeader = request.getFirstHeader(HTTP.TARGET_HOST);
+ if (hostHeader != null) {
+ host = hostHeader.getValue();
+ } else {
+ HttpInetConnection inetConn = (HttpInetConnection) conn;
+ InetAddress localAddr = inetConn.getLocalAddress();
+ if (localAddr != null) {
+ host = localAddr.getHostName() + ":" + inetConn.getLocalPort();
+ } else {
+ host = null;
+ }
+ }
+ if (host != null) {
+ servicePrefix = (isHttps ? "https://" : "http://") + host + servicePrefix;
}
}
msgContext.setProperty(NhttpConstants.SERVICE_PREFIX, servicePrefix);