You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Jose María Zaragoza <de...@gmail.com> on 2014/02/07 14:52:49 UTC

Build Location header in HTTP 201 response

Hi:

I'm using Apache CXF 2.7.3 and JAX-RS API to build a REST webservice

I've seen that the best response to return from a REST webservice when
an entity is created is a 201 HTTP code and set Location HTTP header
with the resource URI

My webservice is installed behind Apache HTTPD server as reverse proxy
Sometimes my webservice is invoked from internet as

http://www.mycompany.com/ws/myapp/process

and sometimes is invoked from a private network  as

http://internalname/myapp/process

How I can set Location header correctly ? I mean,
if requests come from intranet , to return Location:
http://internalname/myapp/get?id=xxxx
and request from private network , to return
Location:http://www.mycompany.com/ws/myapp/get?id=xxxx

How I can do this ?

Other choice is to return a 200 HTTP code with some payload, but I
don't know if it's forbidden according REST rules

Thanks and regards

Re: Build Location header in HTTP 201 response

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi
On 07/02/14 13:52, Jose María Zaragoza wrote:
> Hi:
>
> I'm using Apache CXF 2.7.3 and JAX-RS API to build a REST webservice
>
> I've seen that the best response to return from a REST webservice when
> an entity is created is a 201 HTTP code and set Location HTTP header
> with the resource URI
>
> My webservice is installed behind Apache HTTPD server as reverse proxy
> Sometimes my webservice is invoked from internet as
>
> http://www.mycompany.com/ws/myapp/process
>
> and sometimes is invoked from a private network  as
>
> http://internalname/myapp/process
>
> How I can set Location header correctly ? I mean,
> if requests come from intranet , to return Location:
> http://internalname/myapp/get?id=xxxx
> and request from private network , to return
> Location:http://www.mycompany.com/ws/myapp/get?id=xxxx
>
> How I can do this ?
>
Use @Context UtiInfo and get UriBuilder from it representing the current 
URI.
Note, up until CXF 3.0.0, CXFServlet should have a 
disable-address-updates init parameter set to true in such cases


> Other choice is to return a 200 HTTP code with some payload, but I
> don't know if it's forbidden according REST rules
>
My view is that if it can help the application clients then I'm not 
worried about the rules, or rather about the purity of the way the 
application has been designed

I think AtomPub may even be recommending getting the created 
representation back, in addition to Location, in some cases.

If you have a browser then Location may be enough, if you have a code 
client, then it's not quite opaque, the code needs to extract Location 
and follow it. It really depends on the requirements

Cheers, Sergey

> Thanks and regards
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com