目次
序章 はじめに
- I.1 なぜWebサーバを作るのか
- I.2 「Webアプリケーション」という不幸
- I.3 対象読者
- I.4 本書の構成
- I.5 本書のサポートページについて
第1章 Webサーバを作る
- 1.1 Webサーバとはそもそも何か
- 1.2 URL―スキーム,ホスト,ドメイン,ポート
- 1.3 TCPサーバ/クライアントを作る
- 1.3.1 TCPとソケット
- 1.3.2 TCPサーバ/クライアントのプログラム
- [補足] C,C#の場合
- 1.3.3 TCPサーバをWebブラウザで叩く
- 1.3.4 TCPクライアントでWebサーバを叩く
- [補足] Apache入れるの面倒なんですけど
- 1.4 HTTP―Hypertext Transfer Protocolについて
- 1.4.1 HTTPとはそもそも何か
- [補足] HTTP/2
- 1.4.2 HTTPステータスコード
- 1.4.3 RFCとは何か
- 1.4.4 画像を表示する―Content-Type
- 1.4.5 Apacheのアクセスログを見る
- [補足] なぜIEのユーザエージェントが「Mozilla」なのか?
- 1.5 Webサーバを作る
- 1.5.1 Webサーバは何を返せばよいのか
- 1.5.2 レスポンスヘッダを取捨選択する
- 1.5.3 1つのHTMLファイルを返す
- [補足] ディレクトリトラバーサル脆弱性
- 1.5.4 普通にWebページを表示できるようにする
- [補足] 1つのサーバ側のポート番号で,複数の通信を行う
第2章 Webサーバを完成させる
- 2.1 この章で扱うこと
- 2.2 「404 Not Found」を返す
- 2.3 ディレクトリトラバーサル脆弱性に対応する
- 2.4 ディレクトリを指定した場合―リダイレクト
- [補足] URLの末尾のスラッシュはいるの? いらないの?
- 2.5 URLエンコードに対応する
- [補足] クエリストリング部分の文字コード
- [補足] JavaのURLDecoder.decode()がたいへんにタコである話
- 2.6 Modoki/0.2のソースコード
第3章 へなちょこサーブレットコンテナ「Henacat」を作る
- 3.1 Webアプリケーションとはそもそも何か
- 3.1.1 Webアプリケーションの基本的な動き
- [補足] 静的コンテンツ/動的コンテンツ
- 3.1.2 GETのパラメタ―クエリストリング
- 3.1.3 POSTメソッド
- 3.2 POSTを受け付ける
- 3.2.1 HTMLの<form>要素
- 3.2.2 POSTで何が送られてくるのか
- [補足] 1ページに複数のボタンを配置したい
- 3.2.3 multipart/form-data
- [補足] ファイルのパスをサーバに送って良いのか
- [補足] フォームの内容の復元について
- 3.3 サーブレットとは何か
- 3.3.1 サーブレットとは
- [補足] サーブレットのインスタンスは1つだけ生成される
- 3.3.2 Tomcatをインストールする
- 3.3.3 Tomcatで掲示板を作る
- [補足] POSTのあと,リロードすると
- 3.3.4 JSPとは何か
- 3.4 Henacat ver.0.1を作る
- 3.4.1 Henacat ver.0.1で実装するサーブレットAPI
- 3.4.2 Henacat ver.0.1の実装
- [補足] 302 Foundによるリダイレクト
- [補足] Tomcat 5以降でsetCharacterEncoding()の仕様が変わった話
- 3.4.3 Henacat ver.0.1で掲示板を動かす
第4章 Cookieに対応する
- 4.1 Cookieとは
- [補足] Cookieの容量制限
- 4.2 クライアント側で発行するCookie
- 4.3 Cookieの仕様
- 4.4 TomcatでCookieを発行する
- 4.5 Henacatに追加するメソッド
- 4.6 Henacatにおける実装
- 4.6.1 Cookieクラス
- 4.6.2 Cookieの受信
- 4.6.3 Cookieの送信
- 4.6.4 ServletServiceクラス
- 4.6.5 SendResponseクラス
- 4.7 Henacat ver.0.2でCookieを発行する
- [補足] Cookieの日付形式について
第5章 セッションに対応する
- 5.1 セッションとは
- [補足] Webサーバがたくさんある場合
- [補足] セッションをCookie以外で実現する方法
- 5.2 Tomcatでセッションを使ってみる
- 5.3 Henacatに追加するメソッド
- 5.4 Henacatにおける実装
- 5.4.1 HttpSessionImplクラス
- 5.4.2 SessionManagerクラス
- 5.4.3 SessionIdGeneratorクラス
- 5.4.4 HttpServletRequestImplクラス
- 5.4.5 Henacatでセッションを使ってみる
第6章 Webアプリ開発に必要なその他の知識
- 6.1 この章で扱うこと
- 6.2 OSI 参照モデル
- 6.2.1 OSI参照モデルとは
- 6.2.2 インターネット・プロトコル・スイート
- [補足] DNS
- 6.3 プロキシサーバ
- 6.3.1 プロキシサーバとは
- [補足] IPアドレス枯渇問題
- 6.3.2 プロキシサーバの動きを確認する
- 6.3.3 リバースプロキシ
- [補足] X-Forwarded-For
- 6.4 SSL(TLS)
- 6.4.1 SSL(TLS)とは
- 6.4.2 公開鍵暗号
- 6.4.3 サーバ証明書
- [補足] オレオレ証明書
- [補足] プロキシサーバのログにはSSLによる通信の内容が残るのか
- 6.5 認証
- 6.5.1 Basic認証
- 6.5.2 Digest認証
- 6.5.3 パスワードとハッシュ
- 6.5.4 フォーム認証
- 6.6 クライアントサイドの技術
- 6.6.1 JavaScriptによるDOMの操作
- 6.6.2 DOMを見てみる
- [補足] ノードとエレメント
- [補足] JavaScriptの実行タイミングについて
- 6.6.3 DOMを操作する
- 6.6.4 Ajax
- 6.7 セキュリティ
- 6.7.1 同一オリジンポリシー
- [補足] JSONP
- 6.7.2 クロスサイトスクリプティング
- [補足] 反射型,格納型,DOM Based
- 6.7.3 SQLインジェクション
- 6.7.4 HTMLやSQLのエスケープは「使用する直前」に行う
- 6.7.5 Webビーコン
第7章 TIPS
- 7.1 この章で扱うこと
- 7.2 ファイルをアップロードする
- 7.3 画像を動的に生成する
- 7.4 ファイルをダウンロードさせる(サーバ側)
- 7.5 ファイルをダウンロードする(クライアント側)
- [補足] 分割ダウンロード
- 7.6 Web APIを呼び出す
付録 Henacatの全ソースコード
- A.1 Henacat ver.0.4全ソースコード
- A.1.1 コンパイルと実行
- A.1.2 com.kmaebashi.henacat.webserverパッケージ
- A.1.3 com.kmaebashi.henacat.servletパッケージ
- A.1.4 com.kmaebashi.henacat.servlet.httpパッケージ
- A.1.5 com.kmaebashi.henacat.servletimplパッケージ
- A.1.6 com.kmaebashi.henacat.utilパッケージ