[ 
https://issues.apache.org/jira/browse/HTTPCORE-766?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17847283#comment-17847283
 ] 

Erik Wramner commented on HTTPCORE-766:
---------------------------------------

[~olegk] just one thing there. RequestHandlerRegistry implements 
HttpRequestMapper, which defines resolve, but ServerBootstrap is currently 
responsible for calling register on the registry. That is done after the 
registry is created using the registrations collected by the ServerBootstrap. 
It is great if we can set a custom HttpRequestMapper, but it also needs to 
support the register method so that ServerBootstrap can offload the 
registrations.

Perhaps a new interface that extends HttpRequestMapper and adds the register 
method?

The workaround where authority is removed by an interceptor probably works, but 
it feels a bit dangerous. Some other code may need the authority and go south 
if it is null.

> 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

Reply via email to