Help us understand the problem. What is going on with this article?

HTTPって結局なんなのか(HTTPのリクエストやレスポンスはTCP的にどう通信しているかっていう話)

More than 1 year has passed since last update.

HTTPって結局なんなのか

HTTPとは

プロトコルです。っていう答えが返ってくると思うのですが、、
リクエスト、レスポンスがあって、ヘッダがあって、ボディがあって、、まー、そういうのは知ってるんだけど通信的にどういうものなのかっていうところ。

答え

ただのTCPの電文です。

通信相手(HTTPサーバ)と接続した後にやりとりするTCPの電文を特定のフォーマット(HTTP)で送信(HTTPリクエスト)すると、相手がその内容に対応した応答(HTTPレスポンス)の電文を返している、っていうだけの話。

試してみる

試してみましょう。qiita.comの80番ポートに接続して手動で電文を送ってみます。

TCP通信するクライアントとして、teratermを使います。
※linux使ってる人はncコマンドで良いと思います。
※teratermをTCPクライアントとして使うのは↓の解説が分かりやすいです。
http://docs.olab.org/resource/teraterm.pdf

teratermでの接続時設定
キャプチャ.PNG

接続完了してもteraterm側で特に反応はないので、繋がっていると信じてそのまま↓の電文を手打ちで入力(=HTTPリクエスト)します。

GET / HTTP/1.1
Host: qiita.com
[空改行]

https://qiita.com へリダイレクトさせるための応答電文(=HTTPレスポンス)が返ってくるはず。
ここまでの一連の操作で、http://qiita.com:80 にGETのリクエストを投げてる、のとイコールになります。

ちなみにHTTPを無視した適当な電文を送信すると、400 BadRequest が返ってきます。
80ポートで接続待ちしているのはHTTPサーバなわけで、HTTPに従ってない電文が来ても処理できないって事ですね。

つまり

GETだろうがPOSTだろうが、ファイルのアップロードだろうが、何なんだろうが、TCPの電文のやりとりをしているだけなのですね。
ということで、以上でした。

余談

考えを広げてみると、自分で独自に電文のフォーマットを規定して、その電文が来た時にパースして何かするようなものを作れば、独自プロトコルも自由に作れるってことですね。

k_hoso
記事のまとめは↓のサイトリンクから。 とりあえずevernoteにまとめていた備忘録メモを徐々にQiitaに転載していく感じ。ネタとしてひとまとめにしているものはちゃんと個別の記事にしていきたい、いつか。。ざくっとした記事もちゃんとした記事にできればいいけど、それもいつか。。 ※↓のリンクはQiita記事の目次
https://qiita.com/k_hoso/private/3c883802aa6baf9a6269
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした