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

Andriy Redko commented on CXF-8190:
-----------------------------------

Hey [~coheigea], we finally have a Jenkins TCK build job: [1] (I will drop a 
message tonight on the list)!  Here is the latest report [2]against 
3.4.0-SNAPSHOT. To compare, we could do the change and merge into the master 
(and rerun the TCK tests ones the 3.4.0-SNAPSHOT are available). In general, we 
could run it against the PR builds but it needs a bit more work. 

[1] [https://builds.apache.org/view/C/view/Apache%20CXF/job/CXF-JAXRS-TCK/] 

[2] 
[https://builds.apache.org/view/C/view/Apache%20CXF/job/CXF-JAXRS-TCK/65/artifact/JTreport/html/report.html]

 

Best Regards,

    Andriy Redko

> UriBuilder / HttpUtils replaces 127.0.0.1 by localhost
> ------------------------------------------------------
>
>                 Key: CXF-8190
>                 URL: https://issues.apache.org/jira/browse/CXF-8190
>             Project: CXF
>          Issue Type: Bug
>            Reporter: Markus Rathgeb
>            Priority: Major
>
> If you access a locally running REST endpoint in the brower using the IP 
> address 127.0.0.1 and the REST endpoint implementation is using the UriInfo 
> to build a new URL by the URI builder (e.g. a created resource), the reply 
> will not use the host as accessed (127.0.0.1) but replaces the host by 
> "localhost".
> If the web application then tries to access the location, the browsers will 
> block that request because of a cross origin access.
>  
> Assume a very simple REST endpoint:
> {code:java}
> @Component(service = { Resource.class }, scope = ServiceScope.PROTOTYPE)
>  @JaxrsResource
>  public class Resource {
>      @POST
>      @Path("create")
>      @Produces(MediaType.APPLICATION_JSON)
>      public Object createTest(@Context final UriInfo uriInfo) {
>          final URI uri =
>  uriInfo.getBaseUriBuilder().path("foo").path("bar").build();
>          return Response.created(uri).build();
>      }
>  }{code}
> If I call the post method of that endpoint using the URL 
> "[http://localhost:8080/create]"; I get a created location that looks like 
> "[http://localhost:8080/foo/bar]";.
> All fine.
> {noformat}
> $ curl -v -X POST http://localhost:8080/create
>  *   Trying ::1:8080...
>  * TCP_NODELAY set
>  * Connected to localhost (::1) port 8080 (#0)
>  > POST /create HTTP/1.1
>  > Host: localhost:8080
>  > User-Agent: curl/7.67.0
>  > Accept: */*
>  >
>  * Mark bundle as not supporting multiuse
>  < HTTP/1.1 201 Created
>  < Date: Tue, 10 Dec 2019 17:41:47 GMT
>  < Location: http://localhost:8080/foo/bar
>  < Content-Length: 0
>  <
>  * Connection #0 to host localhost left intact{noformat}
> But, I would expect if I access the endpoint using the IP instead of the 
> hostname "[http://127.0.0.1:8080/create]"; the created response's location 
> should look like "[http://127.0.0.1:8080/foo/bar]";.
> But that is not the case...
> The response provides "[http://localhost:8080/foo/bar]";
> {noformat}
> curl -v -X POST http://127.0.0.1:8080/create
>  *   Trying 127.0.0.1:8080...
>  * TCP_NODELAY set
>  * Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
>  > POST /create HTTP/1.1
>  > Host: 127.0.0.1:8080
>  > User-Agent: curl/7.67.0
>  > Accept: */*
>  >
>  * Mark bundle as not supporting multiuse
>  < HTTP/1.1 201 Created
>  < Date: Tue, 10 Dec 2019 17:44:00 GMT
>  < Location: http://localhost:8080/foo/bar
>  < Content-Length: 0
>  <
>  * Connection #0 to host 127.0.0.1 left intact{noformat}
> If the website that is accessed using 127.0.0.1 provides a location using 
> localhost and that one is used by the browser, the browser fails because of 
> CORS.
>  
> I already looked at the sources who is causing the change from 127.0.0.1 to 
> localhost and found it:
> After the line 
> [https://github.com/apache/cxf/blob/cxf-3.2.5/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriInfoImpl.java#L83]
>  has been executed the variable u looks like [http://127.0.0.1:8080/]
> After that "toAbsoluteUri" of HttpUtils is called.
>  That's the part of the code that replaces 127.0.0.1 by localhost 
> [https://github.com/apache/cxf/blob/cxf-3.2.5/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java#L388-L391]
> The commit that added that part of code is 
> [https://github.com/apache/cxf/commit/ebc910780b2b9b971a7c1c2e4019bdf9ec35e460#diff-1e4a62a6414e4007d2f5be9f0313c8c0R311-R314]
> The git commit referenced the wrong Jira (2007) - it should have been 
> https://issues.apache.org/jira/browse/CXF-5007
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to