anti scroll

ブラウザと小説の新しい関係を模索する

nethttpd XmlHttpRequest クロスドメインなど

 負荷の高いサービスは、apache2 + fastcgi(なんか不安定) ではなく、直接処理させたらよいのではないかと思い、nethttpd を使ってデーモン化したのですが、例によってすんなりとはいかなかったので、色々とメモしておきます。

 まず、サンプルソースがコンパイル失敗するので、下の赤い部分を付け足す必要アリ。

let config : http_reactor_config =
 object
 (中略)
 method config_announce_server = `Ignore
end 

 でもってデーモンを作ったまではいいんですが、javascript から、XmlHttpRequest をこのデーモンに飛ばしても返事が返ってこない。URL直打ちでGETする分には問題ないのに。あれー、と思ってIEとOperaで同じことをやったら、そっちはうまくいった。どうやらFirefox に特有の現象らしい。

 そこで firebugデバッグしてみたら、

Permission denied to call method XMLHttpRequest.open

 と出ていた。

 あれ?これって、クロスドメインでXHRすることを許可しない、とかいうエラーじゃなかったけ?

http://hogehoge.com と、
http://hogehoge.com:8888

 は明らかにクロスドメインじゃないですよね。え、俺が間違ってます?これもクロスドメインなの?よーするに

http://hogehoge.com/ からダウンロードしたjavascript が、
http://hogehoge.com/aaa.xml とリクエストしても問題ないが、
http://hogehoge.com:8888/aaa.xml とリクエストすると、

hogehoge.com ≠ hogehoge.com:8888

 となって、クロスドメインのXHRだからアウトってことですよ?

 うーん。

 まあ普通80番からダウンロードしたスクリプトが、別ポートにXHRすることは考えにくいから、これも含めてセキュリティとして正しいという認識なのかもしれませんね・・・。過去に誰かがこの仕様を使って悪さをしたのかもしれませんし。

 ・・・となると。

 Firefoxの場合だけ、従来どおりapacheに相手をさせるようにしてしまおうか(駄目)。

 でも7割ぐらいはIEからのアクセスだから、これで7割は問題が解決されるってことか(もっと駄目)。

 となると、apache 棄てて、全部同じポートでサービス提供しないといけないわけですが、となるとOsigen という選択肢が浮かんでくる・・・

 でも早速、ダウンロードしてインストールしようとするも、ocaml-ssl がないと駄目とかいわれ、取ってきたが make でいきなりずっこける。

 ファーック!

 面倒くさいdeath!!

 一個一個手でビルドしろってか・・・。また明日にでもやろう。