Author: johnh
Date: Wed Mar 24 22:28:38 2010
New Revision: 927208
URL: http://svn.apache.org/viewvc?rev=927208&view=rev
Log:
Per RFC2616 sec 14.21, treat Expires: <not rfc1123 date> as Expires: <in the
past>.
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java?rev=927208&r1=927207&r2=927208&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
Wed Mar 24 22:28:38 2010
@@ -391,6 +391,12 @@ public final class HttpResponse implemen
Date expiresDate = DateUtil.parseRfc1123Date(expires);
if (expiresDate != null) {
return expiresDate.getTime();
+ } else {
+ // Per RFC2616, 14.21
(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21):
+ // "HTTP/1.1 clients and caches MUST treat other invalid date formats,
+ // especially including the value "0", as in the past (i.e., "already
+ // expired")."
+ return 0;
}
}
return -1;
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java?rev=927208&r1=927207&r2=927208&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java
Wed Mar 24 22:28:38 2010
@@ -289,6 +289,18 @@ public class HttpResponseTest extends As
// Second rounding makes this n-1.
assertTtlOk(maxAge, response);
}
+
+ @Test
+ public void testExpiresZeroValue() throws Exception {
+ HttpResponse response = new HttpResponseBuilder().addHeader("Expires",
"0").create();
+ assertEquals(0, roundToSeconds(response.getCacheExpiration()));
+ }
+
+ @Test
+ public void testExpiresUnknownValue() throws Exception {
+ HttpResponse response = new HttpResponseBuilder().addHeader("Expires",
"howdy").create();
+ assertEquals(0, roundToSeconds(response.getCacheExpiration()));
+ }
@Test
public void testMaxAgeNoDate() throws Exception {
@@ -388,16 +400,13 @@ public class HttpResponseTest extends As
@Test
public void testRetryAfter() {
HttpResponse response;
- String nowPlus60 = DateUtil.formatRfc1123Date(System.currentTimeMillis() +
60 * 1000L);
- for (String date : Arrays.asList("60", nowPlus60)) {
- for (int rc : Arrays.asList(HttpResponse.SC_INTERNAL_SERVER_ERROR,
HttpResponse.SC_GATEWAY_TIMEOUT, HttpResponse.SC_BAD_REQUEST)) {
- response = new HttpResponseBuilder()
- .setHttpStatusCode(rc)
- .setHeader("Retry-After","60")
- .create();
- long ttl = response.getCacheTtl();
- assertTrue(ttl <= 60 * 1000L && ttl > 0);
- }
+ for (int rc : Arrays.asList(HttpResponse.SC_INTERNAL_SERVER_ERROR,
HttpResponse.SC_GATEWAY_TIMEOUT, HttpResponse.SC_BAD_REQUEST)) {
+ response = new HttpResponseBuilder()
+ .setHttpStatusCode(rc)
+ .setHeader("Retry-After","60")
+ .create();
+ long ttl = response.getCacheTtl();
+ assertTrue(ttl <= 60 * 1000L && ttl > 0);
}
}