Skip to content

Commit 32d34ca

Browse files
committed
Don't force explicit port when computing Origin header, close AsyncHttpClient#1449
Motivation: We force explicit port when computing Origin header. We should do so when port is the default scheme’s one. Modification: Only set port when it’s different from the scheme’s default one Result: Valid Origin header
1 parent 88d2d5f commit 32d34ca

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

client/src/main/java/org/asynchttpclient/netty/request/NettyRequestFactory.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,7 @@ public NettyRequest newNettyRequest(Request request, boolean forceConnect, Proxy
198198
.set(SEC_WEBSOCKET_VERSION, "13");
199199

200200
if (!headers.contains(ORIGIN)) {
201-
String scheme = uri.isSecured() ? "https://" : "http://";
202-
String origin = scheme+ uri.getHost() + ":" + uri.getExplicitPort();
203-
headers.set(ORIGIN, origin);
201+
headers.set(ORIGIN, computeOriginHeader(uri));
204202
}
205203

206204
} else if (!headers.contains(CONNECTION)) {

client/src/main/java/org/asynchttpclient/util/HttpUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,13 @@ public static String hostHeader(Request request, Uri uri) {
129129
return port == -1 || port == uri.getSchemeDefaultPort() ? host : host + ":" + port;
130130
}
131131
}
132+
133+
public static String computeOriginHeader(Uri uri) {
134+
StringBuilder sb = StringBuilderPool.DEFAULT.stringBuilder();
135+
sb.append(uri.isSecured() ? "https://" : "http://").append(uri.getHost());
136+
if (uri.getExplicitPort() != uri.getSchemeDefaultPort()) {
137+
sb.append(':').append(uri.getPort());
138+
}
139+
return sb.toString();
140+
}
132141
}

client/src/test/java/org/asynchttpclient/util/HttpUtilsTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,4 +199,34 @@ private static String toUsAsciiString(ByteBuffer buf) throws CharacterCodingExce
199199
bb.release();
200200
}
201201
}
202+
203+
@Test
204+
public void computeOriginForPlainUriWithImplicitPort() {
205+
assertEquals(HttpUtils.computeOriginHeader(Uri.create("ws://foo.com/bar")), "http://foo.com");
206+
}
207+
208+
@Test
209+
public void computeOriginForPlainUriWithDefaultPort() {
210+
assertEquals(HttpUtils.computeOriginHeader(Uri.create("ws://foo.com:80/bar")), "http://foo.com");
211+
}
212+
213+
@Test
214+
public void computeOriginForPlainUriWithNonDefaultPort() {
215+
assertEquals(HttpUtils.computeOriginHeader(Uri.create("ws://foo.com:81/bar")), "http://foo.com:81");
216+
}
217+
218+
@Test
219+
public void computeOriginForSecuredUriWithImplicitPort() {
220+
assertEquals(HttpUtils.computeOriginHeader(Uri.create("wss://foo.com/bar")), "https://foo.com");
221+
}
222+
223+
@Test
224+
public void computeOriginForSecuredUriWithDefaultPort() {
225+
assertEquals(HttpUtils.computeOriginHeader(Uri.create("wss://foo.com:443/bar")), "https://foo.com");
226+
}
227+
228+
@Test
229+
public void computeOriginForSecuredUriWithNonDefaultPort() {
230+
assertEquals(HttpUtils.computeOriginHeader(Uri.create("wss://foo.com:444/bar")), "https://foo.com:444");
231+
}
202232
}

0 commit comments

Comments
 (0)