開発初心者の開発日記~15日目~

内容

  • AtCoderでのアウトプット
    • 180 分程度
    • 合計で4問解いた、UnionFindのライブラリも作った
    • 参考1参考2
  • Webを支える技術でのインプット
    • 60分程度
    • 4.2途中(43ページ)から5.1(53ページ)まで

Webを支える技術のメモ

第4章:URIの仕様

4.2 URIの構文

  • 複雑なURIの例
    • http://yohei:pass@bloh.example.jp:8000/search?q=test&debug=true#n10
      • URIスキーム:http
      • ユーザー情報:yohei:pass
        • リソースにアクセスする際のユーザ名とパスワード(:で区切る)
        • ホスト名との間は@で区切る
      • ホスト名:blog.example.jp
      • ポート番号:8000
      • パス:/search
        • クエリパラメータとの間は?で区切る
      • クエリパラメータ:q=test&debug=true
        • 複数あるときは&で繋ぐ
        • クライアントから動的にURIを生成するときに利用する
      • URIフラグメント:#n10
        • この前までのURIが指し示すリソース内部のさらに細かい部分を指定するときに利用する
        • この場合は、id属性が「n10」の要素を示す

4.3 絶対URIと相対URI

  • URIのパス
  • ベースURI
    • 相対URIではクライアント側で解釈ができない
    • 起点となるURIを示すのがベースURI
    • e.g.) ベースURIhttp://example.jp/foo/barであるときは下記の対応関係
      • hoge/fugahttp://example.jp/foo/bar/hoge/fuga
      • /hoge/fugahttp://example.jp/hoge/fuga
        • /で始まる場合はホスト名からのパスとして解釈
      • ?q=fugahttp://example.jp/foo/bar?q=fuga#hogehttp://example.jp/foo/bar#hoge
        • クエリパラメータやURIフラグメントも可能
      • では、ベースURIどのように与えられるのが一般的か?
  • リソースのURIをベースURIとする方法
    • 相対URIが出現するリソースのURIをベースURIとする
    • ベースURIの情報をクライアント側で保存する必要がある
    • つまり、HTMLファイルとして保存する場合などのこの相対URIを解決できなくなる
  • ベースURIを明示的に指定する方法
    • HTMLやXMLなどの中で明示的にベースURIを指定する方法
    • HTMLでは、要素の中に要素を入れておく
    • XMLでは、xml:base属性を指定することで、どの要素に対してもベースURIを指定することが可能

4.4 URIと文字

  • URIで使用できる文字
    • アルファベット、数字、記号(-.~:@!$&'())
    • 日本語の文字は直接入れられず、%エンコーディングを用いる
  • %エンコーディング
    • モダンなブラウザではアドレス欄に次のようにURIが表示される
    • http://ja.wikipedia.org/wiki/あ
    • 実際には次の文字列に展開されてブラウザとサーバの間で転送される
    • http://ja.wikipedia.org/wiki/%E3%81%82
    • UTF-8に基づいてそれぞれの文字を%xxとして記述(xxは16進数)
    • また、「%」はURIに直接使えないことにも注意
  • %エンコーディングの文字エンコーディング
    • UTF-8以外でエンコーディングされている場合もある(Shift_JIDやEUC-JPなど)
    • サーバが提供するURIの場合は%エンコードされているので問題ない
    • クライアントがフォームに入力するなどしてURIを生成した場合は問題が起こる
    • UTF-8を使っておけば基本的には問題がない
  • URIの長さ制限
    • 使用上はないが、実装上は制限が存在し、ieでは2038バイト
  • 様々なスキーム
    • URIスキームとは:リソースへ到達するための手段を表すもの
    • URIスキームとして一般的なのは、HTTPに対応したhttp
    • 様々なプロトコルに対して数々のURIスキームが作られてきた
    • 従来にないプロトコルを作った際に新しいURIスキームを登録する
  • URIの実装で気をつけること

コラム:URIとURLとURN

  • URL、URNとは?
    • URI(Uniform Resource Identifer)とは、URLとURNの総称
    • リソースを識別するための規約の総称
    • URL(Uniform Resource Locator)
      • インターネット上でWebページなどの場所を一意に指定するための規約
      • ドメインの更新をしなかったりサーバを変更したりするとアクセスできなくなるという問題
    • URN(Uniform Resource Name)
      • リソースに対しての恒久的なIDを名前として振るためのドメイン名に依存しない規約
      • e.g.) 書籍におけるISBN:urn:isbn:数字
  • URNがWeb上で普及していない理由
    • (1)URNは取得出来ない
      • サーバ名やプロトコル名を含んでおらず、URIとしてリソースを取得することができない
    • (2)URLが十分に永続的になっている
      • Webの浸透により、リソースとURLはなるべく永続的になるようになっている

第5章:URIの設計

5.1 クールなURIは変わらない

  • Cool URIs don't change
    • 良いURIのことを「クールURI」と呼ぶ習慣の発祥となったWebページ
    • 当時はURIが変更になることは日常茶飯事
      • e.g.) ブックマークからお気に入りのWebサイトが消える
      • e.g.) 作成したリンク集のほとんどがリンク切れ
      • e.g.) 検索エンジンの検索結果のページが見つからない
    • ハイパーメディアシステムであるWebはリンクが非常に重要であり、"変わらないURI"が最上であることをこの言葉は表す