Skip to content

Commit 668a64e

Browse files
committed
fix: 修复issue-3
1 parent d359fff commit 668a64e

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/main/java/top/meethigher/proxy/http/ReverseHttpProxy.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,6 @@ public class ReverseHttpProxy {
197197
);
198198

199199

200-
201200
public ReverseHttpProxy(HttpServer httpServer, HttpClient httpClient, Router router, String name) {
202201
this.httpServer = httpServer;
203202
this.httpClient = httpClient;
@@ -602,9 +601,6 @@ protected Handler<RoutingContext> routingContextHandler(HttpClient httpClient) {
602601
setContextData(ctx, key, route.getMetadata(key));
603602
}
604603

605-
// log.warn("start--{}--{}--{}", getContextData(route, INTERNAL_CLIENT_LOCAL_ADDR), getContextData(route, INTERNAL_SERVER_REMOTE_ADDR), getContextData(route, INTERNAL_PROXY_URL));
606-
607-
608604
// 记录请求开始时间
609605
setContextData(ctx, INTERNAL_SEND_TIMESTAMP, System.currentTimeMillis());
610606
// 记录连接状态
@@ -644,6 +640,26 @@ protected Handler<RoutingContext> routingContextHandler(HttpClient httpClient) {
644640
log.debug("proxyServer remote connection {} closed", getContextData(ctx, INTERNAL_SERVER_REMOTE_ADDR).toString());
645641
});
646642

643+
// 如果跨域由代理服务接管,那么针对跨域使用的OPTIONS预检请求,就由代理服务接管,而不经过实际的后端服务
644+
if (HttpMethod.OPTIONS.name().equalsIgnoreCase(serverReq.method().name()) &&
645+
getContextData(ctx, P_CORS_CONTROL) != null && Boolean.parseBoolean(getContextData(ctx, P_CORS_CONTROL).toString()) &&
646+
getContextData(ctx, P_ALLOW_CORS) != null && Boolean.parseBoolean(getContextData(ctx, P_ALLOW_CORS).toString())
647+
) {
648+
String header = serverReq.getHeader("origin");
649+
if (header == null || header.isEmpty()) {
650+
serverResp.putHeader("Access-Control-Allow-Origin", "*");
651+
} else {
652+
serverResp.putHeader("Access-Control-Allow-Origin", header);
653+
}
654+
serverResp.putHeader("Access-Control-Allow-Methods", "*");
655+
serverResp.putHeader("Access-Control-Allow-Headers", "*");
656+
serverResp.putHeader("Access-Control-Allow-Credentials", "true");
657+
serverResp.putHeader("Access-Control-Expose-Headers", "*");
658+
setStatusCode(ctx, serverResp, 200).end();
659+
doLog(ctx);
660+
return;
661+
}
662+
647663
// 请求
648664
if ((boolean) getContextData(ctx, INTERNAL_CLIENT_CONNECTION_OPEN)) {
649665
httpClient.request(requestOptions).onComplete(connectHandler(ctx, serverReq, serverResp, proxyUrl));

0 commit comments

Comments
 (0)