Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Java- und HTTP-Protokolls

Detaillierte Erläuterung des Java- und HTTP-Protokolls

黄舟
黄舟Original
2017-09-08 09:45:451741Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Einführung von Java- und HTTP-Protokollen vorgestellt. Hier finden Sie Beispiele, die Ihnen beim Erlernen und Verstehen dieses Teils des Inhalts helfen können

Java und Http Detaillierte Einführung in das Protokoll

Einführung                                       , häufig basierend auf der TCP-Verbindungsmethode. Die Hauptmerkmale des HTTP-Protokolls sind: 1. Unterstützt den Client/Server-Modus.

2. Einfach und schnell: Wenn ein Client einen Dienst vom Server anfordert, muss er nur die Anforderungsmethode und den Pfad senden. Da das HTTP-Protokoll einfach ist, ist die Kommunikationsgeschwindigkeit sehr hoch.

3. Flexibel: HTTP ermöglicht die Übertragung jeglicher Art von Datenobjekten. Typen werden durch Content-Type gekennzeichnet.
4. Keine Verbindung: Das heißt, jede Verbindung verarbeitet nur eine Anfrage. Nach der Bearbeitung der Kundenanfrage und dem Erhalt der Kundenantwort wird die Verbindung getrennt. Diese Methode spart Übertragungszeit.
5. Zustandslos: Zustandslos bedeutet, dass das Protokoll keine Speicherkapazität für die Transaktionsverarbeitung hat.

Die Standardverbindungsmethode des http1.0-Protokolls ist eine nicht dauerhafte Verbindung, und die Standardverbindungsmethode von HTTP1.1 ist eine dauerhafte Verbindung.

Nicht-persistente Verbindung

: Jedes Mal, wenn der Server ein Objekt sendet, wird die entsprechende TCP-Verbindung geschlossen, was bedeutet, dass jede Verbindung nicht lange genug hält, um zur Übertragung anderer Objekte verwendet zu werden. Jede TCP-Verbindung wird nur zur Übertragung einer Anforderungsnachricht und einer Antwortnachricht verwendet.

Persistente Verbindung

: Der Server hält die TCP-Verbindung offen, nachdem er eine Antwort gesendet hat. Nachfolgende Anfragen und Antworten zwischen demselben Client/Server-Paar können über diese Verbindung gesendet werden. Der Standardmodus von HTTP/1.1 verwendet persistente Pipeline-Verbindungen.

1. Anfrage für eine detaillierte Erläuterung des HTTP-Protokolls


Das Obige sind die drei Teile der HTTP-Anfrage:

Anfragezeile, Nachrichtenkopf, Anfragetext.
//请求行
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

Die Anforderungszeile beginnt mit einem durch Leerzeichen getrennten Methodensymbol, gefolgt vom angeforderten URI und der Protokollversion im folgenden Format:

Methodenanforderungs-URI HTTP-Version CRLF

Wobei Methode die Anforderungsmethode darstellt (z. B. POST, GET, PUT, DELETE usw.); HTTP-Version stellt die angeforderte HTTP-Protokollversion dar; .


2. Antwortkapitel Detaillierte Erläuterung des HTTP-Protokolls


Die HTTP-Antwort besteht ebenfalls aus drei Teilen, nämlich:

Statuszeile, Nachrichtenkopf, Antworttext
//状态行
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

//响应正文
略

Das Statuszeilenformat ist wie folgt:



Unter Dabei stellt HTTP-Version die Version des Server-HTTP-Protokolls dar; Status-Code stellt den vom Server zurückgesendeten Antwortstatuscode dar; Reason-Phrase stellt die Textbeschreibung des Statuscodes dar.

  HTTP-Version Status-Code Reason-Phrase CRLF
Allgemeine Statuscodes, Statusbeschreibungen, Anweisungen:

200 OK //Client-Anfrage ist erfolgreich
400 Bad Request //Die Client-Anfrage weist einen Syntaxfehler auf und kann nicht ausgeführt werden vom Server verarbeitet Verstanden

401 Unauthorized //Die Anfrage ist nicht autorisiert, dieser Statuscode muss zusammen mit dem WWW-Authenticate-Header-Feld verwendet werden

403 Forbidden //Der Server hat die Anfrage empfangen, sich jedoch geweigert, den Dienst bereitzustellen
404 Nicht gefunden // Die angeforderte Ressource existiert nicht, z. B.: Die falsche URL wurde eingegeben
500 Interner Serverfehler //Ein unerwarteter Fehler ist im Server aufgetreten
503 Server nicht verfügbar //Der Server ist derzeit Die Anfrage des Clients kann nicht verarbeitet werden und kehrt möglicherweise nach einer gewissen Zeit zum Normalzustand zurück


3. Detaillierte Erläuterung der HTTP-Protokoll-Nachrichtenheader

HTTP-Nachrichten bestehen aus Client-zu -Serveranfragen und Server-zu-Client-Antworten. Sowohl Anforderungsnachrichten als auch Antwortnachrichten bestehen aus einer Startzeile (bei einer Anforderungsnachricht ist die Startzeile die Anforderungszeile; bei einer Antwortnachricht ist die Startzeile die Statuszeile), einem Nachrichtenkopf (optional) und einer Leerzeile (nur Zeile). mit CRLF) und Zusammensetzung des Nachrichtentextes (optional).

HTTP-Nachrichtenheader umfassen normale Header, Anforderungsheader, Antwortheader und Entitätsheader. Jedes Header-Feld besteht aus Name + :: + Leerzeichen + Wert. Der Name des Nachrichten-Header-Felds ist unabhängig von der Groß- und Kleinschreibung.

1. Anforderungsheader

Der Anforderungsheader ermöglicht es dem Client, zusätzliche angeforderte Informationen und die eigenen Informationen des Clients an den Server zu übergeben.

Häufig verwendete Anforderungsheader

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();
}

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Java- und HTTP-Protokolls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn