ホームページ  >  記事  >  Java  >  JavaとHTTPプロトコルの詳しい説明

JavaとHTTPプロトコルの詳しい説明

黄舟
黄舟オリジナル
2017-09-08 09:45:451683ブラウズ

この記事では、主に Java および Http プロトコルの詳細な紹介に関する関連情報を紹介します。ここでは、この部分の内容を学習して理解するのに役立つ例を示します。必要な方は、

Java および Http プロトコルの詳細な紹介を参照してください。

はじめに HTTP (ハイパーテキスト転送プロトコル) は、要求および応答モードに基づいたステートレスなアプリケーション層プロトコルであり、多くの場合 TCP 接続方法に基づいています。 HTTP プロトコルの主な機能は次のとおりです:

1. クライアント/サーバー モードをサポートします。 2. シンプルかつ高速: クライアントがサーバーにサービスをリクエストするときは、リクエストのメソッドとパスを送信するだけで済みます。 HTTPプロトコルはシンプルなので通信速度が非常に速いです。 3. 柔軟性: HTTP では、あらゆる種類のデータ オブジェクトの送信が可能です。タイプは Content-Type によってマークされます。

4. 接続なし: 各接続は 1 つのリクエストのみを処理し、顧客のリクエストを処理し、顧客の応答を受信した後、接続は切断されます。この方法により、送信時間が節約されます。

5. ステートレス: ステートレスとは、プロトコルにトランザクション処理のためのメモリ機能がないことを意味します。

http1.0プロトコルのデフォルトの接続方法は非永続接続であり、HTTP1.1のデフォルトの接続方法は永続接続です。


非永続接続

: サーバーがオブジェクトを送信するたびに、対応する TCP 接続が閉じられます。これは、各接続が他のオブジェクトの送信に使用できるほど長く持続しないことを意味します。各 TCP 接続は、1 つの要求メッセージと 1 つの応答メッセージを送信するためにのみ使用されます。

永続的な接続: サーバーは応答を送信した後、TCP 接続を開いたままにします。同じクライアント/サーバーのペア間の後続のリクエストと応答は、この接続を介して送信できます。 HTTP/1.1 のデフォルト モードでは、パイプライン永続接続が使用されます。

1. HTTP プロトコルの詳細な説明を求める

//请求行
POST /reg.jsp HTTP/ (CRLF)    

//消息报头
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

//请求正文
user=jeffrey&pwd=1234
上記は、http リクエストの 3 つの部分です:

リクエスト行、メッセージ ヘッダー、およびリクエスト本文。


リクエスト行は、スペースで区切られたメソッド シンボルで始まり、その後にリクエストされた URI とプロトコル バージョンが続きます。形式は次のとおりです:

Method Request-URI HTTP-Version CRLF ここで、Method はリクエスト メソッド (例: POST、GET、PUT、DELETE など); Request-URI は、要求された HTTP プロトコルのバージョンを表し、CRLF はキャリッジ リターンとライン フィードを表します。

2. レスポンスの章 HTTP プロトコルの詳細な説明


//状态行
HTTP/1.1 200 OK (CRLF)

//消息报头
Cache-Control: private, max-age=30
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 25 May 2009 03:20:33 GMT
Last-Modified: Mon, 25 May 2009 03:20:03 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 25 May 2009 03:20:02 GMT
Content-Length: 12173

//响应正文
略
HTTP レスポンスも 3 つの部分、つまり

ステータス行、メッセージ ヘッダー、レスポンス本文で構成されます


ステータス行の形式は次のとおりです。

  HTTP-Version Status-Code Reason-Phrase CRLF

ここで、HTTP-Version はサーバーの HTTP プロトコルのバージョンを表し、Status-Code はサーバーから返された応答ステータス コードを表します。Reason-Phrase はステータス コードのテキストの説明を表します。

一般的なステータス コード、ステータスの説明、指示:

200 OK //クライアント リクエストは成功しました

400 Bad Request //クライアント リクエストには構文エラーがあるため、サーバーが理解できません

401 Unauthorized //リクエストは許可されていません。このステータス コードは WWW-Authenticate ヘッダー フィールドと一緒に使用する必要があります
403 Forbidden //サーバーはリクエストを受信しましたが、サービスの提供を拒否しました

404 Not Found //リクエストされたリソースは存在しません。例:間違った URL が入力されました

500 Internal Server Error / /サーバーで予期しないエラーが発生しました
503 Server Unavailable //サーバーは現在クライアントのリクエストを処理できず、一定の時間が経過すると通常に戻る可能性があります


3. HTTP プロトコルのメッセージ ヘッダーについて詳しく説明します

クライアントからサーバーへの HTTP メッセージのリクエストと、サーバーからクライアントへのレスポンス。要求メッセージと応答メッセージはどちらも開始行 (要求メッセージの場合は開始行が要求行、応答メッセージの場合は開始行がステータス行)、メッセージ ヘッダー (オプション)、空行 (CRLF のみ) で構成されます。行)、メッセージ本文(オプション)の構成。

HTTP メッセージ ヘッダーには、通常のヘッダー、リクエスト ヘッダー、レスポンス ヘッダー、エンティティ ヘッダーが含まれます。各ヘッダー フィールドは、名前 + 「:」 + スペース + 値で構成されます。メッセージ ヘッダー フィールドの名前は、大文字と小文字が区別されません。

1. リクエスト ヘッダー

リクエスト ヘッダーを使用すると、クライアントは追加の要求情報とクライアント自身の情報をサーバーに渡すことができます。
一般的に使用されるリクエストヘッダー

Accept请求报头域用于指定客户端接受哪些类型的信息。
Accept-Charset请求报头域用于指定客户端接受的字符集。
Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。
Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。
Authorization请求报头域主要用于证明客户端有权查看某个资源。

Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

2、响应报头

     响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。

常用的响应报头

Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。
Server响应报头域包含了服务器用来处理请求的软件信息

3. 实体报头

请求和响应消息都可以传送一个实体。

常用的实体报头

Content-Encoding指示已经被应用到实体正文的附加内容的编码。

Content-Language实体报头域描述了资源所用的自然语言。

Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。
Last-Modified实体报头域用于指示资源的最后修改日期和时间。
Expires实体报头域给出响应过期的日期和时间。

 四、补充

1、HTTP协议Content Lenth限制漏洞导致拒绝服务攻击

使用POST方法时,可以设置ContentLenth来定义需要传送的数据长度,例如ContentLenth:999999999,在传送完成前,内 存不会释放,攻击者可以利用这个缺陷,连续向WEB服务器发送垃圾数据直至WEB服务器内存耗尽。这种攻击方法基本不会留下痕迹。

2、为了提高用户使用浏览器时的性能,现代浏览器还支持并发的访问方式,浏览一个网页时同时建立多个连接,以迅速获得一个网页上的多个图标,这样能更快速完成整个网页的传输。HTTP1.1中提供了这种持续连接的方式,而下一代HTTP协议:HTTP-NG更增加了有关会话控制、丰富的内容协商等方式的支持,来提供更高效率的连接。

 五.Java利用HTTP协议实现联网和下载

Url的请求连接(Get方式)


String currentUrl=“http://www.myWeb.com/login.jsp?userName='Devin'&passWord='mypassword'”; //URL ?后面的内容为HTTP请求的正文
URL url = new URL(currentUrl);
 
HttpURLConnection httpurlconnection = url.openConnection();
//下面的设置对应HTTP请求中的消息报头
httpurlconnection.setRequestProperty("User-Agent",CommonValues.User_Agent);
httpurlconnection.setRequestProperty("Accept",CommonValues.Accept);
httpurlconnection.setRequestProperty("Accept-Charset",CommonValues.Accept_Charset);
httpurlconnection.setRequestProperty("Accept-Language",CommonValues.Accept_Language);
httpurlconnection.setRequestProperty("Connection",CommonValues.Connection);
httpurlconnection.setRequestProperty("Keep-Alive",CommonValues.Keep_Alive);
httpurlconnection.setConnectTimeout(CommonValues.ConnectionTimeOut);
httpurlconnection.setReadTimeout(CommonValues.ReadTimeOut);
       
httpurlconnection.connect();
      
int responsecode = httpurlconnection.getResponseCode();
       
if(responsecode == HttpURLConnection.HTTP_OK) //对应HTTP响应中状态行的响应码
{
  //操作请求流,这里对应HTTP响应中的响应正文
}
       
if (httpurlconnection != null) 
{
  httpurlconnection.disconnect();
}

以上がJavaとHTTPプロトコルの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。