Некоторые браузеры (например, Firefox) заполняют буфер перед обработкой данных.
В домашних тестах я добился цели, отправив 4096 пробелов:
@cgi.out("status" => "302", "location" => @job.report_url) { ' ' * 4096 }
@job.start
ОБНОВЛЕНИЕ: Вот мой полный тестовый код:
#!/usr/bin/ruby
require 'cgi'
# change the line below to test; e.g.: buf = ''
buf = ' ' * 4096
cgi = CGI.new
cgi.out('status' => '302', 'location' => 'http://www.example.com') { buf }
sleep 10
puts 'end'
Очевидно, что 'end'
никогда не появляется, так как браузер был перенаправлен ранее.
Когда buf
пусто, Firefox ждет 10 секунд перед перенаправлением. Когда он «заполнен» (т. Е. 4K пробелов), браузер перенаправляет сразу. Протестировано с Firefox 4.0 в Ubuntu 10.04 и Firefox 4.0.1 в Windows Seven.