You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stratos.apache.org by Melan Nimesh <me...@apache.org> on 2014/06/17 22:01:20 UTC

LB does not supports to rewrite location header with relative URLs ?

Hi Devs,

I noticed the $subject while subscribing to a PHP cartridge with a joomla
repository. LB fails to rewrite location header with relative URLs with
following error[1] and redirection not happens correctly. I think it's a
valid requirement to support to location header with relative URLs, since
it is valid according to the current revision of HTTP/1.1 and most browsers
support it (even though rfc2616[2] says location header's value is supposed
to be an absolute URI ), WDYT?


Thanks,
Melan

[1]

TID: [0] [LB] [2014-06-18 00:35:15,997]  INFO
{org.apache.synapse.core.axis2.TimeoutHandler} -  This engine will expire
all callbacks after : 86400 seconds, irrespective of the timeout action,
after the specified or optional timeout
TID: [0] [LB] [2014-06-18 00:35:23,474] ERROR
{org.apache.stratos.load.balancer.mediators.LocationReWriter} -  Could
re-write location header
java.net.MalformedURLException: no protocol: installation/index.php
    at java.net.URL.<init>(URL.java:585)
    at java.net.URL.<init>(URL.java:482)
    at java.net.URL.<init>(URL.java:431)
    at
org.apache.stratos.load.balancer.mediators.LocationReWriter.mediate(LocationReWriter.java:49)
    at
org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
    at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at
org.apache.synapse.mediators.filters.OutMediator.mediate(OutMediator.java:61)
    at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:228)
    at
org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:486)
    at
org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at
org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225)
    at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

[2] http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30


-- 
Melan Nimesh Jayasinghage

Re: LB does not supports to rewrite location header with relative URLs ?

Posted by Imesh Gunaratne <im...@apache.org>.
Hi Melan,

It's actually the Location header not the Host header.
https://github.com/apache/stratos/blob/master/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/mediators/LocationReWriter.java

Thanks


On Wed, Jun 18, 2014 at 2:37 PM, Imesh Gunaratne <im...@apache.org> wrote:

> Hi Melan,
>
> According to the current logic in LocationReWriter, even if the incoming
> Host header URL is relative the logic should not break. It will log the
> error and return without any problem. As a result the client will get the
> exact Host header returned by the member.
>
> However we could improve this logic not to trace an error if the incoming
> Host header URL is relative.
>
> Thanks
>
>
> On Wed, Jun 18, 2014 at 12:13 PM, Melan Nimesh <me...@apache.org> wrote:
>
>>
>>
>>
>> On Wed, Jun 18, 2014 at 8:16 AM, Isuru Haththotuwa <is...@apache.org>
>> wrote:
>>
>>> Hi Melan,
>>>
>>> A good find. Agreed that Location header should be properly supported.
>>> Sorry if this is a dumb question, but could you please explain a bit more
>>> what is the issue that occurs in this specific scenario you tested?
>>>
>>
>> it's not a dumb question at all :)
>>
>> let's take running joomla for first time in a PHP cartridge as example
>>
>> Client request to LB
>>
>>
>> *GET / HTTP/1.1Host: joomla.example.org <http://joomla.example.org>*
>>
>> LB request to backend server
>>
>>
>>
>> *GET / HTTP/1.1Host: 10.100.1.96*
>> Backend server response:
>>
>>
>> *HTTP/1.1 302 Found Location: installation/index.php*
>>
>> LB should rewrite as below but it fails :
>>
>>
>> *HTTP/1.1 302 FoundLocation:
>> http://joomla.example.org/installation/index.php
>> <http://joomla.example.org/installation/index.php>*
>>
>> if backed server respond like as below, then it's working
>>
>>
>> *HTTP/1.1 302 FoundLocation: http://**10.100.1.96/
>> <http://10.100.1.96/>installation/index.php*
>>
>>
>> Thanks,
>> Melan
>>
>>
>>>
>>> On Wed, Jun 18, 2014 at 1:31 AM, Melan Nimesh <me...@apache.org> wrote:
>>>
>>>> Hi Devs,
>>>>
>>>> I noticed the $subject while subscribing to a PHP cartridge with a
>>>> joomla repository. LB fails to rewrite location header with relative URLs
>>>> with following error[1] and redirection not happens correctly. I think it's
>>>> a valid requirement to support to location header with relative URLs, since
>>>> it is valid according to the current revision of HTTP/1.1 and most browsers
>>>> support it (even though rfc2616[2] says location header's value is supposed
>>>> to be an absolute URI ), WDYT?
>>>>
>>>>
>>>> Thanks,
>>>> Melan
>>>>
>>>> [1]
>>>>
>>>> TID: [0] [LB] [2014-06-18 00:35:15,997]  INFO
>>>> {org.apache.synapse.core.axis2.TimeoutHandler} -  This engine will expire
>>>> all callbacks after : 86400 seconds, irrespective of the timeout action,
>>>> after the specified or optional timeout
>>>> TID: [0] [LB] [2014-06-18 00:35:23,474] ERROR
>>>> {org.apache.stratos.load.balancer.mediators.LocationReWriter} -  Could
>>>> re-write location header
>>>> java.net.MalformedURLException: no protocol: installation/index.php
>>>>     at java.net.URL.<init>(URL.java:585)
>>>>     at java.net.URL.<init>(URL.java:482)
>>>>     at java.net.URL.<init>(URL.java:431)
>>>>     at
>>>> org.apache.stratos.load.balancer.mediators.LocationReWriter.mediate(LocationReWriter.java:49)
>>>>     at
>>>> org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
>>>>     at
>>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>>>>     at
>>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>>>>     at
>>>> org.apache.synapse.mediators.filters.OutMediator.mediate(OutMediator.java:61)
>>>>     at
>>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>>>>     at
>>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>>>>     at
>>>> org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
>>>>     at
>>>> org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:228)
>>>>     at
>>>> org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:486)
>>>>     at
>>>> org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170)
>>>>     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
>>>>     at
>>>> org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225)
>>>>     at
>>>> org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
>>>>     at
>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>>>     at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>>>     at java.lang.Thread.run(Thread.java:744)
>>>>
>>>> [2] http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
>>>>
>>>>
>>>> --
>>>> Melan Nimesh Jayasinghage
>>>>
>>>
>>>
>>
>>
>> --
>> Melan Nimesh Jayasinghage
>>
>
>
>
> --
> Imesh Gunaratne
>
> Technical Lead, WSO2
> Committer & PPMC Member, Apache Stratos
>



-- 
Imesh Gunaratne

Technical Lead, WSO2
Committer & PPMC Member, Apache Stratos

Re: LB does not supports to rewrite location header with relative URLs ?

Posted by Imesh Gunaratne <im...@apache.org>.
Hi Melan,

According to the current logic in LocationReWriter, even if the incoming
Host header URL is relative the logic should not break. It will log the
error and return without any problem. As a result the client will get the
exact Host header returned by the member.

However we could improve this logic not to trace an error if the incoming
Host header URL is relative.

Thanks


On Wed, Jun 18, 2014 at 12:13 PM, Melan Nimesh <me...@apache.org> wrote:

>
>
>
> On Wed, Jun 18, 2014 at 8:16 AM, Isuru Haththotuwa <is...@apache.org>
> wrote:
>
>> Hi Melan,
>>
>> A good find. Agreed that Location header should be properly supported.
>> Sorry if this is a dumb question, but could you please explain a bit more
>> what is the issue that occurs in this specific scenario you tested?
>>
>
> it's not a dumb question at all :)
>
> let's take running joomla for first time in a PHP cartridge as example
>
> Client request to LB
>
>
> *GET / HTTP/1.1Host: joomla.example.org <http://joomla.example.org>*
>
> LB request to backend server
>
>
>
> *GET / HTTP/1.1Host: 10.100.1.96*
> Backend server response:
>
>
> *HTTP/1.1 302 Found Location: installation/index.php*
>
> LB should rewrite as below but it fails :
>
>
> *HTTP/1.1 302 FoundLocation:
> http://joomla.example.org/installation/index.php
> <http://joomla.example.org/installation/index.php>*
>
> if backed server respond like as below, then it's working
>
>
> *HTTP/1.1 302 FoundLocation: http://**10.100.1.96/
> <http://10.100.1.96/>installation/index.php*
>
>
> Thanks,
> Melan
>
>
>>
>> On Wed, Jun 18, 2014 at 1:31 AM, Melan Nimesh <me...@apache.org> wrote:
>>
>>> Hi Devs,
>>>
>>> I noticed the $subject while subscribing to a PHP cartridge with a
>>> joomla repository. LB fails to rewrite location header with relative URLs
>>> with following error[1] and redirection not happens correctly. I think it's
>>> a valid requirement to support to location header with relative URLs, since
>>> it is valid according to the current revision of HTTP/1.1 and most browsers
>>> support it (even though rfc2616[2] says location header's value is supposed
>>> to be an absolute URI ), WDYT?
>>>
>>>
>>> Thanks,
>>> Melan
>>>
>>> [1]
>>>
>>> TID: [0] [LB] [2014-06-18 00:35:15,997]  INFO
>>> {org.apache.synapse.core.axis2.TimeoutHandler} -  This engine will expire
>>> all callbacks after : 86400 seconds, irrespective of the timeout action,
>>> after the specified or optional timeout
>>> TID: [0] [LB] [2014-06-18 00:35:23,474] ERROR
>>> {org.apache.stratos.load.balancer.mediators.LocationReWriter} -  Could
>>> re-write location header
>>> java.net.MalformedURLException: no protocol: installation/index.php
>>>     at java.net.URL.<init>(URL.java:585)
>>>     at java.net.URL.<init>(URL.java:482)
>>>     at java.net.URL.<init>(URL.java:431)
>>>     at
>>> org.apache.stratos.load.balancer.mediators.LocationReWriter.mediate(LocationReWriter.java:49)
>>>     at
>>> org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
>>>     at
>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>>>     at
>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>>>     at
>>> org.apache.synapse.mediators.filters.OutMediator.mediate(OutMediator.java:61)
>>>     at
>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>>>     at
>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>>>     at
>>> org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
>>>     at
>>> org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:228)
>>>     at
>>> org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:486)
>>>     at
>>> org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170)
>>>     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
>>>     at
>>> org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225)
>>>     at
>>> org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
>>>     at
>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>>     at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>>     at java.lang.Thread.run(Thread.java:744)
>>>
>>> [2] http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
>>>
>>>
>>> --
>>> Melan Nimesh Jayasinghage
>>>
>>
>>
>
>
> --
> Melan Nimesh Jayasinghage
>



-- 
Imesh Gunaratne

Technical Lead, WSO2
Committer & PPMC Member, Apache Stratos

Re: LB does not supports to rewrite location header with relative URLs ?

Posted by Melan Nimesh <me...@apache.org>.
On Wed, Jun 18, 2014 at 8:16 AM, Isuru Haththotuwa <is...@apache.org>
wrote:

> Hi Melan,
>
> A good find. Agreed that Location header should be properly supported.
> Sorry if this is a dumb question, but could you please explain a bit more
> what is the issue that occurs in this specific scenario you tested?
>

it's not a dumb question at all :)

let's take running joomla for first time in a PHP cartridge as example

Client request to LB


*GET / HTTP/1.1Host: joomla.example.org <http://joomla.example.org>*

LB request to backend server



*GET / HTTP/1.1Host: 10.100.1.96*
Backend server response:


*HTTP/1.1 302 FoundLocation: installation/index.php*

LB should rewrite as below but it fails :


*HTTP/1.1 302 FoundLocation:
http://joomla.example.org/installation/index.php
<http://joomla.example.org/installation/index.php>*

if backed server respond like as below, then it's working


*HTTP/1.1 302 FoundLocation: http://**10.100.1.96/
<http://10.100.1.96/>installation/index.php*


Thanks,
Melan


>
> On Wed, Jun 18, 2014 at 1:31 AM, Melan Nimesh <me...@apache.org> wrote:
>
>> Hi Devs,
>>
>> I noticed the $subject while subscribing to a PHP cartridge with a joomla
>> repository. LB fails to rewrite location header with relative URLs with
>> following error[1] and redirection not happens correctly. I think it's a
>> valid requirement to support to location header with relative URLs, since
>> it is valid according to the current revision of HTTP/1.1 and most browsers
>> support it (even though rfc2616[2] says location header's value is supposed
>> to be an absolute URI ), WDYT?
>>
>>
>> Thanks,
>> Melan
>>
>> [1]
>>
>> TID: [0] [LB] [2014-06-18 00:35:15,997]  INFO
>> {org.apache.synapse.core.axis2.TimeoutHandler} -  This engine will expire
>> all callbacks after : 86400 seconds, irrespective of the timeout action,
>> after the specified or optional timeout
>> TID: [0] [LB] [2014-06-18 00:35:23,474] ERROR
>> {org.apache.stratos.load.balancer.mediators.LocationReWriter} -  Could
>> re-write location header
>> java.net.MalformedURLException: no protocol: installation/index.php
>>     at java.net.URL.<init>(URL.java:585)
>>     at java.net.URL.<init>(URL.java:482)
>>     at java.net.URL.<init>(URL.java:431)
>>     at
>> org.apache.stratos.load.balancer.mediators.LocationReWriter.mediate(LocationReWriter.java:49)
>>     at
>> org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
>>     at
>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>>     at
>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>>     at
>> org.apache.synapse.mediators.filters.OutMediator.mediate(OutMediator.java:61)
>>     at
>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>>     at
>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>>     at
>> org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
>>     at
>> org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:228)
>>     at
>> org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:486)
>>     at
>> org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170)
>>     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
>>     at
>> org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225)
>>     at
>> org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
>>     at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>     at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>     at java.lang.Thread.run(Thread.java:744)
>>
>> [2] http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
>>
>>
>> --
>> Melan Nimesh Jayasinghage
>>
>
>


-- 
Melan Nimesh Jayasinghage

Re: LB does not supports to rewrite location header with relative URLs ?

Posted by Isuru Haththotuwa <is...@apache.org>.
Hi Melan,

A good find. Agreed that Location header should be properly supported.
Sorry if this is a dumb question, but could you please explain a bit more
what is the issue that occurs in this specific scenario you tested?


On Wed, Jun 18, 2014 at 1:31 AM, Melan Nimesh <me...@apache.org> wrote:

> Hi Devs,
>
> I noticed the $subject while subscribing to a PHP cartridge with a joomla
> repository. LB fails to rewrite location header with relative URLs with
> following error[1] and redirection not happens correctly. I think it's a
> valid requirement to support to location header with relative URLs, since
> it is valid according to the current revision of HTTP/1.1 and most browsers
> support it (even though rfc2616[2] says location header's value is supposed
> to be an absolute URI ), WDYT?
>
>
> Thanks,
> Melan
>
> [1]
>
> TID: [0] [LB] [2014-06-18 00:35:15,997]  INFO
> {org.apache.synapse.core.axis2.TimeoutHandler} -  This engine will expire
> all callbacks after : 86400 seconds, irrespective of the timeout action,
> after the specified or optional timeout
> TID: [0] [LB] [2014-06-18 00:35:23,474] ERROR
> {org.apache.stratos.load.balancer.mediators.LocationReWriter} -  Could
> re-write location header
> java.net.MalformedURLException: no protocol: installation/index.php
>     at java.net.URL.<init>(URL.java:585)
>     at java.net.URL.<init>(URL.java:482)
>     at java.net.URL.<init>(URL.java:431)
>     at
> org.apache.stratos.load.balancer.mediators.LocationReWriter.mediate(LocationReWriter.java:49)
>     at
> org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78)
>     at
> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>     at
> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>     at
> org.apache.synapse.mediators.filters.OutMediator.mediate(OutMediator.java:61)
>     at
> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>     at
> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>     at
> org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
>     at
> org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:228)
>     at
> org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:486)
>     at
> org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170)
>     at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
>     at
> org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225)
>     at
> org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
>     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>     at java.lang.Thread.run(Thread.java:744)
>
> [2] http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
>
>
> --
> Melan Nimesh Jayasinghage
>