2015-05-30 2 views
0

Этот код не работает в Firefox 38.0.1 (Content Encoding Error) и Google Chrome 42.0.2311.152 (ERR_CONTENT_DECODING_FAILED), однако он работает с Opera 12.16 и локон (с --compressed опция):Как правильно использовать Ruby CGI-модуль для вывода gzipped?

#!/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