記事のディレクトリ
HTTP
http
フロントエンドおよびバックエンドと対話するときの転送プロトコル(ハイパーテキスト転送プロトコル)です
HTTPワークフロー
- サーバーとのリンクを確立する
- リンクを確立した後、サーバーにリクエストを送信します(リクエスト)
- サーバーは、要求を受信した後に対応する処理を実行し、応答を返します(応答)
- サーバーから切断します
サーバーとのリンクを確立する
- サーバーとのリンクを確立するにはどうすればよいですか?
- クライアントの受信と送信が正常であり、サーバーの受信と送信が正常であることを確認する必要があります
- これが
TCP/IP
合意と呼ばれるものです - リンクを確立するための主なステップは次のように呼ばれます
三次握手
- クライアントはサーバーにメッセージを送信します
此时:
服务端知道了 客户端可以正常发送消息
服务端知道了 服务端可以正常接收消息
- サーバーはクライアントにメッセージを送り返します
此时:
客户端知道了 客户端可以正常发送消息
客户端知道了 客户端可以正常接收消息
客户端知道了 服务端可以正常接收消息
客户端知道了 服务端可以正常发送消息
- クライアントはサーバーからメッセージを返します
此时:
服务端知道了 服务端可以正常发送消息
服务端知道了 客户端可以正常接收消息
- 総括する:
服务端知道了 客户端可以正常发送消息
服务端知道了 服务端可以正常接收消息
客户端知道了 客户端可以正常发送消息
客户端知道了 客户端可以正常接收消息
客户端知道了 服务端可以正常接收消息
客户端知道了 服务端可以正常发送消息
服务端知道了 服务端可以正常发送消息
服务端知道了 客户端可以正常接收消息
- この時点で、
TCP/IP
合意に従って確立されたリンクが確立されます - 両方の当事者は、両方の当事者がメッセージを正常に送受信できることを知っています
- あなたは2番目のステップに入ることができます:コミュニケーション
リクエストを送信する
- リンクを確立した後、リクエストを送信するプロセスです
- 各リクエストには、リクエストにすべての情報を含める必要があります
- すべてのリクエストには1つあります
请求报文
请求报文
すべてのリクエスト情報が含まれます(つまり、サーバーに伝えたいことが含まれています)- リクエストメッセージにはいくつかのものが含まれます
- リクエストライン
POST / user HTTP / 1.1
# POST 请求方式
# /user 请求URL(不包含域名)
# HTTP/1.1 请求协议版本
- リクエストヘッダー(リクエストヘッダーはキーと値のペアの形式で表示されます)
user-agent: Mozilla/5.0 #产生请求的浏览器信息
accept: application/json #表示客户端希望接收的数据类型
Content-Type: application/x-www-form-urlencoded #客户端发送的实体数据格式
Host: 127.0.0.1 #请求的主机名(IP)
- リクエストの空白行(リクエストヘッダーとリクエスト本文の間に空白行を残します)
# 就是一个空行
- リクエスト本文(このリクエストで運ばれるデータ)
# GET 请求是没有请求体数据的
# POST 请求才有请求体数据
- 完全なリクエストメッセージ
POST /user HTTP/1.1 #请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
accept: application/json
User-agent: Mozilla/5.0. #以上是首部
# (此处必须要有一空行)# 空行分割头和请求内容
name = world #请求体
応答を受け取る
- クライアントの要求がサーバーに送信された後
- サーバーは対応する処理を実行します
- 返信します
- すべての応答には1つあります
响应报文
- これに
响应报文
は、すべての応答情報(つまり、クライアント要求を受信した後のサーバーから当社への応答)が含まれます。 - 我々は
响应报文
いくつかの情報が含まれています
- ステータスライン
HTTP/1.1 200 OK
# HTTP/1.1 服务器使用的HTTP协议版本
# 200 响应状态码
# OK 对响应状态码的简单解释
- 応答ヘッダー
Date: Jan, 14 Aug 2019 12:42:30 GMT # 服务器时间
Server: Apache/2.4.23(Win32) OpenSSL/1.0.2j PHP/5.4.45 #服务器类型
- レスポンスボディ
hello word
# 服务端给客户端的响应数据
サーバーからリンクを切断します
- 以前は、リンクの確立は
TCP/IP
合意に基づいていました三次握手
- 私たちの切断は
TCP/IP
合意に基づいています四次挥手
- クライアントがサーバーに切断したいメッセージを送信します
- サーバーはそれを受信すると、シャットダウン待機状態に入ったことをクライアントに通知するメッセージを送信します。
- サーバーは、これが私の最後のメッセージであることをクライアントに通知するメッセージを再度送信します。メッセージを再度受信すると、サーバーは閉じます。
- クライアントがサーバーからメッセージを受信すると、クライアントにメッセージを閉じたことを通知します。これが最後のメッセージです。
HTTPリクエストを完了する
- この時点で、HTTPリクエストは完全に完了しています
- HTTPリクエストに含める必要のある4つのステップは次のとおりです。
- リンクを作成する
- リクエストを送信
- 応答を受け取る
- 切断する
- HTTPリクエストでは、リクエスト部分にリクエストメッセージがあり、レスポンス部分にレスポンスメッセージがあります。
- リクエストメッセージには
- リクエストライン
- リクエストヘッダー
- 空白行をリクエストする
- リクエスト本文
- 応答メッセージには次のものが含まれます
- ステータスライン
- 応答ヘッダー
- レスポンスボディ
一般的なHTTP応答ステータスコード
- HTTPリクエストの応答メッセージのステータス行には、応答ステータスコードがあります
- このステータスコードは、この応答のステータスを説明するために使用されます
- 通常、5つのステータスコードがあります
- 100-199
- 200-299
- 300-399
- 400-499
- 500-599
100-199
- リクエストが続くことを意味するため、通常は表示されません
- 100:リクエストを続行します。クライアントはすでに前のコンテンツの一部を受信しており、フォローアップコンテンツを待機しています
- 101:リクエスターはプロトコルを切り替える準備ができており、サーバーページは同意します
200-299
- 2最初のものは成功を示します。この要求は成功しますが、ステータスコードが異なれば意味も異なります(セマンティック)
- 200:標準のリクエストは成功しました(通常、サーバーがWebページを提供することを意味します)
- 201:正常に作成されました(通常、登録時に、新しいユーザー情報がデータベースに追加されたことを意味します)
- 203:サーバーがリクエストを正常に処理したが、返された情報が別のソースからのものである可能性があることを示します
- 204:サーバーはリクエストを正常に処理しましたが、データが返されません
300-399
- 3の始まりも成功しますが、一般的にはリダイレクトを意味します
- 301:永続的なリダイレクト
- 302:一時的なリダイレクト
- 304:キャッシュされたデータが使用されます
- 305:プロキシを使用する
400-499
- 4の先頭は、クライアントにエラーがあることを示します
- 400:要求された文法サーバーは認識しません
- 401:無許可(ログインするWebサイトはログインを許可されている必要があります)
- 403:サーバーがリクエストを拒否しました
- 404:サーバーはあなたが要求したURLを見つけることができません
- 407:エージェントが承認されていません
- 408:リクエストがタイムアウトしました
- 410:リクエストしたデータはサーバーによって完全に削除されました
500-599
- 5の始まりは、サーバーでエラーが発生したことを示します
- 500内部サーバーエラー
- 503:サーバーは現在利用できません(オーバーロードまたは保守されています)
- 505:要求されたプロトコルサーバーはサポートしていません
一般的なHTTPリクエストメソッド
- すべてのHTTPリクエストには、リクエスト行にリクエストメソッドと呼ばれるものがあります
- リクエストメソッドが異なれば意味も異なります
- GET:一般的にいくつかの情報を取得するために使用されます(リストを取得します)
- POST:通常、サーバーにデータを送信するために使用されます(ログイン)
- PUT:通常、サービスに新しいデータを追加(登録)させるときに、サービスにデータを送信するために使用されます
- 削除:通常、ドメインの一部のデータを削除します
- HEAD:GETリクエストに似ていますが、メッセージヘッダーを取得するために使用される、応答の特定のコンテンツが通常ない点が異なります。
- CONNECT:HTTP / 1.1で予約されているメソッドで、通常、パイプラインリンクがプロキシに変更されたときに使用されます
- PATCH:これはPUTメソッドに似たメソッドであり、一般的にローカルデータを更新するために使用されます
- オプション:クライアントがサーバーのパフォーマンスを表示できるようにする
- より一般的に使用されるのはGETとPOSTです
GETリクエスト
querystring
フォームで送信されたパラメータ。リクエストパスに直接接続されます。- GETリクエストはブラウザによってアクティブにキャッシュされます
- GETリクエストの長さは、ブラウザによって制限されています
- IE:2083文字
- Firefox:65536文字
- サファリ:80,000文字
- Opera:190000文字
- Chrome:8182文字
- APACHE(サーバー):理論的に受け入れられる最大長は8192文字です(検討中)
- パラメータのタイプには制限があり、ASCII形式のみです
- GETリクエストはプレーンテキストで送信されますが、これは比較的安全ではありません
POSTリクエスト
request body
送信されたパラメータ、つまりリクエスト本文- 手動で設定しない限り、POSTリクエストはブラウザによってアクティブにキャッシュされません
- サーバーが制限を設けない限り、POSTリクエストは理論的に無制限です
- パラメータタイプに制限はありません。理論的には、任意のデータタイプを渡すことができますが、リクエストヘッダーに対応している必要があります。
- POSTリクエストは暗号文で送信され、比較的安全です