On Feb 22, 1:31 pm, Tim Haines <tmhai...@gmail.com> wrote:
> The Twitter API returns ETags, that seem to change when the content
> changes and otherwise not.  It doesn't seem to return 304's when the
> same ETag is sent back to it though.
>
> Has anyone seen it send 304s?

The API always seem to return no-cache and past expiry headers, it
*does* send 304's when you pass the etag in a "If-None-Match" header:

$ curl --head http://twitter.com/users/show.xml?screen_name=philoye
HTTP/1.1 200 OK
Date: Wed, 24 Feb 2010 01:13:10 GMT
Server: hi
X-RateLimit-Limit: 150
X-Transaction: 1266973990-97869-341
Status: 200 OK
ETag: "3022db84cebe898b561a397c20063f5e"
Last-Modified: Wed, 24 Feb 2010 01:13:10 GMT
X-RateLimit-Remaining: 136
X-Runtime: 0.02109
Content-Type: application/xml; charset=utf-8
Pragma: no-cache
Content-Length: 2057
X-RateLimit-Class: api
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-
check=0
Expires: Tue, 31 Mar 1981 05:00:00 GMT
X-Revision: DEV
X-RateLimit-Reset: 1266976693
Set-Cookie:
_twitter_sess=BAh7CDoRdHJhbnNfcHJvbXB0MDoHaWQiJTA0MWYzMTQyNGZjMjU5MTJlYWQz
%250AOWU1MzhhMmYxZTkzIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFz
%250AaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--
ba31f1ea9e0800e1b4c3d564484c8fdf6885183d; domain=.twitter.com; path=/
Vary: Accept-Encoding
Connection: close

$ curl --head --header 'If-None-Match:
"3022db84cebe898b561a397c20063f5e"' 
http://twitter.com/users/show.xml?screen_name=philoye
HTTP/1.1 304 Not Modified
Date: Wed, 24 Feb 2010 01:13:41 GMT
Server: hi
Connection: close
ETag: "3022db84cebe898b561a397c20063f5e"
Expires: Tue, 31 Mar 1981 05:00:00 GMT
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-
check=0
Vary: Accept-Encoding
Set-Cookie:
_twitter_sess=BAh7CDoHaWQiJTRiYTlkN2RlODVhN2NlNmMzMWM3MWY4Y2FhNGUwZjc4Igpm
%250AbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAG
%250AOgpAdXNlZHsAOhF0cmFuc19wcm9tcHQw--
fce6e5410dc71d9720ac35c5470bc7220e8b4ceb; domain=.twitter.com; path=/


The key is to send the ETag in a If-None-Match header, not an ETag
header. I still don't understand why the Cache-Control and Expires
headers are set this way though.

Cheers,
p.

Reply via email to