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:
//请求行 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 CRLFWobei 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:
//状态行 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 CRLFAllgemeine 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
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!