【问题标题】:How to properly use Ruby CGI module for gzipped output?如何正确使用 Ruby CGI 模块进行压缩输出?
【发布时间】:2015-08-13 14:05:27
【问题描述】:

此代码在 Firefox 38.0.1(内容编码错误)和 Google Chrome 42.0.2311.152 (ERR_CONTENT_DECODING_FAILED) 中不起作用,但它适用于 Opera 12.16 和 cURL(带有 --compressed 选项):

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

此代码适用于所有浏览器,也适用于 cURL:

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

【问题讨论】:

    标签: ruby encoding cgi gzip deflate


    【解决方案1】:

    好的,问题解决了,必须使用这段代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-24
      • 2012-05-26
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2014-05-07
      相关资源
      最近更新 更多