SlideShare ist ein Scribd-Unternehmen logo
1 von 37
JavaでHTTPサーバを
実装してみた
2017/4/6
準備等
• 準備する内容
• GoogleChrome のインストール
• java8 のインストール
• maven のインストール
• intelliJ のインストール
• https://github.com/YutoEguma/HTTPServerPractice をgit cloneして
おく
• connpass ページにも記載しています
• https://github.com/YutoEguma/HTTPServerPractice/blob/master/RE
ADME.md
アジェンダ
• 概要
• ServerSocketを使ってみる
• HTTP Request を覗いてみる
• HTTP Response を返してみる
• HTTP Requestに応じてファイルを読み込む
• マルチスレッドにする
概要
今回作成したHTTPサーバの概要
Server
Socket
Socket
HTTP
Request
HTTP
Response
Contents
Loader
Socket
① HTTP リクエストを作成② 通信の
受け口を作成
③リクエストの
読み込み
④リクエストの中身を判断して
ファイルを読み込む
⑤レスポンスの
書き込み
クライアント
サーバ
デモ
• webapp/public 以下にコンテンツを配置
• ブラウザからのHTTPリクエストを解析する
• 解析結果によってHTTPレスポンスを返す
• HTML/CSS,Javascript
• PING,JPEG形式の画像
• HTTPServerPractice の section5/SampleWebServer
を起動
Section1
ServerSocketを使ってみる
• ServerSocketとは「接続を受け付けるもの」
• Socketとは「通信の窓口」
• ServerSocketが接続を受け付けると、サーバとクライ
アント間のやりとりをするためのScketを作成
ServerSocket・Socket
とりあえず書いてみる
今の状態
Server
Socket
Socket
Socket
① HTTP リクエストを作成
② Socket を作成
③リクエストの
読み込み
⑤レスポンスの
書き込み
クライアント
サーバ
ログに出しただけ 適当に文字列を作る
動作確認
• section1/SampleWebServer を起動
• 以下の2つの方法で確認できる
• curlコマンドを実行
• $ curl -i http://localhost:8090
• ブラウザで http://localhost:8090 にアクセス
Section2
HTTP Request を覗いてみる
そもそもHTTPって何?
Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロト
コル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通
信プロトコルである。主としてWorld Wide Webにおいて、Webブラウザと
Webサーバとの間での転送に用いられる。ハイパーテキスト転送プロトコ
ルとも呼ばれる。
引用:Wikipedia
ざっくりとした仕組み
サーバ クライアント
決められた形式の
リクエストメッセージ
決められた形式の
レスポンスメッセージ
HTTP メッセージの形式
• HTTP メッセージの形式
• Start-line の形式
• request-line の形式
HTTP メッセージの形式
• Header-field
….
いや…
よくわからん!!
実例を見よう(section1でのログ)
GET SP /request-target SP HTTP/1.1 CRLF
Host : OWS localhost:8090 OWS
Connection : OWS keep-alive OWS
リクエストのheader-fieldの種類
• 一例がこちら
• http://www.atmarkit.co.jp/fnetwork/rensai/netpro01/he
ader-fields.html
• 数が多い
• 拡張性があるような仕様になっている
• つまり何がくるかわからない
HTTPRequestクラスを作ってみる
• InputStreamをコンストラクタし文字列を取り出す
• クラスに持つ情報
• request-lineの3つの要素
• header-fieldを(Mapで保持)
• すべてのheader-nameを網羅できない
今の状態
Server
Socket
Socket
HTTP
Request Socket
① HTTP リクエストを作成
② Socket を作成
③リクエストの
読み込み
⑤レスポンスの
書き込み
クライアント
サーバ
適当に文字列を作る
ログに出しただけ
Section3
HTTP Response を返してみる
HTTP メッセージの形式 (おさらい + α)
• HTTP メッセージの形式
• Start-line の形式
• status-line の形式
HTTP Status
• Responseの状態を表すもの
• Code と Phrase のペアで管理されてい
• https://triple-underscore.github.io/RFC7231-
ja.html#section-6
HTTP/1.1 SP 200 SP OK CRLF
HTTP/1.1 SP 404 SP NOT_FOUND CRLF
HTTP/1.1 SP 500 SP OK CRLF
HTTP Response の例
レスポンスのheader-fieldの種類
• 一例がこちら
• http://www.atmarkit.co.jp/fnetwork/rensai/netpro01/he
ader-fields.html
• 数が多い
• HTTPの仕様上 拡張性があるような仕様になっている
• つまりその時々で書き出す情報が異なる
HTTPResponseクラスを実装してみる
• HTTPステータスで初期化する
• クラスに持つ情報
• request-lineの3つの要素
• header-field(Mapで保持)
• すべてのheader-nameを網羅できない
• content-type, content-length をとりあえず入れる
• コンテンツ(message-body)
今の状態
Server
Socket
Socket
HTTP
Request
HTTP
Response Socket
① HTTP リクエストを作成
② Socket を作成
③リクエストの
読み込み
⑤レスポンスの
書き込み
クライアント
サーバ
ログに出しただけ 適当に作っただけ
Section4
HTTP Request に応じて
ファイルを読み込む
その前に…
HTTPレスポンスの message-body が
必ず文字列とは限らない!!
コンテンツを文字列で扱うのを諦める…しかない…
コンテンツ系は全部バイナリで扱う
HTTP Response をバイナリにする
• HTTP Response の body をバイト型に
• getResponse をレスポンスをbyte型配列に変換する処
理に変更
• section4-1を参照
ファイル読み込みルールはこんな感じ
• HTTPRequestのrequest-targetのパスにあるものを読み込めば良
い
• 以下の方法ルールで読み込む
• request-targetとファイルの対応
• /hoge/fuga.html
• Project/src/main/resources/public/hoge/fuga.html
• request-targetに拡張子の指定がなければディレクトリとみな
し、index.htmlを探す
• Section4-2 参照
今の状態
Server
Socket
Socket
HTTP
Request
HTTP
Response
Contents
Loader
Socket
① HTTP リクエストを作成
② Socket を作成
③リクエストの
読み込み
④リクエストの中身を判断して
ファイルを読み込む
⑤レスポンスの
書き込み
クライアント
サーバ
Section5
マルチスレッドにする
なぜマルチスレッドにするの?
• 処理の高速化のため
• 1回のレスポンスがとても重いとき、全て待たされる
• 多重リクエストを受け付けるため
• section4-2をとんでもなく遅くしてみるデモ
• とてつもなく重いレスポンスを返す処理のあとに、
軽い接続があった時にどうなるのか?
CreateResponseTaskを書いてみる
• socketのスコープを切り出す
• socketができたら、その上での通信の処理は全て各ス
レッドに任せる
• Section5 参照
以上で簡単なHTTPサーバの
実装は終わりです

Weitere ähnliche Inhalte

Was ist angesagt?

Spiderストレージエンジンのご紹介
Spiderストレージエンジンのご紹介Spiderストレージエンジンのご紹介
Spiderストレージエンジンのご紹介Kentoku
 
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Yoichi Kawasaki
 
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方Recruit Lifestyle Co., Ltd.
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント増田 亨
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)Takeshi Mikami
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAmazon Web Services Japan
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Amazon Web Services Japan
 
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技Yoichi Toyota
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!株式会社クライム
 
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法についてAzure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法についてShinya Yamaguchi
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Preferred Networks
 
JavaScript GIS ライブラリ turf.js 入門
JavaScript GIS ライブラリ turf.js 入門JavaScript GIS ライブラリ turf.js 入門
JavaScript GIS ライブラリ turf.js 入門Takahiro Kamada
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかYusuke Suzuki
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタSatoyuki Tsukano
 

Was ist angesagt? (20)

Spiderストレージエンジンのご紹介
Spiderストレージエンジンのご紹介Spiderストレージエンジンのご紹介
Spiderストレージエンジンのご紹介
 
AWSのNoSQL入門
AWSのNoSQL入門AWSのNoSQL入門
AWSのNoSQL入門
 
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう! Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
 
分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
 
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
 
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法についてAzure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
 
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
 
JavaScript GIS ライブラリ turf.js 入門
JavaScript GIS ライブラリ turf.js 入門JavaScript GIS ライブラリ turf.js 入門
JavaScript GIS ライブラリ turf.js 入門
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
Azure Search 大全
Azure Search 大全Azure Search 大全
Azure Search 大全
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
 

Ähnlich wie Java8でhttpサーバを実装してみた

簡単なHTTPサーバの作成
簡単なHTTPサーバの作成簡単なHTTPサーバの作成
簡単なHTTPサーバの作成Panu Avakul
 
CacheとRailsの簡単まとめ
CacheとRailsの簡単まとめCacheとRailsの簡単まとめ
CacheとRailsの簡単まとめHuy Do
 
Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_studyBeginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_studyikeyat
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Kikunaga Taishi
 
再入門、サーバープッシュ技術
再入門、サーバープッシュ技術再入門、サーバープッシュ技術
再入門、サーバープッシュ技術Shin Sekaryo
 
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会tama200x Kobayashi
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketYu Nobuoka
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要Shumpei Shiraishi
 
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化Shuichi Yukimoto
 
Railsの運用について
Railsの運用についてRailsの運用について
Railsの運用についてYuuki Namikawa
 
HTTP入門
HTTP入門HTTP入門
HTTP入門Sho A
 
HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介tomo_masakura
 
明日から使えるコーディングツール
明日から使えるコーディングツール明日から使えるコーディングツール
明日から使えるコーディングツールTomokazu Kiyohara
 
Share point開発 ファイル受信
Share point開発 ファイル受信Share point開発 ファイル受信
Share point開発 ファイル受信Akihiro Ehara
 
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそうChromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそうmganeko
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streamingmganeko
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 

Ähnlich wie Java8でhttpサーバを実装してみた (20)

簡単なHTTPサーバの作成
簡単なHTTPサーバの作成簡単なHTTPサーバの作成
簡単なHTTPサーバの作成
 
Osoljp201210 oi swift
Osoljp201210 oi swiftOsoljp201210 oi swift
Osoljp201210 oi swift
 
20080524
2008052420080524
20080524
 
CacheとRailsの簡単まとめ
CacheとRailsの簡単まとめCacheとRailsの簡単まとめ
CacheとRailsの簡単まとめ
 
Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_studyBeginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_study
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
 
再入門、サーバープッシュ技術
再入門、サーバープッシュ技術再入門、サーバープッシュ技術
再入門、サーバープッシュ技術
 
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
 
20090328
2009032820090328
20090328
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
 
JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要JavaプログラマのためのWebSocket概要
JavaプログラマのためのWebSocket概要
 
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化nginx + lua + ObjectStorage  ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
 
Railsの運用について
Railsの運用についてRailsの運用について
Railsの運用について
 
HTTP入門
HTTP入門HTTP入門
HTTP入門
 
HTML5 開発環境の紹介
HTML5 開発環境の紹介HTML5 開発環境の紹介
HTML5 開発環境の紹介
 
明日から使えるコーディングツール
明日から使えるコーディングツール明日から使えるコーディングツール
明日から使えるコーディングツール
 
Share point開発 ファイル受信
Share point開発 ファイル受信Share point開発 ファイル受信
Share point開発 ファイル受信
 
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそうChromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそう
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 

Java8でhttpサーバを実装してみた

Hinweis der Redaktion

  1. 全体TODO ・全てのマイルストーンを作成 全体的に
  2. ざっくりとJavaで通信を行うためのプログラムを作って見ましょう
  3. とんでもなくおまじないです
  4. HTTPの説明の内容をもっと深く
  5. 先ほど文字列のやりとりができるようになった でも、自由に文字列をやりとりしていいんですか?っていうとそうじゃない お互いに欲しい情報ってたくさんあって ・クライアントが欲しい情報ってなんだっけ? ・レスポンスで返した方法って ・サーバサイドでちゃんと処理ができたんだっけ? ・etc…etc… でもこれらをサーバもクライアントもめちゃくちゃにしたらコミュニケーションが取れない だから、どんな文字列のやりとりをするのかっていうのをきっちりと決めてあげる
  6. ・HTTP リクエストの形式 ・start-line の形式  ・Method  ・request-target  ・HTTP Version ・header-field の説明  ・こういうヘッダの種類があるよ(要求) http://www.tohoho-web.com/ex/http.htm#headers ・start-lineをもっとよく説明する  ・1行ずつ説明する  ・HOST : みんなの知っているサービスに紐付ける   ・
  7. ・HTTP リクエストの形式 ・start-line の形式  ・Method  ・request-target  ・HTTP Version ・header-field の説明  ・こういうヘッダの種類があるよ(要求) http://www.tohoho-web.com/ex/http.htm#headers ・start-lineをもっとよく説明する  ・1行ずつ説明する  ・HOST : みんなの知っているサービスに紐付ける   ・
  8. ここでコードを見せる
  9. イメージがあまりつかない 一般的な構成 ・
  10. ただし、status-line になっているよ
  11. Content-Type の説明
  12. ・取り合えずmainの中でやる ・Content-Type がおかしなことになれば、文字化けする
  13. 画像、って文字列じゃ扱えない… Section 4-1 にsection 3 のレスポンスの書き込みをバイナリに変換したものを作成しました
  14. 画像、って文字列じゃ扱えない… Section 4-1 にsection 3 のレスポンスの書き込みをバイナリに変換したものを作成しました
  15. 以下が全部同じ http://www.bizreach.co.jp/service http://www.bizreach.co.jp/service/ http://www.bizreach.co.jp/service/index.html
  16. これで section4-2が完成
  17. ・そもそもマルチスレッドってなんだっけ?  ・多重リクエストを受け付けるため  ・レスポンスが重いときにどうする