Bug Tracker

Ticket #1292: etagdiff.txt

File etagdiff.txt, 1.8 KB (added by Chainfire, 15 years ago)

Etag patch vs jquery-1.1.3a

Line 
1--- jquery-1.1.3a.js    Wed Jun 13 15:02:50 2007
2+++ jquery.js   Wed Jun 13 15:23:36 2007
3@@ -4228,6 +4228,8 @@
4       
5        // Last-Modified header cache for next request
6        lastModified: {},
7+       // Etag header cache for next request
8+       eTag: {},
9 
10        /**
11         * Load a remote page using an HTTP request.
12@@ -4386,10 +4388,20 @@
13                if ( s.data )
14                        xml.setRequestHeader("Content-Type", s.contentType);
15 
16-               // Set the If-Modified-Since header, if ifModified mode.
17-               if ( s.ifModified )
18-                       xml.setRequestHeader("If-Modified-Since",
19-                               jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
20+               // Set the If-Modified-Since and If-None-Match headers, if ifModified mode.
21+               if ( s.ifModified ) {
22+                       if (jQuery.eTag[s.url]) {
23+                               xml.setRequestHeader("If-None-Match", jQuery.eTag[s.url]);
24+
25+                               // 1-1-1970 should NOT be sent if there is an eTag available
26+                               if (jQuery.lastModified[s.url]) {
27+                                       xml.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
28+                               }
29+                       } else {
30+                               xml.setRequestHeader("If-Modified-Since",
31+                                       jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
32+                       }
33+               }
34 
35                // Set header so the called script knows that it's an XMLHttpRequest
36                xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
37@@ -4427,6 +4439,15 @@
38       
39                                                if ( s.ifModified && modRes )
40                                                        jQuery.lastModified[s.url] = modRes;
41+
42+                                               // Cache Etag header, if ifModified mode.
43+                                               var etagRes;
44+                                               try {
45+                                                       etagRes = xml.getResponseHeader("Etag");
46+                                               } catch(e) {} // swallow exception thrown by FF if header is not available
47+
48+                                               if ( s.ifModified && etagRes )
49+                                                       jQuery.eTag[s.url] = etagRes;
50       
51                                                // process the data (runs the xml through httpData regardless of callback)
52                                                var data = jQuery.httpData( xml, s.dataType );