[ https://issues.apache.org/jira/browse/HTTPCORE-766?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17850408#comment-17850408 ]
Oleg Kalnichevski commented on HTTPCORE-766: -------------------------------------------- [~erik.wramner] I put together a new class {{RequestRouter}} [1] that I intend to use as a replacement forĀ {{RequestHandlerRegistry}}. The new class provides new functionality that may be of interest to you: 1. it can use a custom function to normalize or resolve service authorities. 2. when not authoritative to handler a request it can delegate the request routing to a downstream resolver. The basic use of the new class can be seen here [2] You are welcome to review the change-set in my branch and propose API improvements, better class / method names or ideas for additional functionality. Oleg [1] https://github.com/ok2c/httpcomponents-core/blob/HTTPCORE-766/httpcore5/src/main/java/org/apache/hc/core5/http/impl/routing/RequestRouter.java [2] https://github.com/ok2c/httpcomponents-core/blob/HTTPCORE-766/httpcore5/src/test/java/org/apache/hc/core5/http/impl/routing/TestRequestRouter.java > Serve same content regardless of http authority (RequestHandlerRegistry) > ------------------------------------------------------------------------ > > Key: HTTPCORE-766 > URL: https://issues.apache.org/jira/browse/HTTPCORE-766 > Project: HttpComponents HttpCore > Issue Type: Improvement > Components: HttpCore > Affects Versions: 5.2.4, 5.3-alpha1, 5.3-alpha2 > Reporter: Erik Wramner > Priority: Minor > Labels: easyfix > Original Estimate: 4h > Remaining Estimate: 4h > > I need to serve the same content on all interfaces and I don't know the IP > addresses and host names in advance. Think of it as a classic HTTP server > without virtual host support: all requests get to the same set of handlers. > Unfortunately, ServerBootstrap installs RequestHandlerRegistry, which uses > one primary LookupRegistry for a canonical host name and localhost and a map > with other registries keyed by name. If a client connects with an unknown > name, no handler is found and the server responds with 421. > There are several possible solutions here: > # Modify RequestHandlerRegistry to use the primary registry if no other > registry is found. As I recall, that was what Apache did by default. Then it > is still possible to register new rules for virtual hosts, but the primary is > fallback when no name matches. This could also be configurable on/off. > # Add new PrimaryOnlyRequestHandlerRegistry that has no support for virtual > hosts and always uses the primary. > # Don't fix this in the code, but make it easier for me to fix by making > getPatternMatcher protected instead of private. > In the two last cases we run into another problem: ServerBootstrap has > private members without getters, final methods that cannot be overridden and > creates RequestHandlerRegistry with new in a long create method. This is the > problem that was solved in HTTPCORE-570 for another class. It makes it hard > to extend the class, it must basically be rewritten. > I would propose opening up ServerBootstrap with getters or by making the > fields protected. I would also like to extract the RequestHandlerRegistry > creation to a protected method that can be overridden. Alternatively, we can > add a setter and allow the calling code to prepare an instance outside of the > builder. > I would be happy to make a pull request for these changes on Github. If so, > what direction would you like to take? > I can code around this by copying both classes with my changes, but that > feels really dirty. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org