Detecting if modified since in Classic Asp

Discussion in 'ASP General' started by Simon, Aug 6, 2008.

  1. Simon

    Simon Guest

    Hi

    I am trying to read the html header 'if modified since' by using
    Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP. But I am
    unable to get anything from this, this variable is always empty. It is also
    excluded when I try to list all the server variables. We are using IIS6.

    So please can someone confirm what is the correct syntax?

    Cheers,

    Simon.
    Simon, Aug 6, 2008
    #1
    1. Advertising

  2. Simon wrote:
    > Hi
    >
    > I am trying to read the html header 'if modified since' by using
    > Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP. But
    > I am unable to get anything from this, this variable is always empty.
    > It is also excluded when I try to list all the server variables. We
    > are using IIS6.
    >
    > So please can someone confirm what is the correct syntax?
    >

    That is not a standard header so it will not be included when listing
    all the server variables (I assume you've done something like this:
    http://www.aspfaq.com/2036).

    You might want to wade through this thread:
    http://www.webmasterworld.com/forum3/6005-2-30.htm

    --
    Microsoft MVP -- ASP/ASP.NET
    Please reply to the newsgroup. The email account listed in my From
    header is my spam trap, so I don't check it very often. You will get a
    quicker response by posting to the newsgroup.
    Bob Barrows [MVP], Aug 6, 2008
    #2
    1. Advertising

  3. Simon

    Simon Guest

    Hi Bob,

    Already looked on webmasterworld and that's where I found the following
    Request.ServerVariables("HTTP_IF_MODIFIED_SINCE")

    But this can't be correct

    --
    Cheers,

    Simon.


    "Bob Barrows [MVP]" wrote:

    > Simon wrote:
    > > Hi
    > >
    > > I am trying to read the html header 'if modified since' by using
    > > Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP. But
    > > I am unable to get anything from this, this variable is always empty.
    > > It is also excluded when I try to list all the server variables. We
    > > are using IIS6.
    > >
    > > So please can someone confirm what is the correct syntax?
    > >

    > That is not a standard header so it will not be included when listing
    > all the server variables (I assume you've done something like this:
    > http://www.aspfaq.com/2036).
    >
    > You might want to wade through this thread:
    > http://www.webmasterworld.com/forum3/6005-2-30.htm
    >
    > --
    > Microsoft MVP -- ASP/ASP.NET
    > Please reply to the newsgroup. The email account listed in my From
    > header is my spam trap, so I don't check it very often. You will get a
    > quicker response by posting to the newsgroup.
    >
    >
    >
    Simon, Aug 6, 2008
    #3
  4. Simon

    Simon Guest

    Hi Jon,

    Isn't that just the collection of all the headers as one long string. The
    page you pointed me to did not appear to show this data anyway.

    --
    Cheers,

    Simon.


    "Jon Paal [MSMD]" wrote:

    > it's in Request.ServerVariables("ALL_RAW")
    >
    > http://neural.cs.nthu.edu.tw/jang/sandbox/asp/examples/request5.asp
    >
    >
    >
    > "Simon" <> wrote in message news:...
    > > Hi
    > >
    > > I am trying to read the html header 'if modified since' by using
    > > Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP. But I am
    > > unable to get anything from this, this variable is always empty. It is also
    > > excluded when I try to list all the server variables. We are using IIS6.
    > >
    > > So please can someone confirm what is the correct syntax?
    > >
    > > Cheers,
    > >
    > > Simon.

    >
    >
    >
    Simon, Aug 6, 2008
    #4
  5. I believe it was in there when Jon looked because he got there via a
    google search for that variable name, causing it to appear in the
    HTTP_REFERRER.

    Again, this isn't a standard header and, while you are supposed to be
    able to use this syntax:
    HTTP_<HeaderName>
    to get non-standard headers, the header you are requesting has to exist
    in RAW for it to be available. I can't offer more assistance because
    I've never used this header, which seems to be useful for google
    indexing, correct? I just do intranet apps so I've never gone there.

    Simon wrote:
    > Hi Jon,
    >
    > Isn't that just the collection of all the headers as one long string.
    > The page you pointed me to did not appear to show this data anyway.
    >
    > --
    > Cheers,
    >
    > Simon.
    >
    >
    > "Jon Paal [MSMD]" wrote:
    >
    >> it's in Request.ServerVariables("ALL_RAW")
    >>
    >> http://neural.cs.nthu.edu.tw/jang/sandbox/asp/examples/request5.asp
    >>
    >>
    >>
    >> "Simon" <> wrote in message
    >> news:...
    >>> Hi
    >>>
    >>> I am trying to read the html header 'if modified since' by using
    >>> Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP.
    >>> But I am unable to get anything from this, this variable is always
    >>> empty. It is also excluded when I try to list all the server
    >>> variables. We are using IIS6.
    >>>
    >>> So please can someone confirm what is the correct syntax?
    >>>
    >>> Cheers,
    >>>
    >>> Simon.


    --
    Microsoft MVP -- ASP/ASP.NET
    Please reply to the newsgroup. The email account listed in my From
    header is my spam trap, so I don't check it very often. You will get a
    quicker response by posting to the newsgroup.
    Bob Barrows [MVP], Aug 6, 2008
    #5
  6. Simon

    Simon Guest

    Hi Bob,

    Yes this task is related to Google indexing, I am surprised there is so
    little info out there on this.

    --
    Cheers,

    Simon.


    "Bob Barrows [MVP]" wrote:

    > I believe it was in there when Jon looked because he got there via a
    > google search for that variable name, causing it to appear in the
    > HTTP_REFERRER.
    >
    > Again, this isn't a standard header and, while you are supposed to be
    > able to use this syntax:
    > HTTP_<HeaderName>
    > to get non-standard headers, the header you are requesting has to exist
    > in RAW for it to be available. I can't offer more assistance because
    > I've never used this header, which seems to be useful for google
    > indexing, correct? I just do intranet apps so I've never gone there.
    >
    > Simon wrote:
    > > Hi Jon,
    > >
    > > Isn't that just the collection of all the headers as one long string.
    > > The page you pointed me to did not appear to show this data anyway.
    > >
    > > --
    > > Cheers,
    > >
    > > Simon.
    > >
    > >
    > > "Jon Paal [MSMD]" wrote:
    > >
    > >> it's in Request.ServerVariables("ALL_RAW")
    > >>
    > >> http://neural.cs.nthu.edu.tw/jang/sandbox/asp/examples/request5.asp
    > >>
    > >>
    > >>
    > >> "Simon" <> wrote in message
    > >> news:...
    > >>> Hi
    > >>>
    > >>> I am trying to read the html header 'if modified since' by using
    > >>> Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP.
    > >>> But I am unable to get anything from this, this variable is always
    > >>> empty. It is also excluded when I try to list all the server
    > >>> variables. We are using IIS6.
    > >>>
    > >>> So please can someone confirm what is the correct syntax?
    > >>>
    > >>> Cheers,
    > >>>
    > >>> Simon.

    >
    > --
    > Microsoft MVP -- ASP/ASP.NET
    > Please reply to the newsgroup. The email account listed in my From
    > header is my spam trap, so I don't check it very often. You will get a
    > quicker response by posting to the newsgroup.
    >
    >
    >
    Simon, Aug 6, 2008
    #6
  7. "Simon" <> wrote in message
    news:...
    > Hi
    >
    > I am trying to read the html header 'if modified since' by using
    > Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP. But I am
    > unable to get anything from this, this variable is always empty. It is

    also
    > excluded when I try to list all the server variables. We are using IIS6.
    >
    > So please can someone confirm what is the correct syntax?
    >


    Ok mucho confusion in this thread I clear that up first.

    All headers that are included in the request are accessible to code via the
    ServerVariables accessor. IIS does some additional things with headers and
    creates a set of other named variables such as URL and also adds things that
    have nothing to do with headers such as REMOTE_ADDR.

    IIS does some tranforms on the name of a header before making it available.
    It Prepends HTTP_, makes all the characters upper case and it converts any
    hyphens to underscore. Hence if a client sends the header x-pink-elephants
    it can be access as HTTP_X_PINK_ELEPHANTS.

    The If-Modified-Since header is a standard header but it isn't always
    supplied.

    A HTTP server when responding to a request may include in the response a
    Last-Modified header. When a client such as IE makes a subsequent request
    for the _same_ URL it would normally include the If-Modified-Since request
    header.

    (Side note: a user can suppress the sending of the If-Modified-Since and the
    If-None-Match headers by refreshing using Ctrl-F5 in IE).

    Active Server Script generated pages would not send a Last-Modified header
    in the response unless the developer deliberately created and added it to
    the response themselves. Hence you are not seeing a If-Modified-Since
    header.

    What is it you want to do with this header? Generate a 304 response?

    --
    Anthony Jones - MVP ASP/ASP.NET
    Anthony Jones, Aug 6, 2008
    #7
  8. Simon

    Simon Guest

    Hi Anthony,

    Yes I am trying to respond with the 304 header, I am already generating the
    last modifed date, which is been detected by the browser, and I can also see
    the browser generate the 'if modified since' header. But the webserver does
    not see it with Request.ServerVariables("HTTP_IF_MODIFIED_SINCE")

    From your comments, it appears that this is the correct way to detect this
    header, so maybe I have something blocking this header from reaching the
    server, since I know it is been generated.

    Regards,

    Simon.



    --
    Cheers,

    Simon.


    "Anthony Jones" wrote:

    > "Simon" <> wrote in message
    > news:...
    > > Hi
    > >
    > > I am trying to read the html header 'if modified since' by using
    > > Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP. But I am
    > > unable to get anything from this, this variable is always empty. It is

    > also
    > > excluded when I try to list all the server variables. We are using IIS6.
    > >
    > > So please can someone confirm what is the correct syntax?
    > >

    >
    > Ok mucho confusion in this thread I clear that up first.
    >
    > All headers that are included in the request are accessible to code via the
    > ServerVariables accessor. IIS does some additional things with headers and
    > creates a set of other named variables such as URL and also adds things that
    > have nothing to do with headers such as REMOTE_ADDR.
    >
    > IIS does some tranforms on the name of a header before making it available.
    > It Prepends HTTP_, makes all the characters upper case and it converts any
    > hyphens to underscore. Hence if a client sends the header x-pink-elephants
    > it can be access as HTTP_X_PINK_ELEPHANTS.
    >
    > The If-Modified-Since header is a standard header but it isn't always
    > supplied.
    >
    > A HTTP server when responding to a request may include in the response a
    > Last-Modified header. When a client such as IE makes a subsequent request
    > for the _same_ URL it would normally include the If-Modified-Since request
    > header.
    >
    > (Side note: a user can suppress the sending of the If-Modified-Since and the
    > If-None-Match headers by refreshing using Ctrl-F5 in IE).
    >
    > Active Server Script generated pages would not send a Last-Modified header
    > in the response unless the developer deliberately created and added it to
    > the response themselves. Hence you are not seeing a If-Modified-Since
    > header.
    >
    > What is it you want to do with this header? Generate a 304 response?
    >
    > --
    > Anthony Jones - MVP ASP/ASP.NET
    >
    >
    >
    Simon, Aug 7, 2008
    #8
  9. Simon

    Simon Guest

    Hi Anthony,

    I have since done some tests on a simple asp page, and found that the I can
    after all read the value in Request.ServerVariables("HTTP_IF_MODIFIED_SINCE").

    My test is failing on custom 404 pages, where the web page requested does
    not actually exist. I use server.transfer method to a template file that gets
    its content from a database.

    I imagine that the header is been lost somehow in this process. So I need to
    investigate down this route I think now.

    --
    Cheers,

    Simon.


    "Simon" wrote:

    > Hi Anthony,
    >
    > Yes I am trying to respond with the 304 header, I am already generating the
    > last modifed date, which is been detected by the browser, and I can also see
    > the browser generate the 'if modified since' header. But the webserver does
    > not see it with Request.ServerVariables("HTTP_IF_MODIFIED_SINCE")
    >
    > From your comments, it appears that this is the correct way to detect this
    > header, so maybe I have something blocking this header from reaching the
    > server, since I know it is been generated.
    >
    > Regards,
    >
    > Simon.
    >
    >
    >
    > --
    > Cheers,
    >
    > Simon.
    >
    >
    > "Anthony Jones" wrote:
    >
    > > "Simon" <> wrote in message
    > > news:...
    > > > Hi
    > > >
    > > > I am trying to read the html header 'if modified since' by using
    > > > Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP. But I am
    > > > unable to get anything from this, this variable is always empty. It is

    > > also
    > > > excluded when I try to list all the server variables. We are using IIS6.
    > > >
    > > > So please can someone confirm what is the correct syntax?
    > > >

    > >
    > > Ok mucho confusion in this thread I clear that up first.
    > >
    > > All headers that are included in the request are accessible to code via the
    > > ServerVariables accessor. IIS does some additional things with headers and
    > > creates a set of other named variables such as URL and also adds things that
    > > have nothing to do with headers such as REMOTE_ADDR.
    > >
    > > IIS does some tranforms on the name of a header before making it available.
    > > It Prepends HTTP_, makes all the characters upper case and it converts any
    > > hyphens to underscore. Hence if a client sends the header x-pink-elephants
    > > it can be access as HTTP_X_PINK_ELEPHANTS.
    > >
    > > The If-Modified-Since header is a standard header but it isn't always
    > > supplied.
    > >
    > > A HTTP server when responding to a request may include in the response a
    > > Last-Modified header. When a client such as IE makes a subsequent request
    > > for the _same_ URL it would normally include the If-Modified-Since request
    > > header.
    > >
    > > (Side note: a user can suppress the sending of the If-Modified-Since and the
    > > If-None-Match headers by refreshing using Ctrl-F5 in IE).
    > >
    > > Active Server Script generated pages would not send a Last-Modified header
    > > in the response unless the developer deliberately created and added it to
    > > the response themselves. Hence you are not seeing a If-Modified-Since
    > > header.
    > >
    > > What is it you want to do with this header? Generate a 304 response?
    > >
    > > --
    > > Anthony Jones - MVP ASP/ASP.NET
    > >
    > >
    > >
    Simon, Aug 7, 2008
    #9
  10. Simon

    Simon Guest

    Just to confirm I can read Request.ServerVariables("HTTP_IF_MODIFIED_SINCE"),
    on a standard asp page, or an a page that uses transfer.direct.

    But I can't read Request.ServerVariables("HTTP_IF_MODIFIED_SINCE"), if I use
    a custom 404 page. Yet I can read other variables ok on this same page.

    This is driving me nuts!


    --
    Cheers,

    Simon.


    "Simon" wrote:

    > Hi Anthony,
    >
    > I have since done some tests on a simple asp page, and found that the I can
    > after all read the value in Request.ServerVariables("HTTP_IF_MODIFIED_SINCE").
    >
    > My test is failing on custom 404 pages, where the web page requested does
    > not actually exist. I use server.transfer method to a template file that gets
    > its content from a database.
    >
    > I imagine that the header is been lost somehow in this process. So I need to
    > investigate down this route I think now.
    >
    > --
    > Cheers,
    >
    > Simon.
    >
    >
    > "Simon" wrote:
    >
    > > Hi Anthony,
    > >
    > > Yes I am trying to respond with the 304 header, I am already generating the
    > > last modifed date, which is been detected by the browser, and I can also see
    > > the browser generate the 'if modified since' header. But the webserver does
    > > not see it with Request.ServerVariables("HTTP_IF_MODIFIED_SINCE")
    > >
    > > From your comments, it appears that this is the correct way to detect this
    > > header, so maybe I have something blocking this header from reaching the
    > > server, since I know it is been generated.
    > >
    > > Regards,
    > >
    > > Simon.
    > >
    > >
    > >
    > > --
    > > Cheers,
    > >
    > > Simon.
    > >
    > >
    > > "Anthony Jones" wrote:
    > >
    > > > "Simon" <> wrote in message
    > > > news:...
    > > > > Hi
    > > > >
    > > > > I am trying to read the html header 'if modified since' by using
    > > > > Request.ServerVariables("HTTP_IF_MODIFIED_SINCE") in classic ASP. But I am
    > > > > unable to get anything from this, this variable is always empty. It is
    > > > also
    > > > > excluded when I try to list all the server variables. We are using IIS6.
    > > > >
    > > > > So please can someone confirm what is the correct syntax?
    > > > >
    > > >
    > > > Ok mucho confusion in this thread I clear that up first.
    > > >
    > > > All headers that are included in the request are accessible to code via the
    > > > ServerVariables accessor. IIS does some additional things with headers and
    > > > creates a set of other named variables such as URL and also adds things that
    > > > have nothing to do with headers such as REMOTE_ADDR.
    > > >
    > > > IIS does some tranforms on the name of a header before making it available.
    > > > It Prepends HTTP_, makes all the characters upper case and it converts any
    > > > hyphens to underscore. Hence if a client sends the header x-pink-elephants
    > > > it can be access as HTTP_X_PINK_ELEPHANTS.
    > > >
    > > > The If-Modified-Since header is a standard header but it isn't always
    > > > supplied.
    > > >
    > > > A HTTP server when responding to a request may include in the response a
    > > > Last-Modified header. When a client such as IE makes a subsequent request
    > > > for the _same_ URL it would normally include the If-Modified-Since request
    > > > header.
    > > >
    > > > (Side note: a user can suppress the sending of the If-Modified-Since and the
    > > > If-None-Match headers by refreshing using Ctrl-F5 in IE).
    > > >
    > > > Active Server Script generated pages would not send a Last-Modified header
    > > > in the response unless the developer deliberately created and added it to
    > > > the response themselves. Hence you are not seeing a If-Modified-Since
    > > > header.
    > > >
    > > > What is it you want to do with this header? Generate a 304 response?
    > > >
    > > > --
    > > > Anthony Jones - MVP ASP/ASP.NET
    > > >
    > > >
    > > >
    Simon, Aug 7, 2008
    #10
  11. "Simon" <> wrote in message
    news:...
    > Just to confirm I can read

    Request.ServerVariables("HTTP_IF_MODIFIED_SINCE"),
    > on a standard asp page, or an a page that uses transfer.direct.
    >
    > But I can't read Request.ServerVariables("HTTP_IF_MODIFIED_SINCE"), if I

    use
    > a custom 404 page. Yet I can read other variables ok on this same page.
    >
    > This is driving me nuts!
    >



    When IIS uses the custom 404 page it is effectively a new request. It is a
    bit weird.

    What other variables are you able to read?


    --
    Anthony Jones - MVP ASP/ASP.NET
    Anthony Jones, Aug 7, 2008
    #11
  12. Simon

    Simon Guest

    Hi Anthony,

    I think I can read most other headers including QUERY_STRING, HTTP_HOST. The
    last one I tried was USER_AGENT.


    --
    Cheers,

    Simon.


    "Anthony Jones" wrote:

    > "Simon" <> wrote in message
    > news:...
    > > Just to confirm I can read

    > Request.ServerVariables("HTTP_IF_MODIFIED_SINCE"),
    > > on a standard asp page, or an a page that uses transfer.direct.
    > >
    > > But I can't read Request.ServerVariables("HTTP_IF_MODIFIED_SINCE"), if I

    > use
    > > a custom 404 page. Yet I can read other variables ok on this same page.
    > >
    > > This is driving me nuts!
    > >

    >
    >
    > When IIS uses the custom 404 page it is effectively a new request. It is a
    > bit weird.
    >
    > What other variables are you able to read?
    >
    >
    > --
    > Anthony Jones - MVP ASP/ASP.NET
    >
    >
    >
    Simon, Aug 8, 2008
    #12
  13. "Simon" <> wrote in message
    news:...
    > Hi Anthony,
    >
    > I think I can read most other headers including QUERY_STRING, HTTP_HOST.

    The
    > last one I tried was USER_AGENT.
    >
    >


    QUERY_STRING and USER_AGENT aren't header variables. You'll note that
    QUERY_STRING doesn't contain the original query string but begins 404; and
    then the URL requested.

    What does USER_AGENT and HTTP_HOST header indicate?

    Like I said custom error handling is a bit weird, it appears to be a new
    request but the response is sent on the same connection that created the
    original request.

    I suspect that some headers of the original request are copied into this
    'new' request but I've never tested which ones.

    It doesn't surprise me that If-Modified-Since isn't copied, the resource now
    being requested is not the same one as the client originally requested.


    --
    Anthony Jones - MVP ASP/ASP.NET
    Anthony Jones, Aug 8, 2008
    #13
  14. Simon

    Simon Guest

    Hi Anthony.

    The headers USER_AGENT and HOST, come through as expected unmodified.

    I guess you are saying this could be a dead end for me, if certain headers
    are not passed, although it is strange that everything else seems to be. I
    don't understand why no one else has come across this problem before.

    --
    Cheers,

    Simon.


    "Anthony Jones" wrote:

    >
    > "Simon" <> wrote in message
    > news:...
    > > Hi Anthony,
    > >
    > > I think I can read most other headers including QUERY_STRING, HTTP_HOST.

    > The
    > > last one I tried was USER_AGENT.
    > >
    > >

    >
    > QUERY_STRING and USER_AGENT aren't header variables. You'll note that
    > QUERY_STRING doesn't contain the original query string but begins 404; and
    > then the URL requested.
    >
    > What does USER_AGENT and HTTP_HOST header indicate?
    >
    > Like I said custom error handling is a bit weird, it appears to be a new
    > request but the response is sent on the same connection that created the
    > original request.
    >
    > I suspect that some headers of the original request are copied into this
    > 'new' request but I've never tested which ones.
    >
    > It doesn't surprise me that If-Modified-Since isn't copied, the resource now
    > being requested is not the same one as the client originally requested.
    >
    >
    > --
    > Anthony Jones - MVP ASP/ASP.NET
    >
    >
    >
    Simon, Aug 8, 2008
    #14
  15. "Simon" <> wrote in message
    news:...
    > Hi Anthony.
    >
    > The headers USER_AGENT and HOST, come through as expected unmodified.
    >
    > I guess you are saying this could be a dead end for me, if certain headers
    > are not passed, although it is strange that everything else seems to be. I
    > don't understand why no one else has come across this problem before.
    >



    Mostly likely because you are merging two unusual things.

    1) Using the 404 trick is a bit of a hack which works well on its own but a
    more robust solution would involve an ISAPI filter.

    2) Having an ASP page add a Last-Modified header and potentially responding
    with a 304. This also works reasonably well but is even less common than
    the 404 trick. It take some effort to acheive especially in when using only
    VBScript.

    Hence the combination of the two is likely to be very rare.

    How complex is the effective URL re-write you are doing? There are I
    believe some freebie simple URL re-writering filters that are based on
    Regular expressions. If that can work for you then you won't need the 404
    trick.

    --
    Anthony Jones - MVP ASP/ASP.NET
    Anthony Jones, Aug 8, 2008
    #15
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Roshawn Dawson

    Using If-Modified-Since Http Header

    Roshawn Dawson, Nov 13, 2005, in forum: ASP .Net
    Replies:
    4
    Views:
    7,269
    Joerg Jooss
    Nov 14, 2005
  2. Sam Carleton

    setting If-Modified-Since programmatically

    Sam Carleton, Jul 4, 2006, in forum: ASP .Net
    Replies:
    4
    Views:
    1,976
    Sam Carleton
    Jul 4, 2006
  3. Sergei Shelukhin
    Replies:
    1
    Views:
    535
  4. Paul Murton
    Replies:
    7
    Views:
    115
    Logan Capaldo
    Aug 28, 2006
  5. Cartoper
    Replies:
    2
    Views:
    369
    Henry
    Feb 18, 2008
Loading...

Share This Page