You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modules-dev@httpd.apache.org by Sindhi Sindhi <si...@gmail.com> on 2013/06/26 22:22:31 UTC

Browser cookie and Apache server calls

Hi,

I have a C++ Apache filter module for HTML output filtering. I'm seeing a
certain behavior when using my filter module after setting cookies and
would want to know if thats expected.

I have a html page index.html, this page has a hyperlink called "Click
here" and when I click on this link, a second page index2.html should be
launched.

My filter applies some business logic while filtering html files.

I have a cookie.html file that has Javascript to set a cookie (using
document.cookie) in the browser.

I need to do the following:
1. Enable my filter using LoadModule directive and start the server
2. Set a cookie with name=cookieName, value=cookieValue in the browser
using the cookie.html
3. Launch index.html, and then click on "Click here". When this call goes
to the filter module, I have to apply some business logic before
index2.html is rendered on browser.

But when I set the cookie in step2 above, I see that the filter module is
not called because a server call is not made, and the browser opens the
cached index2.html which does not have my business logic applied.

And, if I dont set the cookie mentioned in step2 above, a server call is
made when I click on "Click here" link.

How can I ensure that, when I try to launch a html page from a hyperlink,
the call goes to the filter module even when I set a browser cookie.

My apologies if I'm asking something fundamental, I'm new to how cookies
work with web-servers, any help would be really appreciated.

Thanks.

Re: Browser cookie and Apache server calls

Posted by Sindhi Sindhi <si...@gmail.com>.
I'm using Chrome Version 24.0.1312.14

On Thu, Jun 27, 2013 at 1:52 AM, Sindhi Sindhi <si...@gmail.com> wrote:

> Hi,
>
> I have a C++ Apache filter module for HTML output filtering. I'm seeing a
> certain behavior when using my filter module after setting cookies and
> would want to know if thats expected.
>
> I have a html page index.html, this page has a hyperlink called "Click
> here" and when I click on this link, a second page index2.html should be
> launched.
>
> My filter applies some business logic while filtering html files.
>
> I have a cookie.html file that has Javascript to set a cookie (using
> document.cookie) in the browser.
>
> I need to do the following:
> 1. Enable my filter using LoadModule directive and start the server
> 2. Set a cookie with name=cookieName, value=cookieValue in the browser
> using the cookie.html
> 3. Launch index.html, and then click on "Click here". When this call goes
> to the filter module, I have to apply some business logic before
> index2.html is rendered on browser.
>
> But when I set the cookie in step2 above, I see that the filter module is
> not called because a server call is not made, and the browser opens the
> cached index2.html which does not have my business logic applied.
>
> And, if I dont set the cookie mentioned in step2 above, a server call is
> made when I click on "Click here" link.
>
> How can I ensure that, when I try to launch a html page from a hyperlink,
> the call goes to the filter module even when I set a browser cookie.
>
> My apologies if I'm asking something fundamental, I'm new to how cookies
> work with web-servers, any help would be really appreciated.
>
> Thanks.
>

Re: Browser cookie and Apache server calls

Posted by Sindhi Sindhi <si...@gmail.com>.
Thanks a lot Sorin, with the information you provided I should be able to
get it working.
Thanks again!

On Thu, Jun 27, 2013 at 1:16 PM, Sorin Manolache <so...@gmail.com> wrote:

> On 2013-06-27 06:28, Sindhi Sindhi wrote:
>
>> If I clear the browser cache before I click on the hyperlink, I dont see
>> this issue. But I do not want to delete the cookies, because the business
>> logic used by the filter makes use of the cookies that are set. Also I may
>> not want to delete the cache everytime before I click on the hyperlink :(
>>
>> I added the below lines in httpd.conf file but still see that the page is
>> cached and hence no server call is made :(
>> LoadModule headers_module modules/mod_headers.so
>> Header set Cache-Control "must-revalidate, no-cache"
>>
>
> As a general advice, test your modules with a command line tool first.
> Thus you have a strict control of what you send in your request and you see
> what the server answers. Such a command line tool is "curl". It runs under
> Windows too. It allows you to locate the problem: is it that your module
> does not send the expected headers (Set-Cookie, Cache-Control, etc), or is
> it that the browser does not send them (the Cookie header for example).
> With curl you can specify which headers to send, which cookies, and you can
> simulate browsers by sending all kind of cache-related headers
> (If-Modified-Since, If-Match-None, etc).
>
> Check http://www.w3.org/Protocols/**rfc2616/rfc2616-sec14.html#**sec14<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14>for an explanation of all http headers, especially the cache-related ones
> (Cache-Control, Expires, Last-Modified, If-Modified-Since, ETag, etc).
>
> For testing with the browser, there's a plugin for Firefox called Firebug.
> Maybe there's something similar for Chrome, I don't know. Firebug displays
> the http communication between browser and server, including the http
> headers.
>
> If you don't find such a plugin, you could sniff the network traffic
> directly via a tool such as wireshark (works on Windows too and it's free).
>
> You can look if the "Cache-Control" header is always set by your server.
> If it is set then the browser is not supposed to cache the page linked from
> the hyperlink, so it should replay the request every time you click on it.
>
> If it is not set and you cannot force apache to set it by the Header
> directive, then force it directly in your module
> (apr_table_set(r->headers_out, "Cache-Control", "must-revalidate,
> no-cache"); apr_table_set(r->err_headers_**out, "Cache-Control",
> "must-revalidate, no-cache");)
>
> Sorin
>
>
>
>
>>
>> On Thu, Jun 27, 2013 at 2:25 AM, Sorin Manolache <so...@gmail.com>
>> wrote:
>>
>>  On 2013-06-26 22:22, Sindhi Sindhi wrote:
>>>
>>>  Hi,
>>>>
>>>> I have a C++ Apache filter module for HTML output filtering. I'm seeing
>>>> a
>>>> certain behavior when using my filter module after setting cookies and
>>>> would want to know if thats expected.
>>>>
>>>> I have a html page index.html, this page has a hyperlink called "Click
>>>> here" and when I click on this link, a second page index2.html should be
>>>> launched.
>>>>
>>>> My filter applies some business logic while filtering html files.
>>>>
>>>> I have a cookie.html file that has Javascript to set a cookie (using
>>>> document.cookie) in the browser.
>>>>
>>>> I need to do the following:
>>>> 1. Enable my filter using LoadModule directive and start the server
>>>> 2. Set a cookie with name=cookieName, value=cookieValue in the browser
>>>> using the cookie.html
>>>> 3. Launch index.html, and then click on "Click here". When this call
>>>> goes
>>>> to the filter module, I have to apply some business logic before
>>>> index2.html is rendered on browser.
>>>>
>>>> But when I set the cookie in step2 above, I see that the filter module
>>>> is
>>>> not called because a server call is not made, and the browser opens the
>>>> cached index2.html which does not have my business logic applied.
>>>>
>>>> And, if I dont set the cookie mentioned in step2 above, a server call is
>>>> made when I click on "Click here" link.
>>>>
>>>> How can I ensure that, when I try to launch a html page from a
>>>> hyperlink,
>>>> the call goes to the filter module even when I set a browser cookie.
>>>>
>>>>
>>> What happens if you clear your browser's memory and disk cache before you
>>> click on the hyperlink?
>>>
>>> If it's a cache issue, then use the mod_headers module and the 'Header
>>> set
>>> Cache-Control "must-revalidate, no-cache"' directive to disable browser
>>> caching.
>>>
>>> Sorin
>>>
>>>
>>>
>>>
>>>
>>>  My apologies if I'm asking something fundamental, I'm new to how cookies
>>>> work with web-servers, any help would be really appreciated.
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>
>>
>

Re: Browser cookie and Apache server calls

Posted by Sorin Manolache <so...@gmail.com>.
On 2013-06-27 06:28, Sindhi Sindhi wrote:
> If I clear the browser cache before I click on the hyperlink, I dont see
> this issue. But I do not want to delete the cookies, because the business
> logic used by the filter makes use of the cookies that are set. Also I may
> not want to delete the cache everytime before I click on the hyperlink :(
>
> I added the below lines in httpd.conf file but still see that the page is
> cached and hence no server call is made :(
> LoadModule headers_module modules/mod_headers.so
> Header set Cache-Control "must-revalidate, no-cache"

As a general advice, test your modules with a command line tool first. 
Thus you have a strict control of what you send in your request and you 
see what the server answers. Such a command line tool is "curl". It runs 
under Windows too. It allows you to locate the problem: is it that your 
module does not send the expected headers (Set-Cookie, Cache-Control, 
etc), or is it that the browser does not send them (the Cookie header 
for example). With curl you can specify which headers to send, which 
cookies, and you can simulate browsers by sending all kind of 
cache-related headers (If-Modified-Since, If-Match-None, etc).

Check http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14 for 
an explanation of all http headers, especially the cache-related ones 
(Cache-Control, Expires, Last-Modified, If-Modified-Since, ETag, etc).

For testing with the browser, there's a plugin for Firefox called 
Firebug. Maybe there's something similar for Chrome, I don't know. 
Firebug displays the http communication between browser and server, 
including the http headers.

If you don't find such a plugin, you could sniff the network traffic 
directly via a tool such as wireshark (works on Windows too and it's free).

You can look if the "Cache-Control" header is always set by your server. 
If it is set then the browser is not supposed to cache the page linked 
from the hyperlink, so it should replay the request every time you click 
on it.

If it is not set and you cannot force apache to set it by the Header 
directive, then force it directly in your module 
(apr_table_set(r->headers_out, "Cache-Control", "must-revalidate, 
no-cache"); apr_table_set(r->err_headers_out, "Cache-Control", 
"must-revalidate, no-cache");)

Sorin


>
>
> On Thu, Jun 27, 2013 at 2:25 AM, Sorin Manolache <so...@gmail.com> wrote:
>
>> On 2013-06-26 22:22, Sindhi Sindhi wrote:
>>
>>> Hi,
>>>
>>> I have a C++ Apache filter module for HTML output filtering. I'm seeing a
>>> certain behavior when using my filter module after setting cookies and
>>> would want to know if thats expected.
>>>
>>> I have a html page index.html, this page has a hyperlink called "Click
>>> here" and when I click on this link, a second page index2.html should be
>>> launched.
>>>
>>> My filter applies some business logic while filtering html files.
>>>
>>> I have a cookie.html file that has Javascript to set a cookie (using
>>> document.cookie) in the browser.
>>>
>>> I need to do the following:
>>> 1. Enable my filter using LoadModule directive and start the server
>>> 2. Set a cookie with name=cookieName, value=cookieValue in the browser
>>> using the cookie.html
>>> 3. Launch index.html, and then click on "Click here". When this call goes
>>> to the filter module, I have to apply some business logic before
>>> index2.html is rendered on browser.
>>>
>>> But when I set the cookie in step2 above, I see that the filter module is
>>> not called because a server call is not made, and the browser opens the
>>> cached index2.html which does not have my business logic applied.
>>>
>>> And, if I dont set the cookie mentioned in step2 above, a server call is
>>> made when I click on "Click here" link.
>>>
>>> How can I ensure that, when I try to launch a html page from a hyperlink,
>>> the call goes to the filter module even when I set a browser cookie.
>>>
>>
>> What happens if you clear your browser's memory and disk cache before you
>> click on the hyperlink?
>>
>> If it's a cache issue, then use the mod_headers module and the 'Header set
>> Cache-Control "must-revalidate, no-cache"' directive to disable browser
>> caching.
>>
>> Sorin
>>
>>
>>
>>
>>
>>> My apologies if I'm asking something fundamental, I'm new to how cookies
>>> work with web-servers, any help would be really appreciated.
>>>
>>> Thanks.
>>>
>>>
>>
>


Re: Browser cookie and Apache server calls

Posted by Sindhi Sindhi <si...@gmail.com>.
If I clear the browser cache before I click on the hyperlink, I dont see
this issue. But I do not want to delete the cookies, because the business
logic used by the filter makes use of the cookies that are set. Also I may
not want to delete the cache everytime before I click on the hyperlink :(

I added the below lines in httpd.conf file but still see that the page is
cached and hence no server call is made :(
LoadModule headers_module modules/mod_headers.so
Header set Cache-Control "must-revalidate, no-cache"


On Thu, Jun 27, 2013 at 2:25 AM, Sorin Manolache <so...@gmail.com> wrote:

> On 2013-06-26 22:22, Sindhi Sindhi wrote:
>
>> Hi,
>>
>> I have a C++ Apache filter module for HTML output filtering. I'm seeing a
>> certain behavior when using my filter module after setting cookies and
>> would want to know if thats expected.
>>
>> I have a html page index.html, this page has a hyperlink called "Click
>> here" and when I click on this link, a second page index2.html should be
>> launched.
>>
>> My filter applies some business logic while filtering html files.
>>
>> I have a cookie.html file that has Javascript to set a cookie (using
>> document.cookie) in the browser.
>>
>> I need to do the following:
>> 1. Enable my filter using LoadModule directive and start the server
>> 2. Set a cookie with name=cookieName, value=cookieValue in the browser
>> using the cookie.html
>> 3. Launch index.html, and then click on "Click here". When this call goes
>> to the filter module, I have to apply some business logic before
>> index2.html is rendered on browser.
>>
>> But when I set the cookie in step2 above, I see that the filter module is
>> not called because a server call is not made, and the browser opens the
>> cached index2.html which does not have my business logic applied.
>>
>> And, if I dont set the cookie mentioned in step2 above, a server call is
>> made when I click on "Click here" link.
>>
>> How can I ensure that, when I try to launch a html page from a hyperlink,
>> the call goes to the filter module even when I set a browser cookie.
>>
>
> What happens if you clear your browser's memory and disk cache before you
> click on the hyperlink?
>
> If it's a cache issue, then use the mod_headers module and the 'Header set
> Cache-Control "must-revalidate, no-cache"' directive to disable browser
> caching.
>
> Sorin
>
>
>
>
>
>> My apologies if I'm asking something fundamental, I'm new to how cookies
>> work with web-servers, any help would be really appreciated.
>>
>> Thanks.
>>
>>
>

Re: Browser cookie and Apache server calls

Posted by Sorin Manolache <so...@gmail.com>.
On 2013-06-26 22:22, Sindhi Sindhi wrote:
> Hi,
>
> I have a C++ Apache filter module for HTML output filtering. I'm seeing a
> certain behavior when using my filter module after setting cookies and
> would want to know if thats expected.
>
> I have a html page index.html, this page has a hyperlink called "Click
> here" and when I click on this link, a second page index2.html should be
> launched.
>
> My filter applies some business logic while filtering html files.
>
> I have a cookie.html file that has Javascript to set a cookie (using
> document.cookie) in the browser.
>
> I need to do the following:
> 1. Enable my filter using LoadModule directive and start the server
> 2. Set a cookie with name=cookieName, value=cookieValue in the browser
> using the cookie.html
> 3. Launch index.html, and then click on "Click here". When this call goes
> to the filter module, I have to apply some business logic before
> index2.html is rendered on browser.
>
> But when I set the cookie in step2 above, I see that the filter module is
> not called because a server call is not made, and the browser opens the
> cached index2.html which does not have my business logic applied.
>
> And, if I dont set the cookie mentioned in step2 above, a server call is
> made when I click on "Click here" link.
>
> How can I ensure that, when I try to launch a html page from a hyperlink,
> the call goes to the filter module even when I set a browser cookie.

What happens if you clear your browser's memory and disk cache before 
you click on the hyperlink?

If it's a cache issue, then use the mod_headers module and the 'Header 
set Cache-Control "must-revalidate, no-cache"' directive to disable 
browser caching.

Sorin



>
> My apologies if I'm asking something fundamental, I'm new to how cookies
> work with web-servers, any help would be really appreciated.
>
> Thanks.
>