Web API The Good Partsを読んだメモ
発売後すぐ買ったのに積読してた本の一つです・・・(汗
- 作者: 水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/11/21
- メディア: 大型本
- この商品を含むブログ (5件) を見る
URIの設計方法からHTTPやセキュリティについての知識まで網羅した本です。
広く浅く最低限知っておかなければならない事が書かれている感じなので初級者〜中級者向けです。
また実際のWebサービスで使われている実例と合わせて書かれているのでその辺を使う際に役立つかも。
以下は備忘録
l.76 chatty api
おしゃべりなAPI。バックエンドをクライアントに意識させてはいけない。必要最低限のリクエストで済ませるべき。場合によってはSSKDsで同時更新もありかも。
l.83 json injection
jsonはトップレベルに配列を返してはいけない。 scriptタグで読まれる。
l.107 リダイレクト
301(Moved Permanently)が恒久リダイレクト
302(Found)が一時的なリダイレクト
これらはリダイレクト時にメソッドを変更してはいけないのが本来の意(RFC2068)
303(See Other)はGETでリダイレクト
307(Temporary Redirect))は一時的なリダイレクト
308(Permanent Redirect)は恒久的なリダイレクト
307,308はそれぞれメソッドを変更してはいけないという意味で再定義(RFC2616,RFC7238)
l.108 401と403
401(Unauthorized)は認証(アクセス元が識別できるか)のエラー
403(Forbidden)は認可(アクセス権があるか)のエラー
l.114 Dateヘッダ RFC1123
DateヘッダというかHTTPヘッダではRFC1123の日付で返すのがベター
タイムゾーンとしてはGMT以外指定できない
Thu, 04 Oct 2014 23:59:45 GMT
l.116 検証モデル キャッシュ方法と強さ
クライアントはキャッシュが新鮮かどうかを判断するためのリクエスト(If-Modified-Since,If-None-Match)を送る
※サーバーはLast-ModifiedとEtagを返しておく
サーバー側はチェックをして304(Not Modified)か200を返す。
Etagは頭にW/
をつけると弱い検証(意味合いとしては同じ)を行う
l.118 Cach-Control: no-cache
キャッシュをしないという意味ではない
期限切れモデル(Expires)のチェックはしないが検証モデルは利用するとういう意味。
クライアントの日付は正しいとは限らないため期限切れモデルは微妙。
@プロキシサーバーにも残したくない場合はno-store
を使う
l.130 ザーバー駆動型コンテントネゴシエーション(Server Drien Content Negotiation)
URI以外の要素、例えばAccept-Languageによって結果が変わる場合
Vary: Accept-Language
をいれることで言語ごとのキャッシュとなる
l.134 独自ヘッダ
接頭辞にX-
を使えるのが一般的だが自分たちのサービス名をつけている時点で判別できるため不要論がある模様
l.165 Content Sniffering
IEにはContent Typeを無視していい感じに判別してくれるおせっかい機能がありセキュリティ上好ましくない。
IE8以降はX-Content-Type-Options: nosniff
を指定することで機能をオフにできる。
l.165 X-Request-With
Scriptタグでの読み込みやFormタグでの実行が可能になるのをさけるために
X-Requested-With: XMLHttpRequest
を付加していない場合にエラーとするような仕組み
Angularではデフォルトオフ、jQueryはcrossDomainフラグでオフにできる。
これはCORS利用時のプリフライトリクエスト対象になるのを嫌っているため
l.180 CSP
Conent-Security-Policy: default-src 'none'
のように返すことで他のリソースの読み込みを制限することが可能
他にもインラインスクリプトが無効になったりとかいろいろある