Susan Rayburn wrote:
>I'm wondering if anyone is using a manual 304 not modified response with
>ColdFusion dynamic pages on IIS.  I'd like to pull the last modified date
>from SQL and pass it to the browser.  If anyone has had luck setting that
up
>(or knows of an article explaining how-to) I'd love to see more.
>
>I'm interested in using the 304 responses as described in the below
>discussion.
>http://www.webmasterworld.com/forum3/6005.htm

Susan:

I've not done this, but your question got me a bit curious and so I looked
into it a bit more.  First, not all web clients send the If-Modified-Since
header, so before anything you'd have to check for it's existence.  Cold
Fusion allows you to access this header via the CGI.HTTP_IF_MODIFIED_SINCE
variable.  If it exists, its value should be in the format specified by RFC
1123, for example:

        Sun, 06 Nov 1994 08:49:37 GMT

So, you can parse this date value, and compare it to the last modified
date/time of your current page/data.  Depending on the result of the
comparison, you either let the page execute as normal, or you return the 304
response.  So you might use something like the following:

    <CFIF IsDefined("CGI.HTTP_IF_MODIFIED_SINCE")>
        <CFSET comparisonDate = [convert date to CF timestamp and to local
time]>
        <CFSET lastModDate = [get last mod date from file sys or DB]>

        <CFIF DateCompare(lastModDate, comparisonDate) EQ 1>
            <CFHEADER STATUSCODE="304" STATUSTEXT="Not Modified">
            <CFABORT>
        </CFIF>
    </CFIF>

This doesn't take into account the "If-None-Match" header, also discussed in
RFC 2616, but this is about as far as I've had time to get.  Also, to
facilitate the logic needed for the first step, "convert date to CF
timestamp and to local time," I wrote the following UDF (queued at
cflib.org):

<CFSCRIPT>
/**
 * Function that converts HTTPTimeString format to ColdFusion TimeStamp
format and
 * optionally converts the time from UTC/GMT to local time.
 *
 * @param httpTimeString        A datetime in the format: ddd, dd mmm yyyy hh:mm:ss
GMT. (Required)
 * @param convertToLocal        A boolean specifying whether httpTimeString should
be converted to local time.  Defaults to false. (Optional)
 * @return Returns a string in Cold Fusion Time Stamp format.
 * @author Mosh Teitelbaum ([EMAIL PROTECTED])
 * @version 1, October 23, 2002
 */
function getTimeStamp(httpTimeString) {
        // Build Time Stamp
        var tsParts = ListToArray(httpTimeString, " ");
        var timeStamp = "{ts '" & tsParts[4] & "-" &
DateFormat("#tsParts[3]#/1/1970", "mm") & "-" & tsParts[2] & " " &
tsParts[5] & "'}";

        // Convert to local time
        if ((ArrayLen(Arguments) EQ 2) AND (CompareNoCase(Arguments[2], "TRUE") EQ
0)) {
                timeStamp = DateConvert("utc2Local", timeStamp);
        }

        // Return timeStamp
        return timeStamp;
}
</CFSCRIPT>

After writing and submitting it, I noticed that there is a similar (too
similar for my tastes, but whatever) UDF that handles the conversion from
HTTPTimeString to CF TimeStamp but does not handle the conversion from
UTC/GMT to localtime.  Anyway, your first line of code would now change
from:

        <CFSET comparisonDate = [convert date to CF timestamp and to local time]>

to:

        <CFSET comparisonDate = getTimeStamp(CGI.HTTP_IF_MODIFIED_SINCE, True)>

How you get the last modified date is up to you.  You'd have to check, I
believe, both the file timestamp and the data timestamp.

Good luck and let me know if you take this any further.

--
Mosh Teitelbaum
evoch, LLC
Tel: (301) 625-9191
Fax: (301) 933-3651
Email: [EMAIL PROTECTED]
WWW: http://www.evoch.com/

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4
Subscription: http://www.houseoffusion.com/index.cfm?sidebar=lists&body=lists/cf_talk
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Signup for the Fusion Authority news alert and keep up with the latest news in 
ColdFusion and related topics. http://www.fusionauthority.com/signup.cfm

Reply via email to