Heim > Artikel > Web-Frontend > Eingehende Analyse des HTTP-Protokolls
http Einführunghttp Der Anforderungsteil von http Grundstruktur der AnfrageAnfragezeileDetaillierte Erläuterung HTTP-AnfrageheaderHttp Antwortdetailshttp Grundstruktur der AntwortStatuszeilehttp Detaillierte Erläuterung der AntwortheaderAblauf, Pragma, Cache-Kontrolle Auf Nicht-Cache einstellenAblauf, Pragma, Cache-Kontrolle Einstellungen Cache-Zeit angebenHTTP Anfragedetails – Allgemeine Überschrift
Das http-Protokoll basiert auf dem TCP/IP-Protokoll
Der vollständige Name des http-Protokolls lautet Hypertext Transfer Protocol ( HTTP, HyperText Transfer Protocol )
http-Protokoll Version 1.0 1.1 2.0
http 1.0 wird eine kurze Verbindung, http 1.1 wird eine lange Verbindung genannt
Die sogenannte lange und kurze Verbindung bezieht sich auf die Langzeitverbindung 1,1 30s. Die kurze Verbindung wird sofort nach dem Senden der Daten getrennt
Http definiert verschiedene Methoden für die Interaktion mit dem Server. Es gibt 4 grundlegendste Methoden, nämlich GET, POST, PUT und DELETE. Der vollständige Name der URL ist Ressourcendeskriptor. Wir können uns das so vorstellen: eine URL-Adresse, die zur Beschreibung einer Ressource im Netzwerk verwendet wird, und GET, POST, PUT und DELETE in HTTP entsprechen der Suche und Änderung von Diese Ressource hinzufügen und löschen. Zu diesem Zeitpunkt sollte jeder ein allgemeines Verständnis haben. GET wird im Allgemeinen zum Abrufen/Abfragen von Ressourceninformationen verwendet, während POST im Allgemeinen zum Aktualisieren von Ressourceninformationen verwendet wird.
Anfragezeile
Nachrichtenkopf
Eine Leerzeile
Inhalt
Anforderungsmethoden sind: Post, Get, Optionen, Löschen, Trace, Put
Häufig verwendete Begriffe sind: post, get
Der Unterschied zwischen post und get:
GET verwendet URL oder Cookie, um Parameter zu übergeben. Und POST fügt die Daten in BODY ein.
Die GET-URL hat eine Längenbeschränkung und die POST-Daten können sehr groß sein.
POST ist sicherer als GET, da die Daten in der Adressleiste nicht sichtbar sind.
Akzeptieren: Teilen Sie dem Server mit, welche Dateien ich empfangen kann Accept Type MIME-Typen, die für den Browser akzeptabel sind
Accept-Charset: Zeichensatzkodierung, die für den Browser akzeptabel ist
Accept-Encoding: Kann komprimierte Daten in einem bestimmten Format akzeptieren, z. B.: gzip, compress. Datenkodierungsmethode, die der Browser dekodieren kann
Accept-Langage: Vom Browser unterstützte Sprache
Gastgeber: Gibt an, wer der Gastgeber ist, den ich suche
If-Wodified-Since: Teilen Sie dem Server mit, ob im lokalen Cache eine anzufordernde Datei vorhanden ist, die die Uhrzeit der angeforderten Datei enthält // Der Server empfängt diese Anforderung und vergleicht die Uhrzeit, um festzustellen, ob die vom Browser angeforderte Datei vorhanden ist Bei Änderungen wird eine neue Datei an den Browser gesendet. Die Daten werden nicht unverändert erneut gesendet. //Hinweis: Nur wenn der angeforderte Inhalt nach dem angegebenen Datum geändert wurde, wird er zurückgegeben, andernfalls wird 304"Nicht zurückgegeben Geänderte" Antwort.
Referer: Sagen Sie dem Server, wo ich herkomme. Dieser Nachrichtenheader wird oft verwendet, um Hotlinking zu verhindern. Persönliches Verständnis zur Verhinderung von Hotlinking:
Hotlinking: Hotlinking bedeutet, dass der Dienstanbieter selbst keine Diensteinhalte bereitstellt , Umgehung anderer nützlicher Endbenutzerschnittstellen (z. B. Werbung) durch technische Mittel, Bereitstellung von Dienstinhalten anderer Dienstanbieter für Endbenutzer auf ihren eigenen Websites, Betrügen der Browsing- und Klickraten der Endbenutzer. Keine Begünstigten Ressourcen oder stellen nur wenige Ressourcen bereit, und der eigentliche Dienstanbieter erhält keinen Standortvorteil
User-Agent: Sagt dem Server, Browser-Kernel:
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ // 防止乱码 response.setContentType("text/html;charset=utf-8"); // 获取输出流 PrintWriter out = response.getWriter(); // 获取用户浏览器 Referer String referer = request.getHeader("Referer"); if(referer == null || referer.startsWith("http://localhost:8080/本地内部用户web应用路径")){ response.sendRedirect("其他非真正资源网页"); return; }else{ } // 内部资源文件 。。。。。。。。。。。 }
Cookie: Dies ist die wichtigste Anfrage.
Verbindung: gibt an ob eine dauerhafte Verbindung erforderlich ist, oder wenn Sie sehen, dass die Anforderung HTTP 1.1 verwendet (HTTP 1.1 verwendet standardmäßig dauerhafte Verbindungen), kann es dauerhafte Verbindungen nutzen Reduzieren Sie die Downloadzeit erheblich, wenn die Seite mehrere Elemente enthält (z. B. Applets, Bilder). Um dies zu erreichen, muss das Servlet einen Content-Length-Header in der Antwort senden. Der einfachste Weg, dies zu erreichen, ist: Schreiben Sie zuerst den Inhalt ByteArrayOutputStream und berechnet dann seine Größe, bevor der Inhalt tatsächlich ausgegeben wird.
Datum: Der Zeitpunkt, zu dem der Browser die http-Anfrage gesendet hat.
Content-Length: Gibt die Länge des Anforderungsnachrichtentexts an.
UA-Pixel, UA-Farbe, UA-OS, UA-CPU: Wird von einigen Versionen des IE-Browsers gesendet. Nicht standardmäßig Anforderungsheader, die Bildschirmgröße, Farbtiefe, Betriebssystem und CPU-Typ angeben.
Statuszeile
Mehrere Nachrichtenkopfzeilen
Eine leere Zeile
Entitätsinhalt
Format: HTTP-Versionsnummer, Statuscode, Grundbeschreibung719f572dc95af346278bdd6251cfc5d3
Beispiel: HTTP/1.1 200 OK
Der Statuscode wird verwendet, um das Verarbeitungsergebnis der Anfrage durch den Server anzuzeigen. Es handelt sich um eine dreidimensionale Dezimalzahl. Antwortstatuscodes sind in 5 Kategorien unterteilt.
状态码 | 含义 |
---|---|
100~199 | 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 |
200~299 | 表示成功接收请求并已完成整个处理过程 。 常用200 |
300~399 | 为完成请求,客户端需进一步细化请求,例如:请求的资源已经移动一个新地址,常用302、307 |
400~499 | 客户端的请求有错误。常用 404 |
500~599 | 服务器端出现错误, 常用 500 |
Location:让浏览器重新定位到 指定的 URL
Server:告诉浏览器 服务器的类型
Content-Encoding:服务端能够发送压缩编码类型
Content-Length: 服务器端发送的压缩数据的长度
Content-Langage:服务端发送的语言类型
Content-Type:服务端发送的类型及采用的编码方式
Last-Modified:服务端对该资源最后的修改(更新)时间
Refresh:服务端要求浏览器在指定的时间,刷新,然后访问指定的页面路径
Content-Disposition:attachmen;filename=aaa.zip 服务端要求客户端一下载文件的方式打开该文件,即告诉浏览器有文件需要下载
Transfer-Encoding:传送数据到客户端的方式
Set-Cookie:服务端发送到客户端的暂存数据
Cache-Control:告诉浏览器如何缓存页面数据
Expires:告诉浏览器如何缓存页面数据 参数 -1 不缓存
Pragma:告诉浏览器如何缓存页面数据
Connection:维护客户端和服务端的连接关系 是否保持连接
Date:服务端响应客户端的时间
// 指定该页面不缓存 ie浏览器内核response.setDateHeader("Expires",-1);// 兼容设置response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache");
// 指定该页面缓存指定时间 ie浏览器内核response.setDateHeader("Expires",System.currentTimeMillis()*3600*1000*24;
通用信息头指既能用于请求,又能用于响应的一些消息头
Cache-Control:no-cache
Pragma:no-cache
Connection:close/Keep-Alive
Date:Tue,。。。
Das obige ist der detaillierte Inhalt vonEingehende Analyse des HTTP-Protokolls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!