Gajulog


2017.07.27 [years ago today] edit

 Content-Typeのcharsetがダブる

なにげなく確認してみたら、ウチの環境でtDiaryが返すHTTPヘッダのContent-Typeが

Content-Type: text/html; charset=UTF-8; charset=UTF-8

とcharsetパラメーターがダブっていた。 どうやら最近入った以下の変更が原因。

CGIオブジェクトのhttp_headerに

{
 'Content-Type' => 'text/html',
 'charset' => 'UTF-8'
}

を突っ込んでおくと、うちの環境では

Content-Type: text/html; charset=UTF-8

とcharsetはContent-Typeの一部として出力されるのだが、どうやら、「ただのにっき」や「まちゅダイアリー」(tDiary製作者さん)の環境では

Content-Type: text/html
charset: UTF-8

とそのまま出力されるらしく、これを修正すべく先の変更で

{
 'Content-Type' => 'text/html; charset=UTF-8',
 'charset' => 'UTF-8'
}

を突っ込むことにしたらしい。なので今ご両人の日記はHTTPヘッダに

Content-Type: text/html; charset=UTF-8
charset: UTF-8

と出力されているのだが、うちの環境では冒頭のようになってしまうと。

サーバーの設定なのかRubyの設定なのかよく分からないけど。とりあえず手元で自分の環境に合わせて元に戻した。 まあ、charsetパラメータがダブっても実害ないけど。

ただ、HTTPヘッダに"charset"というヘッダはないっぽいので、本来ウチの環境で起きてる動作を期待してもともと組んでたんじゃないのかなって気はするけど。

追記(7/28):

出力箇所は dispatcher.rb の

def send_headers(status, headers)
  begin
   headers['type'] = headers.delete('Content-Type')
   $stdout.print CGI.new.header({'Status'=>status}.merge(headers))
  rescue EOFError
  ...

で、Content-Typeをtypeに入れ替えたうえでCGI::headerを呼んでる。

上記を見ると、hashの"type"と"charset"の値を組み合わせてContent-Typeヘッダを作ると明確に書いてある。 なんでその通り動いてない環境があるのかは謎。

Tags: tDiary

作詞家の山川啓介さんが肺がんのため死去、72歳 「時間よ止まれ」「聖母たちのララバイ」手掛ける

サンスポから。名曲が多すぎて切りがないですが、やはりこれでしょうか。

若さ 若さってなんだ ふりむかないことさ
愛ってなんだ ためらわないことさ

「時間よ止まれ」の「罪なやつさ ああパシフィック」って全く意味分からないんだけど永ちゃんが歌うとなんかカッコいいのがすごいですよね。

永ちゃんだと「ひき潮」が好きです。