You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "Bryan Call (JIRA)" <ji...@apache.org> on 2016/08/16 18:05:20 UTC

[jira] [Updated] (TS-2962) header_rewrite default "exists" matcher not working

     [ https://issues.apache.org/jira/browse/TS-2962?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Bryan Call updated TS-2962:
---------------------------
    Fix Version/s:     (was: 7.0.0)
                   7.1.0

> header_rewrite default "exists" matcher not working
> ---------------------------------------------------
>
>                 Key: TS-2962
>                 URL: https://issues.apache.org/jira/browse/TS-2962
>             Project: Traffic Server
>          Issue Type: Bug
>          Components: Plugins
>    Affects Versions: 5.0.1
>            Reporter: Nick Muerdter
>            Assignee: Leif Hedstrom
>            Priority: Minor
>             Fix For: 7.1.0
>
>
> The [documentation|https://docs.trafficserver.apache.org/en/latest/reference/plugins/header_rewrite.en.html#operands-to-conditions] for the header_rewrite plugin indicates that if you don't specify a matcher on a condition, then the matcher checks if a value exists. However, if I'm understanding the intended behavior correctly, this is not the behavior I'm seeing. If I don't specify an explicit matcher on the condition, then the condition never seems to match  (at least for http headers).
> Here's a simplified example in a stock 5.0.1 installation that should add a "{{X-Testing}}" header to the response if the "{{Surrogate-Control}}" header exists on the response:
> {code}
> cond %{READ_RESPONSE_HDR_HOOK}
> cond %{HEADER:Surrogate-Control}
> add-header X-Testing Hello [L]
> {code}
> {code}
> $ curl -I "http://localhost:8081/test"
> HTTP/1.1 200 OK
> X-Powered-By: Express
> Surrogate-Control: max-age=60
> Date: Mon, 28 Jul 2014 06:19:43 GMT
> Age: 0
> Connection: keep-alive
> Server: ATS/5.0.1
> {code}
> But as you can see from this response, no such header is added.
> If I change the condition to a regex match for one or more characters, then the header gets added as I expect:
> {code}
> cond %{READ_RESPONSE_HDR_HOOK}
> cond %{HEADER:Surrogate-Control} /.+/
> add-header X-Testing Hello [L]
> {code}
> {code}
> $ curl -I "http://localhost:8081/test"
> HTTP/1.1 200 OK
> X-Powered-By: Express
> Surrogate-Control: max-age=60
> Date: Mon, 28 Jul 2014 06:19:12 GMT
> X-Testing: Hello
> Age: 0
> Connection: keep-alive
> Server: ATS/5.0.1
> {code}
> The regex based approach works fine, but it took me a while to realize what was going on and figure this out (the primary example in the documentation also seems to be utilizing this "exists" logic so that also doesn't work for me).
> So if the condition without an explicit matcher should check for a variable's existence, that doesn't seem to be working. Alternatively, if the current behavior is working as intended, then I think the documentation and examples might need to be updated (and if that's the case, I'd be happy to take a stab at that).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)