1。HTTPプロトコルとは何ですか
HTTPは、ハイパーテキスト転送プロトコルの略語です。これは、TCP/IPプロトコルのアプリケーション層プロトコルであり、WebブラウザーとWebサーバーの間でデータを交換するプロセスを定義するために使用されます。クライアントがWebサーバーに接続した後、Webサーバーで特定のWebリソースを取得する場合は、特定の通信形式を順守する必要があります。 HTTPプロトコルは、クライアントがWebサーバーと通信するための形式を定義するために使用されます。
2。HTTPプロトコルバージョン
HTTPプロトコルバージョン:HTTP/1.0、HTTP/1.1
3。HTTP1.0とHTTP1.1の違い
HTTP 1.0プロトコルでは、クライアントがWebサーバーとの接続を確立した後、1つのWebリソースのみを取得できます。
HTTP 1.1プロトコルでは、クライアントがWebサーバーとの接続を確立した後、1つの接続で複数のWebリソースが取得されます。
4。HTTPリクエスト
4.1。 HTTPリクエストに含まれるコンテンツ
クライアントがサーバーに接続した後、サーバーに特定のWebリソースを要求します。サーバーは、クライアントがサーバーにHTTPリクエストを送信すると呼ばれます。
完全なHTTP要求には、次のコンテンツが含まれます。リクエスト行、いくつかのメッセージヘッダー、およびエンティティコンテンツの例:
4.2。 HTTPリクエストの詳細 - リクエスト行
リクエスト行の取得は、リクエストメソッドと呼ばれます。リクエスト方法には、投稿、取得、ヘッド、オプション、削除、トレース、プット、および一般的に使用されるものが含まれます。
ユーザーに設定がない場合、デフォルトでは、ブラウザはgetリクエストをサーバーに送信します。たとえば、アクセスはブラウザに直接入力され、アクセスはハイパーリンクなどでクリックされます。ユーザーがリクエストメソッドを投稿したい場合、フォーム送信方法を変更できます。
POSTまたはGETを使用して、サーバーからWebリソースをリクエストするために使用されます。これらの2つの方法の違いは、主にデータ送信に反映されています。リクエストメソッドが取得されている場合、サーバーに渡されるデータはAの形でもたらすことができますか?要求されたURLアドレスの後、複数のデータが分離されます。
GETメソッドの機能:URLアドレスに接続されたパラメーターは制限されており、通常、データ容量は1kを超えることはできません。
要求方法が投稿されている場合、データは要求されたエンティティコンテンツでサーバーに送信できます。 POSTメソッドの特性は次のとおりです。送信されるデータの量は無制限です。
4.3。 HTTPリクエストの詳細 - メッセージヘッダー
HTTPリクエストの一般的なメッセージヘッダー
受け入れ:ブラウザは、このヘッダーとサポートするデータ型を介してサーバーを指示します。 Accept-Charset:ブラウザは、このヘッダーを介してサーバーに指示します。 Accept-Encoding:ブラウザはこのヘッダーを介してサーバーに指示され、サポートされている圧縮形式Accept-Language:ブラウザはこのヘッダーを介してサーバーを指示し、そのロケールホスト:ブラウザはこのヘッダーを介してサーバーに指示し、どのホストにアクセスしますか。 if-modified-since:ブラウザは、このヘッダーとデータをキャッシュする時間を介してサーバーに指示します。参考文献:ブラウザは、このヘッダーを介してサーバーに指示し、クライアントのページ。接続:ブラウザは、このヘッダーを介してサーバーを指示し、リクエストが完了した後にリンクまたはリンクを切断するかどうかを通知します。
例えば:
受け入れ:Application/X-MS-Application、Image/JPEG、Application/XAML+XML、Image/GIF、Image/PJPeg、
Application/x-ms-xbap、application/vnd.ms-excel、application/vnd.ms-powerpoint、application/msword、 */ *
参考文献:http:// localhost:8080/javawebdemoproject/web/2.jsp
Accept-Language:Zh-Cn
ユーザーエージェント:Mozilla/4.0(互換; MSIE 8.0; Windows NT 6.1; Wow64; Trident/4.0; Slcc2; .Net Clr 2.0.50727; .Net CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET4.0E;
Accept-Encoding:gzip、deflate
ホスト:LocalHost:8080
接続:キープアライブ
5。HTTP応答
5.1。 HTTP応答に含まれる内容
HTTP応答は、サーバーからクライアントに送信されたデータを表します。これには、ステータスライン、複数のメッセージヘッダー、およびエンティティコンテンツが含まれます。
例:
HTTP/1.1 200 Okserver:Apache-Coyote/1.1Content-Type:Text/HTML; charset = ISO-8859-1Content-Length:105date:Tue、2014年5月16:23:28 GMT <HTML> <HTML> <HEAD> </body> </html>
5.2。 HTTP応答の詳細 - ステータス行
ステータスライン形式:HTTPバージョン番号ステータスコード理由<CRLF>
例:HTTP/1.1 200 OK
ステータスコードは、リクエストのサーバーの処理結果を表すために使用されます。これは3桁の10進数です。応答ステータスコードは、以下に示すように、5つのカテゴリに分割されます。
5.3。 HTTP応答の詳細 - 一般的に使用される応答ヘッダー
HTTP応答の共通応答ヘッダー(メッセージヘッダー)
場所:サーバーはこのヘッダーを使用してブラウザにサーバーへのジャンプ場所を通知します:サーバーはこのヘッダーを使用してサーバーコンテンツエンコードのモデルをブラウザに伝える:サーバーはこのヘッダーを使用して、データコンテンツレングスの圧縮形式を通知するためにこのヘッダーを指示する:サーバーはこのヘッダーを使用して、ブラウザーの長さを通知するためにこのヘッダーを伝えるためにこのヘッダーを通知します。コンテンツタイプ:サーバーはこのヘッダーを使用してブラウザにデータのタイプを返すためにリフレッシュします。サーバーはこのヘッダーを使用してコンテンツ偏見を更新するためにこのヘッダーを伝えます。サーバーは、このヘッダーを使用してダウンロードされた方法でデータを書き込むように伝えます。キャッシュキャッシュコントロール:キャッシュなし
プラグマ:キャッシュなし
6.クライアントブラウザの動作を制御するためにサーバーに応答ヘッダーを設定します
6.1。リクエストリダイレクトを実現するには、位置応答ヘッダーを設定します
gacl.http.studyのパッケージ;インポートjava.io.ioexception; Import javax.servlet.servletexception; Import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; Import javax.havelet.httptsponseponse; gacl * */public class servletdemo01はhttpservletを拡張します{public void doget(httpservletrequest request、httpservletresponse response)servletexception、ioexception、ioexception {response.setstatus(302); //サーバーの応答ステータスコードを設定します/これはいわゆるリクエストリダイレクト*/response.setheader( "location"、 "/javaweb_httpprotocol_study_20140528/1.jsp"); } public void dopost(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {this.doget(request、response); }}URLアドレス「http:// localhost:8080/javaweb_httpprotocol_study_20140528/servlet/servletdemo01」を使用すると、Servletdemo01にアクセスすると、下にあるように、サーバーの後にサーバーに送られたステータスコードと応答ヘッダー情報を見ることができます。
サーバーは302ステータスコードを返して、ブラウザに必要なリソースがないことを通知しますが、ロケーションレスポンスヘッダーのどこにあるかを教えてくれます。ブラウザが応答ヘッダーを解析した後、 /javaweb_httpprotocol_study_20140528/1.jspページにジャンプしたいことがわかっているため、下の図に示すように、1.jspに自動的にジャンプします。
6.2。コンテンツエンコード応答ヘッダーを設定して、ブラウザにデータの圧縮形式を伝える
パッケージgacl.http.study; Import java.io.bytearrayoutputStream; Import java.io.ioexception; Import java.util.zip.gzipoutputStream; Import javax.servlet.servletexception; Import Javax.servlet.http.httpservlet; Import; javax.servlet.http.httpservletrequest; Import javax.servlet.httpservletrequest; Import javax.servlet.httpservletresponse; GZIPOUTPUTSTREAMストリームを使用して、データ*2を圧縮します。応答ヘッダーコンテンツエンコードを設定して、サーバー*/public class servletdemo02によって送信されたデータの圧縮形式がhttpservlet {public void doget(httpservletrequestリクエスト、httpservletresponse応答)を拡張することをブラウザに伝えます。 "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc dabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd "cdabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + 「cdabcdabcdabcdabcdabcdabcdabcdabcdab " +" cdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd ""; System.out.println( "原始数据的大小为:" + data.getBytes()。length); bytearrayoutputStream bout = new bytearrayoutputStream(); gzipoutputStream gout = new gzipoutputStream(bout); // buffer gout.write(data.getBytes()); Gout.Close(); //圧縮データバイトを取得g [] = bout.tobytearray(); Response.setheader( "Content-Encoding"、 "gzip"); Response.setheader( "content-length"、g.length +""); Response.getOutputStream()。書き込み(g); } public void dopost(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {this.doget(request、response); }}サーバーからブラウザに送信された応答情報は次のとおりです。
ブラウザによってサポートされる圧縮形式は次のとおりです。
6.3。コンテンツタイプの応答ヘッダーを設定し、ループバックデータ型を指定します
パッケージgacl.http.study; import java.io.ioexception; Import java.io.inputStream; Import java.io.outputStream; Import javax.servletexception; import javax.servlet.http.httpservlet; Import.havax.http.htptptserptpstptserplett; javax.servlet.http.httpservletrequest; Import javax.servlet.http.httpservletresponse; public class servletdemo03はhttpservletを拡張します{public void doget(httpservletrequest request、httpservletresponsection ofception)ブラウザは、application/x-ms-application、 * image/jpeg、 * application/xaml+xml、 * image/gif、 * image/pjpeg、 * application/x-ms-xbap、 * application/excel、 * application/vnd.ms-powerpoint、 * application/vnd.ms-powerpoint/vnd.ms-excel/msword、 */response.seeters.seaters " "image/jpeg"); //コンテンツタイプの応答ヘッダーを使用して、プロジェクトのルートディレクトリにあるIMGフォルダーの画像wp_20131005_002.jpgとしてブラウザに送信されたデータ型を「画像/jpeg」として指定し、入力ストリーム入力ストリームを返します。 this.getServletContext()。getResourceasStream( "/img/wp_20131005_002.jpg");バイトバッファー[] = new byte [1024]; int len = 0; outputStream out = response.getOutputStream(); //出力ストリームを取得します((len = in.read(buffer))> 0){//入力ストリームの内容を読み取り、バッファー(バッファ)out.write(buffer、0、len); httpservletResponse応答)servletexception、ioexception {this.doget(request、response); }}サーバーからブラウザに送信された応答情報は次のとおりです。
ServletDemo03の実行結果を以下の図に示します。
画像はブラウザに表示されます
6.4。更新応答ヘッダーを設定して、ブラウザを定期的に更新します
gacl.http.study; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; Import javax.havellet.htptpretspents extends httpservlet {public void doget(httpservletrequest request、httpservletresponse Response)servletexception、ioexception { / ** *リフレッシュレスポンスヘッダーを設定して、ブラウザーを3秒ごとに定期的に更新します * / //応答。 /** *更新応答ヘッダーを設定して、ブラウザを3秒でhttp://www.baidu.comにジャンプさせます */response.setheader( "refresh"、 "3; url = 'http://www.baidu.com'"); Response.getWriter()。write( "gacl"); } public void dopost(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {this.doget(request、response); }} 6.5。コンテンツ - 分散応答ヘッダーを設定して、ブラウザにファイルをダウンロードさせます
パッケージgacl.http.study; import java.io.ioexception; Import java.io.inputStream; Import java.io.outputStream; Import javax.servletexception; import javax.servlet.http.httpservlet; Import.havax.http.htptptserptpstptserplett; javax.servlet.http.httpservletrequest; Import javax.servlet.http.httpservletresponse; public class servletdemo05拡張httpservlet {public void doget(httpservletrequest request、httpservletrespitsictectioncections応答ヘッダーブラウザにファイル */ response.setheader( "content-disposition"、 "attachment; filename = xxx.jpg"); inputStream in = this.getServletContext()。getResourceasStream( "/img/1.jpg");バイトバッファー[] = new byte [1024]; int len = 0; outputStream out = response.getOutputStream(); while((len = in.read(buffer))> 0){out.write(buffer、0、len); }} public void dopost(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {this.doget(request、response); }}次の図に示すように、ブラウザでservletdemo05にアクセスすると、ファイルのダウンロードボックスがポップアップ表示されます。
上記はこの記事に関するものです。すべての人の学習に役立つことを願っています。