HTTP1.1のLocationヘッダは、絶対URLでないとRFC違反

Posted on

さきゅばす2のバグ対処で知ったお話です。とりあえず、HTTPの基礎知識はあることを前提にします。

さきゅばす2では、公式動画のDLがどうしても出来ませんでした。こんなエラーが出ちゃうんです。

[E][    PyBridgeImpl] Python says:
(略)
HTTPError: HTTP Error 302: Found - Redirection to url '/watch/1339405721' is not allowed

どうやらリダイレクションの段階で問題が発生してるみたいですねぇ。

HTTPでのリダイレクション

とあるページにアクセスした時に他のページにジャンプしなおさせる「リダイレクション」ですが、このリダレクションはHTTPはレスポンスヘッダで301,302,303,307のレスポンスコードを返した上で、Locationヘッダを設定することで実現しています。

どこかのページのレスポンスヘッダで、

Location: http://www.google.com/

こういうふうなヘッダを返すと、そのページにアクセスした人がGoogleに無条件で飛ばされるわけですね。

で、ニコニコ動画のリダイレクションでは、

Location: /watch/1339405721

となっていて、http://www.nicovideo.jp/watch/1339405721 にジャンプするようになっていました。うーん、特に問題なさそう。

Locationヘッダは絶対パスしか認められない。

…ところがどっこい、実はLocationヘッダのURLは絶対パスしか認められないのです。RFC見ましょうか。

Location       = "Location" ":" absoluteURI

で、このabsoluteURIはRFC2396: Uniform Resource Identifiers (URI): Generic Syntaxで定義されておりまして、

absoluteURI   = scheme ":" ( hier_part | opaque_part )

ということで、URIスキーム(httpとかftpとか)から始まる絶対URIであることがわかります。

とはいえ、色々調べてみると、携帯とか一部のブラウザを除くと大体相対パスでも動くそうで、絶対URIを作成時に予測するのが難しい、他人に配布するスクリプトなどでは相対パスで指定していることが多いそうです。

 

ニコニコ動画の場合は絶対URIでも良いと思うのですが今回は相対パスで指定されていて、ふつうのブラウザなどではこれで意図通りに動くのですが、さきゅばす2のPythonでは最近のバージョンまで相対パスに対応していなかったため問題になったようです。で、最新のバージョンでは相対パスに対応しているので、配布バイナリを最新バージョンに差し替えることにしました。

で、ほかのヘッダではどうなってるの?

HTTPのヘッダには、ほかにもいくつかパスを指定できるものがありましたよね。いくつか調べてみました。

Request-URI

リクエストURIは、GET ****** HTTP/1.1みたいな形式で指定されるときの、あのURIです。

Request-URI    = "*" | absoluteURI | abs_path | authority

なんと…。実は絶対URI指定でも良いのですね。たまに絶対URIでのリクエストがこのサーバに飛んでくるのですが、てっきり不正なリクエストなんだと思ってました。…とはいえ、ほとんどのクライアントは絶対パスで取得するのがふつうなので、ちょっと警戒すべきだとは思いますけど…。

 

Content-Location:

Locationと似てますが別物です。リクエストされたコンテンツが別のところからも取得可能な時に使われる…そうですが、実際使われてるのを見たことがありません…。だれか教えて(ぇ

Content-Location = "Content-Location" ":"
( absoluteURI | relativeURI )

こっちは相対URIも可能です。同じサーバであることが自然だからなのかなあ。

Referer

リファラです。ほかのページのリンクなどをたどって来たことを示すわけですが…

Referer        = "Referer" ":" ( absoluteURI | relativeURI )

なんと!これも相対URIはOKでした。とはいえ、世の中のクライアントは大体絶対URIじゃないでしょうか?

以上です。たまにはRFC読んでみると意外な発見がいろいろありますね。

追記:RFC7321では相対URLが認められている

その後2012に出たRFC7231では相対URLもOKになりました。以下、引用です:

7.1.2. Location

   The "Location" header field is used in some responses to refer to a
   specific resource in relation to the response.  The type of
   relationship is defined by the combination of request method and
   status code semantics.

     Location = URI-reference

   The field value consists of a single URI-reference.  When it has the
   form of a relative reference ([RFC3986], Section 4.2), the final
   value is computed by resolving it against the effective request URI
   ([RFC3986], Section 5).

   For 201 (Created) responses, the Location value refers to the primary
   resource created by the request.  For 3xx (Redirection) responses,
   the Location value refers to the preferred target resource for
   automatically redirecting the request.

   If the Location value provided in a 3xx (Redirection) response does
   not have a fragment component, a user agent MUST process the
   redirection as if the value inherits the fragment component of the
   URI reference used to generate the request target (i.e., the
   redirection inherits the original reference's fragment, if any).

   For example, a GET request generated for the URI reference
   "http://www.example.org/~tim" might result in a 303 (See Other)
   response containing the header field:

     Location: /People.html#tim

   which suggests that the user agent redirect to
   "http://www.example.org/People.html#tim"

Twitterで住所がバレる!?「Twitter住所特定実験」

Posted on

なにやら物騒なタイトルで。たまにはタイトル一本釣り。

リア充の皆様。AndroidにiPhoneといったスマートフォンを活用してリアルを充実させていらっしゃることと存じます。今回、私どもは、皆様のスマートフォンからTwitterへ送信することができる位置情報から、住所を特定できるのでは無いか、というありがちだけど実際検証した人は居ない†1仮説に基づき、実際にそれを行えるのかどうかやってみました。

今回開発したアプリでは、過去のツイートのうち、位置情報を持っている物を抜き出してGoogleMaps上に配置します。このアプリでは自分の位置情報のみを取得するようにしていますが、誰でも取得できる情報です。

実例と結果

こちらからアクセスしてください。

使い方も解説します。

20110626_01.jpg

この画面で「Twitter経由でログインする!」をクリックすると、このようにOAuthの認証画面が現れます。ログインを押して続行できます。

20110626_02.jpg

ログインに成功すると、このような画面になりますので、「ロード」を押してツイートの読み込みを開始してください。

20110626_03.jpg

うまく読み込むと、こんな感じで地図上にマッピングされます。このψ(プサイ)という人は関東から…出ていないようです…w

20110626_04.jpg

ズームしていくと…つくばエクスプレスユーザーだと一目で分かってしまいますーー;;

20110626_05.jpg

自宅周辺では、たくさんのピンが立っているのが特徴なのはもちろん、こういった自宅でしてるっぽいツイートがあるのも特徴です。

住所を特定するコツ

単に位置情報だけでは通勤・通学で使う駅等で呟いてることが案外多かたりで、それだけで住所まで絞り込むのは難しいです。

ですので、発言内容も手がかりにしてみてください。住所だけじゃなくてよく使うレストランとかも特定できます←父親のアカウントで検証済み、こがねちゃん弁当乙

色々と生活パターンが分かって怖い…^^;こち亀でGPSの大きな装置を背負って生活してもらう!なんて話が100巻~120巻くらいにありましたけど、それが現実になってるんだな~、って感じです。もちろん、背負わなきゃいけないほど大きな装置ではありあませんが。

住所が第三者からでも特定できちゃいそう!どうすれば?

Twitterの設定画面から、あなたの位置情報をすべて消すことができます。

20110626_twitter-acount-settings.jpg

書かれている通り、大体30分くらい時間が必要なようです。何か怖いと感じたら消してしまって良いと思います。

そもそも

位置情報って活用されてるんでしょうか?私はなんとな~くiPhoneの時は毎回入れていましたけど、冷静に考えるとあんまりいらない機能である気がして仕方がありません…w

政情不安とか地震とかの超リアルタイム緊急時だったら案外活用されてるのかな。

その他

sessionでOAuth用のtokenの受け渡しとかが出来るのが便利~。やっぱりフレームワーク使うとサクサクできていいですね~。

  • †1: Google先生調べ

東大ニコ研が23日11時からZUNさんの講演会を生放送するお!

Posted on

 東京大学は駒場祭真っ最中なう!

 本日、午前11時より東大でまるきゅう(東方のダンス踊る人たち)主催による、ZUNさんの講演会が行われます!

 私の所属している東大ニコ研では、この中継を生放送します!!いろいろと面白いお話が聞けそうなので、ぜひ聞いてみてくださいね!

五月祭の東方ダンスを、今度は実況中継!

 五月祭で好評だった本講演会主催のまるきゅうによる東方ダンスが、駒場祭でも行われます!最高学府の⑨な人たちによるダンスもぜひ見てゆっくりしていってね。

五月祭の模様

今日の放送

で、あんた何やってるの?

 上記の放送と前後の準備時間以外は、五号館三階、531教室の半分がニコニコ動画研究会で延々と生放送します!

 私は東大の本屋さんでもベストセラーとなったライトノベル僕は友達が少ないに登場する「エア友達」の作り方を、現役エリートぼっち東大生ψ(プサイ)がgdgdと伝授します!

 リア充でもこのご時世、エア友達は必須です!ぜひ作り方を覚えて帰って行ってね。

 ちなみに百合柄の浴衣着てるのでよろしく。今回はちゃんと化粧するよ!そんなんやってるから友達できないんじゃ…。

明日(8/2)東大ニコ研でニコ生!&公式サイト

Posted on

 東大ニコ研の公式サイトが出来ました。こちら。

 8/2の20:00に東大ニコ研で生放送を行うことが決定しました!!私もそのうちの一人として参加するので、ぜひ見てね。まずは、ユーザー生放送からはじめる、という形に落ち着きました( gdgdだと思うけどみんな見てね!!

Twitter(とぅいらー)始めました

Posted on

 なんか、こう色々と諸方面から圧力が掛かってきたのでtwitter始めました(

 サイドバーにも表示してあります。たぶんあんま面白いことはつぶやけませんのであしからず。

 idは”tikal”です。フォローとかはいくらでもどうぞ。

 なんかここ12時間くらいでフォローが6人増えたと思ったらプログラミング&セキュリティキャンプ参加者の方でしたか!ローカルルールとかさっぱり分からんのだけど大丈夫かしら(

東京大学ニコニコ動画研究会で東大ちゃんねるを開設(予定)

Posted on

 誰だよ大学は暇だの幼稚園だの言った奴は!!浪人してた時より忙しいぞwwwwww

 ニコニコ動画研究会っていうまだメンバーがリアルに顔会わせして今日で一週間のサークルに入ってるんですが、その関係で一つ告知があります。

ニワンゴの杉本誠司社長にお会いしました

 メンバーのつてでニワンゴの杉本誠司社長からお話を戴きまして、ニコニコ動画のチャンネルの一つとして、「東大ちゃんねる」を作らないか、という事になりました。動画の配信のほか、生放送を行う予定です。

 明日・明後日の五月祭では時間が無いため生中継は行いませんが、1~2ヶ月以内には企画を立てて、動画配信や生放送を行おうと考えています。

 昨日杉本誠司社長とお会いして、今後の方針のほか、参考になるお話を色々とさせていただきました。その場で上がった事についてとても適切な例を瞬時に上げられたり等、とても頭の切れる方で圧倒されました…。

メンバー募集中

 というわけで、ニコニコ動画研究会ではメンバーや協力してくれる方を募集中です。

  • 生中継の企画をしたい人
  • 生中継に興味がある人
  • ウェブサイトのデザイン等に興味がある人
  • その他詳しい話を聞きたい人

 は、私のメールアドレス、psi<ぁっとまーく>science.mi.toか、代表(ゲンシュン)のメールアドレスnikochu_otsu<あっとまあく>yahoo.co.jp†1までご連絡ください。

 注意です。これは1ユーザとして行う単なる遊びではなく、ある種のビジネスです。会社側からの手厳しい駄目出しもあるでしょう。「生放送でてえwwww」といった安易な気分で入ると後悔するかもしれません。本気でやっていける方を募集しています。

と、こうして

 さきゅばすの開発は遅れていくのであった。

 実を言うと、サークルを一個立ち上げた(えっ)のですが、それはおいおい。

  • †1: ひどいメールアドレスだww

Webサービス「UFO大好き霊子さん」をリリースします。

Posted on

霊子さん完全復活のお知らせ

 お久しぶりです。遅いですが、あけましておめでとうございます。

 ψ(プサイ)です。センターも一週間後に押し迫ってますねー。

 さてそんな中ですが、久しぶりの更新として、Webサービスの公開をしようと思います。

20090110-01.pngのサムネール画像

 「UFO大好き霊子さん」は、その名の通り(?)、UFOや心霊、廃墟や超心理学に関する場所を登録、共有しちゃうサービスです。ストリートビューにも対応しており、ストリートビューの心霊写真なんかも共有できます。

 従来、こういったオカルトスポットはBlog等で探せましたが、具体的な座標まで書いてある所は少なく、実際に行こうとすると大変です。このサービスでは具体的な座標まで分かるため、気に病まなければならない要素が一つ減ります。

 また、お近くの心霊スポットも分かりますので、お試しください。(といっても、まだ二十数件しか登録してないけど)

みんなの力をオラに!!

 この「UFO大好き霊子さん」には、まだまだオカルトスポットの情報が足りません。ぜひ、皆さんの持っている知識や体験談、目撃談をお寄せください。

 また、個別のスポットには写真も投稿できます。もしもどこかのスポットへ行った時は、心霊写真でもそうでなくてもぜひ投稿して下さいね。

謝辞

 id:amachang氏のScript.aculo.us拡張にお世話になりました。ありがとうございました。

言い訳

 Railsで作ってるんですが、息抜きにいいですよー。MVCモデルのおかげで開発工程も分割しやすく、一日短時間で作れます。

 まあ他にも理由はあって、「高校生」のうちに一個ぐらい作っておいて、実績を作っておきたかったってのはあります。将来どうなるか分からないし。

 ネット上を調べましたが、3人で作ったのはありましたが、一人で作ったのはこれが初めて…!?

 実はもう一個作ってあるんですが、見合わせてます。というのも、メールの受信処理を多用するWebアプリなんですが、そのメール受信処理がどうも重いので…。

アニメ…

まったく同じシステムを使って「アニメ聖地共有サイト」を作れることに気がついた。どうしよう…。コピーしてトップページ+αを書き換えるだけじゃん。

考えておきます。

さきゅばす

 開発していません…が、開発が終了した訳ではありません。いつの日か。mp4に関してはマジでどうにかした方がいいきがす。

「2chトリップ生成システム」を作ったよ

Posted on

 2chのトリップを検索するソフト、つまり「特定の文字列が含まれるトリップを検索してくれるソフト」はあるんですが、普通に「トリップキーからトリップを生成してくれるソフト」が無かったので作りました。需要無いから無いんだろうなあ…。

 前自分が使ってたと思うトリップを検索してみたら、数学板で使われてた。自分が書いたのか、それとも赤の他人か…。

 トリップ生成アルゴリズムに関しては、Wikipediaの情報を参考にしました。あと、文字コードはすべてShift_JISで処理するとうまくいきます。

 「適当にトリップ生成->検索」が面白いwwww

 「test」とか適当なトリップキーを使ってる人も結構居るんですね…。

 もうmod_rubyでの作り方なんて忘れてましたよ。前書いたCMSのソースがあったから良かったものの…。そんな状況から始めて、製作時間およそ1時間。おっせー。

 mod_rubyなのですが、PHPみたく$_GET[‘key’]で値を取得できないのが面倒ですね。それぐらいはシステム備え付けで良いと思うんだけどな…。ruby on railsですか?さすがにこの程度のプログラムでそれは重過ぎる…。

 WikipediaのURLに(や)や_が含まれているとどうもうまくリンク貼れないみたいです…。なんだろう?「はてな」記法用のモジュールのバグかな…。とりあえず全部エンコードしておけば貼れるみたいですが。

「さきゅばす」 ver1.22リリースしました

Posted on

 GPLにしたので、とりあえずGPLなリリースをしとこうかな、と。

 さすがに、そろそろ開発降りたいんだぜ。あとはフロントエンド更新するだけです。

「さきゅばす」の公式サイトは移動しました

 こちらに移動しました。

バージョンアップ通告について

 ここでバージョンアップを通告するのはあと何回も無いと思ってください。

 その代わり、リリースページのRSSを取得するようにしてください。

ソフトの概要

 ニコニコ動画の動画を、コメント付きの動画として保存します。従来は「カハマルカの瞳」などのキャプチャソフトを使うのが定石でしたが、この方式では高いスペックのPCを要求し、フレームレートも低くなりがちです。

 このソフトはそうした弱点を克服し、低スペックなPCでもコマ落ちなしで綺麗に変換することが出来ます。

 変換にはffmpegを用い、iPodやPSP向けのmp4動画などを作成することも可能です。

ダウンロード

 こちらの公式サイトよりお願いします。

リリースメモ

 GPLになってはじめてのリリースです。このバージョンより、ソースも同時配布となります。

 ユーザ側から見ると、今回は前回とあまり変更はありません。せいぜいFFmpegが新しくなったことぐらいでしょうか。

更新履歴

  • 同梱のFFmpegを新しくしました。
  • ニコニコ動画の仕様変更への対応
  • バグの修正
  • FFmpegの変更にともなう各種修正
  • オープンソース以降に伴うUIその他もろもろの変更。

スクリーンショット

20080418-01.png

 チャージ三回、フリーエントリー、ノーオプションバトル!!

 というわけで、カブトボーグ見ました。狂気そのものだなwww

 毎回でてくる使い捨てヒロインがかなりかわいいのも良いですね。個人的にはシルクハット被ってる子が一番好みでした。シルクハットいいよねー!!

 であと某「Fateは文学」テンプレート的には「カブトボーグVxVはポストモダニズム」らしいよwwなんでww

 ソーカル事件から「でたらめ」ってことかな?

Fateは文学           狼と香辛料は経済
Airは芸術            なのはは友情
CLANNADは人生       こじかは葛藤
リトバスは筋肉          極上生徒会はモラトリアム
鳥の詩は国歌         ハルヒは感性
SchoolDaysは神話      ARIAは現実
君が望む永遠は哲学     すももは楽園
攻殻は政治            Myself;Yourselfは月9
うたわれるものは日本史A  アイマスはわが娘
ひぐらしは論理学       初音ミクは真実の光
EVAは聖典           00は教科書
神霊狩は音楽          true tearsは真実
Kanonは奇跡          H2Oは格差社会
ゼロの使い魔は国旗     D.C.~ダ・カーポ~は純愛
ムリョウは日常         efは旋律
まなびストレートは青春   みなみけは食事
砂糖菓子の弾丸は撃ちぬけないは社会派ミステリ
落語天女おゆいは伝統芸能  カブトボーグV×Vはポストモダニズム
らき☆すたは日常       シャニティアは英雄憚 
バンブーブレードは竹刀   シゴフミはキラメキ

まだ再現できてない点

  • 静止画だけの動画でたまにガクガクになる。ffmpeg本体に手を入れないとだめっぽい。しかも大手術・・・。
    • libavfilterのFPSフィルタでどうにかなる?

「さきゅばす」オープンソース化!

Posted on

 というわけで、ついにGPLで公開することにしました。

SourceForgeのプロジェクトになりました。

 次のバージョンまでの開発はこちらで行い、後は基本的に放置します。引き継いでくれる方がいらしたら公式ウェブサイトに詳しく書いてありますのでご覧ください。

ソースコードを公表しています。

 ffmpegの拡張部分のソースが飛んだため(えー)、コンパイルして元の環境を再現することは出来ませんが、現在の1.21のそれ以外の部分のソースコードを公開しています。

 次のバージョン以降はまた別の方法でffmpegを拡張するので、現在のvhookライブラリのソースを元に何かするのはあまり得策とはいえません。ご了承ください。

誰でも編集できる領域もあります。

 公式サイトはWikiで構築しています。基本的にはプロジェクトのメンバーしか更新できませんが、ページ名が「Users/」で始まる領域は誰でも編集する事ができます。

 ドキュメンテーションやユーザ間の相互互助などにご利用ください。

掲示板について

 Wikiでどうにかなる気がするので、そっちに移行します。SPAMが最近うざいし…。

 過去ログを見られるようにはします。

アップローダについて

 次バージョンより、ffmpegは更新されます。その際、オプションファイルの書き方などが一部異なるのですが、その関係でアップローダのファイルは一回すべて削除させていただきます。

 大丈夫です、すでにアップロードされている分は私が修正して次バージョンのデフォルトに入れます^^;