couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brian Candler <B.Cand...@pobox.com>
Subject Re: standalone attachments and content-encoding header
Date Wed, 17 Mar 2010 21:53:20 GMT
On Wed, Mar 17, 2010 at 01:53:57PM -0700, John Merrells wrote:
> Some pseudo ruby 

OK, I've turned that into some real ruby:

------------------------------------------------------------------------
require 'zlib'
require 'rubygems'
require 'restclient'
require 'json'
begin
  DB = "http://127.0.0.1:5984/testdb"

  RestClient.delete(DB) rescue nil
  RestClient.put(DB, "")
  rev = JSON.parse(RestClient.put("#{DB}/doc1", "{}"))['rev']

  html = "<html>My great page</html>"

  attachment= Zlib::Deflate.deflate(html)
  headers = {'Content-Encoding'=>'deflate',:content_type=>'text/html'}
  RestClient.put("#{DB}/doc1/attach1?rev=#{rev}", attachment, headers)
  p RestClient.get("#{DB}/doc1/attach1")  

rescue RestClient::RequestFailed => e
  puts e.message
  puts e.http_body
end
------------------------------------------------------------------------

tcpdump shows that 'Content-Encoding: deflate' is indeed sent with the
request, but as John says, the response is the compressed doc but without
a corresponding 'Content-Encoding: deflate' header, so any browser would
treat it as garbage.

I then tried it with a json doc rather than attachment:

------------------------------------------------------------------------
require 'zlib'
require 'rubygems'
require 'restclient'
require 'json'
begin
  DB = "http://127.0.0.1:5984/testdb"

  RestClient.delete(DB) rescue nil
  RestClient.put(DB, "")

  json = '{"foo":"bar"}'
  doc = Zlib::Deflate.deflate(json)
  headers = {'Content-Encoding'=>'deflate',:content_type=>'application/json'}
  rev = JSON.parse(RestClient.put("#{DB}/doc2", doc, headers))['rev']

  # doesn't get here; the uploaded doc is rejected as invalid
  p RestClient.get("#{DB}/doc2")  

rescue RestClient::RequestFailed => e
  puts e.message
  puts e.http_body
end
------------------------------------------------------------------------

The doc is rejected as invalid JSON.

Perhaps I simply misunderstand how the Content-Encoding: header is supposed
to work?

Regards,

Brian.

Mime
View raw message