Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/6-ce3c53d4

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Web-Based-Proxy その2

先日作ったいわゆる「web-based-prxoy」は304を返す事はないってテーマについて。

まずはopen-uriの第二パラメータにハッシュ形式でIF-MODIFIED-SINCEを与えてみる。
c:/ruby/lib/ruby/1.8/open-uri.rb:278:in `open_http': 304 Not Modified (OpenURI::HTTPError)

open-uriは、302 Foundは対応してるけど、304は無理みたい。
open-uriのソースを見てみるとって304のハンドリングは無くて、デフォルトに倒れてた。古臭い言い方なので、正しく書くとwhenのラベルが無くて、elseにの意味。

open-uriをPOST対応させる方法が紹介させているが、読んでもよく解らない。
module Net
class HTTPRequest
self.class_eval{
attr_reader :postdata

これは、そのうち勉強するとして、open-uriのソースを見てみると、require 'net/http'してたんで、net/httpで書くことにした。

#!/usr/bin/ruby
require 'cgi'
require 'kconv'
require 'net/http'
cgi = CGI.new

STDOUT.binmode

def header()
h={}
if ENV['HTTP_IF_MODIFIED_SINCE'] then
h['IF-MODIFIED-SINCE']=ENV['HTTP_IF_MODIFIED_SINCE']
end
h
end

url=cgi['url']
base = URI.parse(url)
host = base.host
request_uri = base.request_uri
port=base.port

Net::HTTP.version_1_2
http = Net::HTTP.new(host, port)
req = Net::HTTP::Get.new(request_uri,header())

puts "Status: #{response.code} #{response.message}"

if response.body then
puts "content-type: #{response['content-type']}" if response['content-type']
puts "last-modified: #{response['last-modified']}" if response['last-modified']
body = response.body #.toutf8
puts "content-length: #{body.size.to_s}"
end

print "\r\n"
if body then
print body
end

content-typeは受けたものを返す仕様。中途半端に汎用的なので、UTF-8に変換するところは、バリューが/text\/.*/(正規表現的に書くと)の時だけ、変換するようにしたい。
<META http-equiv=Content-Type content=text/html; charset=utf-8>
を/text\/html/だったら挿入とかもしないと自動ブラウザエンコードが有効にならないみたいだし。

で、上記CGIを『httpd 1.42p』をXP上で動かすが、ENV['HTTP_IF_MODIFIED_SINCE'] で取れない。。 
→QAに出しといた。

オプション一般の表示/インデックス
Pragma: no-cache
Last-Modified:
のチェックをは外す。

続いて動作検証に、WEBrickを使う。 うまく動作したので、試しにcontent-type: image/gifなURLを与えると、bodyがcontent-length分送れない。簡単なサンプルを書いて、教えてgooに投稿した。

以下、そのうち宿題
ACCEPT_ENCODING: gzip, deflateを投げたい。net/httpはungzipしてれる?

レスポンスのvary: Accept-Encodingとaccept-ranges: bytes
varyがあるとIEは次のリクエストでIF-MODIFIED-SINCEを付けて来ない?

この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/6-ce3c53d4

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。