2015-05-30 21 views
0

此代碼無法在Firefox 38.0.1(內容編碼錯誤)和谷歌Chrome 42.0.2311.152(ERR_CONTENT_DECODING_FAILED)工作,但它使用Opera 12.16和捲曲(與--compressed選項)工作原理:如何正確使用Ruby CGI模塊進行gzip壓縮輸出?

#!/usr/bin/ruby 
require "cgi" 
require "zlib" 

cgi=CGI.new(:accept_charset => "UTF-8") 

#header 
puts "Content-Type: text/html; charset=\"UTF-8\"" 
puts "Content-Encoding: gzip" 
puts 

#generating some html output 

output="" 
output << "<html><body><style> p {line-height:20%;font-size:9px;font-family:monospace} a {text-decoration:none} a[title]:hover:after {font-size:9px;font-family:monospace}</style>" 
output << "<p style='text-align:center'>#{Time.now}</p>" 
output << "<p>#{"-"*190}</p>" 
output<<"</body></html>" 

z = Zlib::Deflate.new(9) 
compressed = z.deflate(output,Zlib::FINISH) 
z.close 
puts compressed 

該代碼在所有瀏覽器,和捲曲太:

#!/usr/bin/ruby 
require "cgi" 
require "zlib" 

cgi=CGI.new(:accept_charset => "UTF-8") 

puts "Content-Type: text/html; charset=\"UTF-8\"" 
puts "Content-Encoding: gzip" 
puts 

output="" 
output << "<html><body><style> p {line-height:20%;font-size:9px;font-family:monospace} a {text-decoration:none} a[title]:hover:after {font-size:9px;font-family:monospace}</style>" 
output << "<p style='text-align:center'>#{Time.now}</p>" 
output << "<p>#{"-"*190}</p>" 
output<<"</body></html>" 

File.write("gzip.temp",output) 
compressed=IO.popen("cat gzip.temp|gzip -c","r").read 
puts compressed 

回答

0

好了,問題解決了,一個要使用此代碼段:

z = Zlib::Deflate.new(9,16+Zlib::MAX_WBITS) 
compressed = z.deflate(output,Zlib::FINISH) 
z.close 
puts compressed