diff options
| author | Damien F. Katz <damien@apache.org> | 2009-02-11 16:12:39 +0000 | 
|---|---|---|
| committer | Damien F. Katz <damien@apache.org> | 2009-02-11 16:12:39 +0000 | 
| commit | fd31ca2f9ee86cafa2b55da5f969616a1e06926d (patch) | |
| tree | 1f59347028521afed3e3301eaa2394981177de58 | |
| parent | 59f41c2678f59a2effade9651c0de11bbe811c56 (diff) | |
Changed _uuid to respond to GET instead of POST. Bug COUCHDB-190
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@743373 13f79535-47bb-0310-9956-ffa450edef68
| -rw-r--r-- | share/www/script/couch.js | 2 | ||||
| -rw-r--r-- | share/www/script/couch_tests.js | 23 | ||||
| -rw-r--r-- | src/couchdb/couch_httpd_misc_handlers.erl | 10 | 
3 files changed, 27 insertions, 8 deletions
| diff --git a/share/www/script/couch.js b/share/www/script/couch.js index 96612faa..21382dd0 100644 --- a/share/www/script/couch.js +++ b/share/www/script/couch.js @@ -312,7 +312,7 @@ CouchDB.newUuids = function(n) {      }      return uuids;    } else { -    CouchDB.last_req = CouchDB.request("POST", "/_uuids?count=" + (100 + n)); +    CouchDB.last_req = CouchDB.request("GET", "/_uuids?count=" + (100 + n));      CouchDB.maybeThrowError(CouchDB.last_req);      var result = JSON.parse(CouchDB.last_req.responseText);      CouchDB.uuids_cache = diff --git a/share/www/script/couch_tests.js b/share/www/script/couch_tests.js index 55a63bc9..e9594918 100644 --- a/share/www/script/couch_tests.js +++ b/share/www/script/couch_tests.js @@ -457,20 +457,33 @@ db.createDb();    },    uuids: function(debug) { +    var testHashBustingHeaders = function(xhr) { +      T(xhr.getResponseHeader("Cache-Control").match(/no-cache/)); +      T(xhr.getResponseHeader("Pragma") == "no-cache"); +       +      var currentTime = new Date(); +      var expiresHeader = Date.parse(xhr.getResponseHeader("Expires")); +      var dateHeader = Date.parse(xhr.getResponseHeader("Date"));  +       +      T(expiresHeader < currentTime); +      T(currentTime - dateHeader < 3000); +    }; +            var db = new CouchDB("test_suite_db");      db.deleteDb();      db.createDb();      if (debug) debugger;      // a single UUID without an explicit count -    var xhr = CouchDB.request("POST", "/_uuids"); +    var xhr = CouchDB.request("GET", "/_uuids");      T(xhr.status == 200);      var result = JSON.parse(xhr.responseText);      T(result.uuids.length == 1);      var first = result.uuids[0]; +    testHashBustingHeaders(xhr);      // a single UUID with an explicit count -    xhr = CouchDB.request("POST", "/_uuids?count=1"); +    xhr = CouchDB.request("GET", "/_uuids?count=1");      T(xhr.status == 200);      result = JSON.parse(xhr.responseText);      T(result.uuids.length == 1); @@ -478,7 +491,7 @@ db.createDb();      T(first != second);      // no collisions with 1,000 UUIDs -    xhr = CouchDB.request("POST", "/_uuids?count=1000"); +    xhr = CouchDB.request("GET", "/_uuids?count=1000");      T(xhr.status == 200);      result = JSON.parse(xhr.responseText);      T( result.uuids.length == 1000 ); @@ -489,7 +502,9 @@ db.createDb();        seen[id] = 1;      } -    // check our library +    // ensure we return a 405 on POST +    xhr = CouchDB.request("POST", "/_uuids?count=1000"); +    T(xhr.status == 405);    },    bulk_docs: function(debug) { diff --git a/src/couchdb/couch_httpd_misc_handlers.erl b/src/couchdb/couch_httpd_misc_handlers.erl index 71a0e9ae..92ff3b0a 100644 --- a/src/couchdb/couch_httpd_misc_handlers.erl +++ b/src/couchdb/couch_httpd_misc_handlers.erl @@ -113,14 +113,18 @@ handle_restart_req(Req) ->      send_method_not_allowed(Req, "POST"). -handle_uuids_req(#httpd{method='POST'}=Req) -> +handle_uuids_req(#httpd{method='GET'}=Req) ->      Count = list_to_integer(couch_httpd:qs_value(Req, "count", "1")), +    CacheBustingHeaders = [{"Date", httpd_util:rfc1123_date()}, +                           {"Cache-Control", "no-cache"}, +                           {"Expires", "Fri, 01 Jan 1990 00:00:00 GMT"},  % Past date, ON PURPOSE! +                           {"Pragma", "no-cache"}],      % generate the uuids      UUIDs = [ couch_util:new_uuid() || _ <- lists:seq(1,Count)],      % send a JSON response -    send_json(Req, {[{<<"uuids">>, UUIDs}]}); +    send_json(Req, 200, CacheBustingHeaders, {[{<<"uuids">>, UUIDs}]});  handle_uuids_req(Req) -> -    send_method_not_allowed(Req, "POST"). +    send_method_not_allowed(Req, "GET").  % Config request handler | 
