Android ネットワーク プログラミングと HTTP プロトコルの学習について学ぶべきこと


このセクションの紹介:

知らず知らずのうちに、ついに Android ネットワーク プログラミングの章にたどり着きました。これまでプレイしたものはすべてシングル プレーヤーでした。これでは十分ではありません。 このセクションの初めに、Android ネットワーク プログラミングに関連するいくつかのことを学びます。 Android ネットワーク プログラミングは何のためにあるのですか? HTTPプロトコル 学習するには、組み込みの Json 解析クラスを使用して Json、XML 解析のいくつかの一般的なメソッド、HttpUrlConnection および HttpUrlConnection を解析します。 HttpClientの使用、ファイルのアップロードとダウンロード、WebServiceの使用、WebViewの使用、Socket通信など。

さらに、私たちはクライアントです。サーバーのコンテンツは私たちの範囲外であり、Xiaozhu はそれが得意ではありません。 からフィードバックされたデータを取得して解析する能力を習得できること。サーバー! それでは、さっそくこのセクションを始めましょう!


Android がインターネットと対話するための 3 つの方法

1.png


2. Http プロトコルの最初の紹介

実際の開発では、サーバーを扱うとき、一般に Http に基づいた通信を使用します。プロトコルなので、HTTP をよく学びましょう。 もちろん重要なのは、細部にあまり注意を払う必要はなく、大まかに理解するだけで十分ということです。これらはすべて概念的なものです!


1) HTTP プロトコルとは何ですか?

答え: ハイパーテキスト転送プロトコル、TCP/IP プロトコルのアプリケーション層プロトコルが使用されます。 WEBブラウザとWEBサーバーの間でデータをやり取りするプロセスを定義します。クライアントが Web サーバーに接続した後、Web サーバーを取得したい場合 サーバー内の特定の Web リソースは、特定の通信形式に準拠する必要があります。HTTP プロトコルは、クライアントと Web サーバー間の通信形式を定義するために使用されます。

2) Http 1.0 と Http 1.1 の違い

答え: 1.0 プロトコルでは、クライアントは Web サーバーとの接続を確立した後、Web リソースを 1 つだけ取得できます。 1.1 プロトコルを使用すると、クライアントは Web サーバーとの接続を確立した後、1 つの接続で複数の Web リソースを取得できます。

3) HTTP プロトコルの基礎となるワークフロー:

答え: まず 2 つの用語を理解する必要があります:

  • SYN(同期): 接続を確立するために TCP/IP によって使用されるハンドシェイク信号
  • ACK (確認応答): 送信されたデータが正しく受け入れられたことを確認する確認文字

次に、 TCP/IP 3 ウェイ ハンドシェイクの概念が登場します:

  • クライアントは syn パケット (syn = j) を送信します) をサーバーに送信し、SYN_SEND 状態に入り、サーバーが確認するのを待ちます
  • サーバーは syn パケットを受信し、クライアントの syn (ack = j + 1) を確認し、同時に SYN パケット (syn) を送信します=k)​​ それ自体に対して、 つまり、SYN + ACK パケットにより、サーバーは SYN_RECV 状態に入ります
  • クライアントは SYN + ACK パケットを受信し、送信完了後、確認パケット ACK (ack = k +1) をサーバーに送信します。クライアントとサーバー ESTABLISHED 状態に入り、3 ウェイ ハンドシェイクが完了すると、2 者はデータの送信を開始します

まだ明確でない場合は、3 ウェイ ハンドシェイクの図を見てみましょう:

2.png

わかりましたね?それでは、HTTP 操作のプロセスを見てみましょう:

  • ユーザーがブラウザ上で URL (ハイパーリンク) をクリックすると、Web ブラウザは Web サーバーとの接続を確立します
  • 接続が確立され、クライアントはサーバーにリクエストを送信します。リクエストの形式は次のとおりです。 ユニフォーム リソース識別子 (URL) + プロトコル バージョン番号 (通常は 1.1) + MIME 情報 (複数のメッセージ ヘッダー) + 空白行 リクエストを受信した後、サーバーは対応する戻り情報を返します。 プロトコルのバージョン番号 + ステータス行 (処理結果) + 複数の情報ヘッダー + 空行 + エンティティの内容 (返された HTML など)
  • クライアントはサーバーから返された情報を受け取り、ブラウザーで表示し、サーバーから切断します; もちろん中途半端なら 特定のステップでエラーが発生した場合、次のようなエラー メッセージがクライアントに返されて表示されます。古典的な 404 エラーです。
  • 上記のプロセスがまだ明確でない場合は、HttpWatch または Firefox を使用してパッケージをキャプチャできます。 PS: テスト Web サイトは、Xiaozhu の学校の学術管理システムです。アカウントとパスワードを入力してログインを要求すると、次の情報が表示されます。

HTTP リクエストに含まれるコンテンツ:

3.png HTTP レスポンス:

4.png 一目瞭然ですよね?

4) Httpプロトコルのビジネスプロセス

5.png5) Httpのいくつかのリクエストメソッド

実際の開発ではGetメソッドとPostメソッドがよく使われますが、実際の開発では他のメソッドも使用される可能性があります。 PUT などのメソッド、 Xiaozhu の実際のプロジェクトで使用されているため、すべてのリクエスト メソッドを以下にリストします。

    Get
  • : Request-URI で識別されるリソースの取得リクエスト
  • POST
  • : リクエスト内 - 新しいデータが追加されます。 URIで識別されるリソースへ
  • HEAD
  • Request-URIで識別されるリソースの応答情報ヘッダーの取得を要求する
  • PUT
  • : サーバーにリソースの保存を要求し、Request-URIをその識別子として使用する
  • DELETE
  • : Request-URI で識別されるリソースを削除するようにサーバーに要求します
  • TRACE
  • : 受信した要求情報を返送するようにサーバーに要求します。主にテストまたは診断に使用されます
  • CONNECT
  • : 将来の使用のために予約されています
  • オプション
  • : サーバーのパフォーマンスをクエリするリクエスト、またはリソース関連のオプションをクエリします
6) Get と Post の比較

最もよく使用される 2 つのもの、もちろん比較する必要があります。
  • GET: リクエストされた URL アドレスの後に、サーバーに渡されるデータは ? の形式で渡され、複数のデータは & で区切られます。 ただし、通常、データ容量は 2K を超えることはできません。例: http://xxx?username=…&pawd=… これは GET
  • POST です。これは、要求されたエンティティ コンテンツでサーバーにデータを送信できます。
  • もう 1 つの注意点は、どちらもデータを送信しますが、送信メカニズムが異なるということです。インターネットで言われていることを信じないでください。 「GET はサーバーのデータを取得し、POST はサーバーにデータを送信します。」 さらに、GET のセキュリティは非常に低く、Post のセキュリティは高くなります。 ただし、実行効率は Post メソッドよりも優れています。クエリの場合は GET を使用し、データの追加、削除、または変更の場合は POST を使用します。 !

7) HTTP ステータス コードのコレクション

もちろん、これらのステータス コードは単なる参照用であり、実際には、決定権はサーバー (バックエンド) にあります。 サーバーが返すのはステータス、またはアプリケーションに複数の言語バージョンが必要ない場合に使用するのが最適です。 結果情報の JSON 文字列を受け取ると、それを直接表示できるので、手間が省けます。以下は参照用のステータス コードのコレクションです。 ダウンロードするだけです:

100~199: リクエストは正常に受け入れられました。クライアントはプロセス全体を完了するために次のリクエストを送信する必要があります。
  • 200: OK、クライアントリクエストは成功しました。アドレス (302、307、304) に移動されました。
  • 401: リクエストは承認されていません。ステータス コードは WWW-Authenticate ヘッダー フィールドとともに変更する必要があります。
  • 403: 禁止されています。サーバーは要求はされましたが、サービスの提供を拒否されました
  • 404: Not Found、要求されたリソースが存在しません、これは言うまでもありません
  • 500: Internal Server Error、サーバーで予期しないエラーが発生しました
  • 503: Server Unavailable、サーバーは現在クライアント要求を処理できず、一定の時間が経過すると通常に戻る可能性があります
  • 8) HTTP プロトコルの機能
概念的なものを知っている限り、それを単にコピーして貼り付ける必要はありません。 Baidu百科事典より:

1.

クライアント/サーバーモードをサポート

2.

シンプルかつ高速

: クライアントがサーバーにサービスをリクエストするとき、クライアントはリクエストのメソッドとパスを送信するだけで済みます。一般的に使用されるリクエスト メソッドには、GET、 ヘッド、ポスト。各メソッドは、クライアントとサーバー間の異なるタイプの接続を指定します。 HTTP プロトコルは単純であるため、HTTP サーバーのプログラム サイズは小さく、通信速度は非常に高速です。 3.

柔軟性

: HTTP では、あらゆる種類のデータ オブジェクトの送信が可能です。転送されるタイプは Content-Type によってマークされます。 4.

接続なし

: 接続なしの意味は、各接続が 1 つのリクエストのみを処理するように制限することです。サーバーがクライアントのリクエストを処理した後、 クライアントからの応答を受信した後、接続は切断されます。この方法により、送信時間が節約されます。

5. ステートレス: HTTP プロトコルはステートレス プロトコルです。ステートレスとは、プロトコルにトランザクション処理のためのメモリ機能がないことを意味します。 ステータスがないということは、後続の処理で以前の情報が必要な場合にその情報を再送信する必要があることを意味し、その結果、接続ごとに転送されるデータ量が増加する可能性があります。一方、事前の情報が必要ない場合、サーバーはより速く応答します。

追記: OSI 7 層プロトコルと TCP 4 層モデルについては、基本シリーズでは説明しません~興味があれば、自分で学ぶことができます。


このセクションの概要:

このセクションでは、ネットワークおよび Http プロトコルに関連する Android 開発で完了する必要があるツールについて説明します。 関連する概念については、Android モバイル端末とサーバー間のやり取りについて、すでに漠然としたイメージを持っていると思います。次のセクションで学習してみましょう。 Httpプロトコルのリクエストヘッダーとレスポンスヘッダー!このセクションはここまでです、ありがとうございました~