第四章 XML_Tomcat10_HTTP
一 XML
XML是EXtensible Markup Language的縮寫,翻譯過來就是可擴展標記語言。所以很明顯,XML和HTML一樣都是標記語言,也就是說它們的基本語法都是標簽。
-
可擴展 三個字表面上的意思是XML允許自定義格式。但這不代表你可以隨便寫。
-
在XML基本語法規范的基礎上,你使用的那些第三方應用程序、框架會通過XML約束的方式強制規定配置文件中可以寫什么和怎么寫
-
XML基本語法這個知識點的定位是:我們不需要從零開始,從頭到尾的一行一行編寫XML文檔,而是在第三方應用程序、框架已提供的配置文件的基礎上修改。要改成什么樣取決于你的需求,而怎么改取決XML基本語法和具體的XML約束。
1.1 常見配置文件類型
-
properties文件,例如druid連接池就是使用properties文件作為配置文件
-
XML文件,例如Tomcat就是使用XML文件作為配置文件
-
YAML文件,例如SpringBoot就是使用YAML作為配置文件
-
json文件,通常用來做文件傳輸,也可以用來做前端或者移動端的配置文件
-
等等...
1.1.1 properties配置文件
示例
atguigu.jdbc.url=jdbc:mysql://localhost:3306/atguigu atguigu.jdbc.driver=com.mysql.cj.jdbc.Driver atguigu.jdbc.username=root atguigu.jdbc.password=root
語法規范
-
由鍵值對組成
-
鍵和值之間的符號是等號
-
每一行都必須頂格寫,前面不能有空格之類的其他符號
1.1.2 xml配置文件
示例
<?xml version="1.0" encoding="UTF-8"?> <students><student><name>張三</name><age>18</age></student><student><name>李四</name><age>20</age></student> </students>
XML的基本語法
-
XML的基本語法和HTML的基本語法簡直如出一轍。其實這不是偶然的,XML基本語法+HTML約束=HTML語法。在邏輯上HTML確實是XML的子集。
-
XML文檔聲明 這部分基本上就是固定格式,要注意的是文檔聲明一定要從第一行第一列開始寫
<?xml version="1.0" encoding="UTF-8"?>
-
根標簽
-
根標簽有且只能有一個。
-
-
標簽關閉
-
雙標簽:開始標簽和結束標簽必須成對出現。
-
單標簽:單標簽在標簽內關閉。
-
-
標簽嵌套
-
可以嵌套,但是不能交叉嵌套。
-
-
注釋不能嵌套
-
標簽名、屬性名建議使用小寫字母
-
屬性
-
屬性必須有值
-
屬性值必須加引號,單雙都行
-
XML的約束(稍微了解)
將來我們主要就是根據XML約束中的規定來編寫XML配置文件,而且會在我們編寫XML的時候根據約束來提示我們編寫, 而XML約束主要包括DTD和Schema兩種。
-
DTD
-
Schema
Schema約束要求我們一個XML文檔中,所有標簽,所有屬性都必須在約束中有明確的定義。
下面我們以web.xml的約束聲明為例來做個說明:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
1.2 DOM4J進行XML解析
1.2.1 DOM4J的使用步驟
-
導入jar包 dom4j.jar
-
創建解析器對象(SAXReader)
-
解析xml 獲得Document對象
-
獲取根節點RootElement
-
獲取根節點下的子節點
1.2.2 DOM4J的API介紹
1.創建SAXReader對象
SAXReader saxReader = new SAXReader();
2. 解析XML獲取Document對象: 需要傳入要解析的XML文件的字節輸入流
Document document = reader.read(inputStream);
3. 獲取文檔的根標簽
Element rootElement = documen.getRootElement()
4. 獲取標簽的子標簽
//獲取所有子標簽 List<Element> sonElementList = rootElement.elements(); //獲取指定標簽名的子標簽 List<Element> sonElementList = rootElement.elements("標簽名");
5. 獲取標簽體內的文本
String text = element.getText();
6. 獲取標簽的某個屬性的值
String value = element.attributeValue("屬性名");
二 Tomcat10
2.1 WEB服務器
Web服務器通常由硬件和軟件共同構成。
-
硬件:電腦,提供服務供其它客戶電腦訪問
-
軟件:電腦上安裝的服務器軟件,安裝后能提供服務給網絡中的其他計算機,將本地文件映射成一個虛擬的url地址供網絡中的其他人訪問。
常見的JavaWeb服務器:
-
Tomcat(Apache):當前應用最廣的JavaWeb服務器
-
Jetty:更輕量級、更靈活的servlet容器
-
JBoss(Redhat紅帽):支持JavaEE,應用比較廣EJB容器 –> SSH輕量級的框架代替
-
GlassFish(Orcale):Oracle開發JavaWeb服務器,應用不是很廣
-
Resin(Caucho):支持JavaEE,應用越來越廣
-
Weblogic(Orcale):要錢的!支持JavaEE,適合大型項目
-
Websphere(IBM):要錢的!支持JavaEE,適合大型項目
2.2 Tomcat服務器
2.2.1 簡介
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。
2.2.2 安裝
版本
-
版本:企業用的比較廣泛的是8.0和9.0,目前比較新正式發布版本是Tomcat10.0, Tomcat11仍然處于測試階段。
-
JAVAEE 版本和Servlet版本號對應關系 Jakarta EE Releases
Servlet Version | EE Version |
---|---|
6.1 | Jakarta EE ? |
6.0 | Jakarta EE 10 |
5.0 | Jakarta EE 9/9.1 |
4.0 | JAVA EE 8 |
3.1 | JAVA EE 7 |
3.1 | JAVA EE 7 |
3.0 | JAVAEE 6 |
-
Tomcat 版本和Servlet版本之間的對應關系
Servlet Version | Tomcat Version | JDK Version |
---|---|---|
6.1 | 11.0.x | 17 and later |
6.0 | 10.1.x | 11 and later |
5.0 | 10.0.x (superseded) | 8 and later |
4.0 | 9.0.x | 8 and later |
3.1 | 8.5.x | 7 and later |
3.1 | 8.0.x (superseded) | 7 and later |
3.0 | 7.0.x (archived) | 6 and later (7 and later for WebSocket) |
下載
-
Tomcat官方網站:Apache Tomcat? - Welcome!
-
安裝版:需要安裝,一般不考慮使用。
-
解壓版: 直接解壓縮使用,我們使用的版本。
安裝
-
正確安裝JDK并配置JAVA_HOME(以JDK17為例 https://injdk.cn中可以下載各種版本的JDK)
-
解壓tomcat到非中文無空格目錄
-
點擊bin/startup.bat啟動
-
打開瀏覽器輸入 http://localhost:8080訪問測試
-
直接關閉窗口或者運行 bin/shutdown.bat關閉tomcat
-
處理dos窗口日志中文亂碼問題: 修改conf/logging.properties,將所有的UTF-8修改為GBK
-
修改前
-
修改后
-
重啟測試
2.3 Tomcat目錄及測試
C:\Program4java\apache-tomcat-10.1.7 這個目錄下直接包含Tomcat的bin目錄,conf目錄等,我們稱之為Tomcat的安裝目錄或根目錄。
-
bin:該目錄下存放的是二進制可執行文件,如果是安裝版,那么這個目錄下會有兩個exe文件:tomcat10.exe、tomcat10w.exe,前者是在控制臺下啟動Tomcat,后者是彈出GUI窗口啟動Tomcat;如果是解壓版,那么會有startup.bat和shutdown.bat文件,startup.bat用來啟動Tomcat,但需要先配置JAVA_HOME環境變量才能啟動,shutdawn.bat用來停止Tomcat;
-
conf:這是一個非常非常重要的目錄,這個目錄下有四個最為重要的文件:
-
server.xml:配置整個服務器信息。例如修改端口號。默認HTTP請求的端口號是:8080
-
tomcat-users.xml:存儲tomcat用戶的文件,這里保存的是tomcat的用戶名及密碼,以及用戶的角色信息。可以按著該文件中的注釋信息添加tomcat用戶,然后就可以在Tomcat主頁中進入Tomcat Manager頁面了;
<tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0"> <role rolename="admin-gui"/><role rolename="admin-script"/><role rolename="manager-gui"/><role rolename="manager-script"/><role rolename="manager-jmx"/><role rolename="manager-status"/><user username="admin" password="admin" roles="admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"/> </tomcat-users>
web.xml:部署描述符文件,這個文件中注冊了很多MIME類型,即文檔類型。這些MIME類型是客戶端與服務器之間說明文檔類型的,如用戶請求一個html網頁,那么服務器還會告訴客戶端瀏覽器響應的文檔是text/html類型的,這就是一個MIME類型。客戶端瀏覽器通過這個MIME類型就知道如何處理它了。當然是在瀏覽器中顯示這個html文件了。但如果服務器響應的是一個exe文件,那么瀏覽器就不可能顯示它,而是應該彈出下載窗口才對。MIME就是用來說明文檔的內容是什么類型的!
-
context.xml:對所有應用的統一配置,通常我們不會去配置它。
-
-
lib:Tomcat的類庫,里面是一大堆jar文件。如果需要添加Tomcat依賴的jar文件,可以把它放到這個目錄中,當然也可以把應用依賴的jar文件放到這個目錄中,這個目錄中的jar所有項目都可以共享之,但這樣你的應用放到其他Tomcat下時就不能再共享這個目錄下的jar包了,所以建議只把Tomcat需要的jar包放到這個目錄下;
-
logs:這個目錄中都是日志文件,記錄了Tomcat啟動和關閉的信息,如果啟動Tomcat時有錯誤,那么異常也會記錄在日志文件中。
-
temp:存放Tomcat的臨時文件,這個目錄下的東西可以在停止Tomcat后刪除!
-
webapps:存放web項目的目錄,其中每個文件夾都是一個項目;如果這個目錄下已經存在了目錄,那么都是tomcat自帶的項目。其中ROOT是一個特殊的項目,在地址欄中訪問:http://127.0.0.1:8080,沒有給出項目目錄時,對應的就是ROOT項目.http://localhost:8080/examples,進入示例項目。其中examples"就是項目名,即文件夾的名字。
-
work:運行時生成的文件,最終運行的文件都在這里。通過webapps中的項目生成的!可以把這個目錄下的內容刪除,再次運行時會生再次生成work目錄。當客戶端用戶訪問一個JSP文件時,Tomcat會通過JSP生成Java文件,然后再編譯Java文件生成class文件,生成的java和class文件都會存放到這個目錄下。
-
LICENSE:許可證。
-
NOTICE:說明文件。
2.4 WEB項目的標準結構
一個標準的可以用于發布的WEB項目標準結構如下
-
app 本應用根目錄
-
static 非必要目錄,約定俗成的名字,一般在此處放靜態資源 ( css js img)
-
WEB-INF 必要目錄,必須叫WEB-INF,受保護的資源目錄,瀏覽器通過url不可以直接訪問的目錄
-
classes 必要目錄,src下源代碼,配置文件,編譯后會在該目錄下,web項目中如果沒有源碼,則該目錄不會出現
-
lib 必要目錄,項目依賴的jar編譯后會出現在該目錄下,web項目要是沒有依賴任何jar,則該目錄不會出現
-
web.xml 必要文件,web項目的基本配置文件. 較新的版本中可以沒有該文件,但是學習過程中還是需要該文件
-
-
index.html 非必要文件,index.html/index.htm/index.jsp為默認的歡迎頁
-
url的組成部分和項目中資源的對應關系
2.5 WEB項目部署的方式
方式1 直接將編譯好的項目放在webapps目錄下 (已經演示)
方式2 將編譯好的項目打成war包放在webapps目錄下,tomcat啟動后會自動解壓war包(其實和第一種一樣)
方式3 可以將項目放在非webapps的其他目錄下,在tomcat中通過配置文件指向app的實際磁盤路徑
-
在磁盤的自定義目錄上準備一個app
-
在tomcat的conf下創建Catalina/localhost目錄,并在該目錄下準備一個app.xml文件
<!-- path: 項目的訪問路徑,也是項目的上下文路徑,就是在瀏覽器中,輸入的項目名稱docBase: 項目在磁盤中的實際路徑--> <Context path="/app" docBase="D:\mywebapps\app" />
-
啟動tomcat訪問測試即可
2.6 IDEA中開發并部署運行WEB項目
2.6.1 IDEA關聯本地Tomcat
可以在創建項目前設置本地tomcat,也可以在打開某個項目的狀態下找到settings
找到 Build,Execution,Eeployment下的Application Servers ,找到+號
選擇Tomcat Server
選擇tomcat的安裝目錄
點擊ok
關聯完畢
2.6.2 IDEA創建web工程
推薦先創建一個空項目,這樣可以在一個空項目下同時存在多個modules,不用后續來回切換之前的項目,當然也可以忽略此步直接創建web項目
檢查項目的SDK,語法版本,以及項目編譯后的輸出目錄
先創建一個普通的JAVA項目
檢查各項信息是否填寫有誤
創建完畢后,為項目添加Tomcat依賴
選擇modules,添加 framework support
選擇Web Application 注意Version,勾選 Create web.xml
刪除index.jsp ,替換為 index.html
處理配置文件
-
在工程下創建resources目錄,專門用于存放配置文件(都放在src下也行,單獨存放可以盡量避免文件集中存放造成的混亂)
-
標記目錄為資源目錄,不標記的話則該目錄不參與編譯
-
標記完成后,顯示效果如下
處理依賴jar包問題
-
在WEB-INF下創建lib目錄
-
必須在WEB-INF下,且目錄名必須叫lib!!!
-
復制jar文件進入lib目錄
-
將lib目錄添加為當前項目的依賴,后續可以用maven統一解決
-
環境級別推薦選擇module 級別,降低對其他項目的影響,name可以空著不寫
-
查看當前項目有那些環境依賴
-
在此位置,可以通過-號解除依賴
2.6.3 IDEA部署-運行web項目
檢查idea是否識別modules為web項目并存在將項目構建成發布結構的配置
-
就是檢查工程目錄下,web目錄有沒有特殊的識別標記
-
以及artifacts下,有沒有對應 _war_exploded,如果沒有,就點擊+號添加
點擊向下箭頭,出現 Edit Configurations選項
出現運行配置界面
點擊+號,添加本地tomcat服務器
因為IDEA 只關聯了一個Tomcat,紅色部分就只有一個Tomcat可選
選擇Deployment,通過+添加要部署到Tomcat中的artifact
applicationContext中是默認的項目上下文路徑,也就是url中需要輸入的路徑,這里可以自己定義,可以和工程名稱不一樣,也可以不寫,但是要保留/,我們這里暫時就用默認的
點擊apply 應用后,回到Server部分. After Launch是配置啟動成功后,是否默認自動打開瀏覽器并輸入URL中的地址,HTTP port是Http連接器目前占用的端口號
點擊OK后,啟動項目,訪問測試
-
綠色箭頭是正常運行模式
-
"小蟲子"是debug運行模式
-
點擊后,查看日志狀態是否有異常
-
瀏覽器自動打開并自動訪問了index.html歡迎頁
工程結構和可以發布的項目結構之間的目錄對應關系
IDEA部署并運行項目的原理
-
idea并沒有直接進將編譯好的項目放入tomcat的webapps中
-
idea根據關聯的tomcat,創建了一個tomcat副本,將項目部署到了這個副本中
-
idea的tomcat副本在C:\用戶\當前用戶\AppData\Local\JetBrains\IntelliJIdea2022.2\tomcat\中
-
idea的tomcat副本并不是一個完整的tomcat,副本里只是準備了和當前項目相關的配置文件而已
-
idea啟動tomcat時,是讓本地tomcat程序按照tomcat副本里的配置文件運行
-
idea的tomcat副本部署項目的模式是通過conf/Catalina/localhost/*.xml配置文件的形式實現項目部署的
三 HTTP協議
3.1 HTTP簡介
HTTP 超文本傳輸協議 (HTTP-Hyper Text transfer protocol),是一個屬于應用層的面向對象的協議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統。它于1990年提出,經過十幾年的使用與發展,得到不斷地完善和擴展。它是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。客戶端與服務端通信時傳輸的內容我們稱之為報文。HTTP協議就是規定報文的格式。HTTP就是一個通信規則,這個規則規定了客戶端發送給服務器的報文格式,也規定了服務器發送給客戶端的報文格式。實際我們要學習的就是這兩種報文。客戶端發送給服務器的稱為"請求報文",服務器發送給客戶端的稱為"響應報文"。
3.1.1 發展歷程
HTTP/0.9
-
蒂姆伯納斯李是一位英國計算機科學家,也是萬維網的發明者。他在 1989 年創建了單行 HTTP 協議。它只是返回一個網頁。這個協議在 1991 年被命名為 HTTP/0.9。
HTTP/1.0
-
1996 年,HTTP/1.0 發布。該規范是顯著擴大,并且支持三種請求方法:GET,Head,和POST。
-
HTTP/1.0 相對于 HTTP/0.9 的改進如下:
-
每個請求都附加了 HTTP 版本。
-
在響應開始時發送狀態代碼。
-
請求和響應都包含 HTTP 報文頭。
-
內容類型能夠傳輸 HTML 文件以外的文檔。
-
-
但是,HTTP/1.0 不是官方標準。
HTTP/1.1
-
HTTP 的第一個標準化版本 HTTP/1.1 ( RFC 2068 ) 于 1997 年初發布,支持七種請求方法:OPTIONS,GET,HEAD,POST,PUT,DELETE,和TRACE
-
HTTP/1.1 是 HTTP 1.0 的增強:
-
虛擬主機允許從單個 IP 地址提供多個域。
-
持久連接和流水線連接允許 Web 瀏覽器通過單個持久連接發送多個請求。
-
緩存支持節省了帶寬并使響應速度更快。
-
-
HTTP/1.1 在接下來的 15 年左右將非常穩定。
-
在此期間,出現了 HTTPS(安全超文本傳輸協議)。它是使用 SSL/TLS 進行安全加密通信的 HTTP 的安全版本。
HTTP/2
-
由IETF在2015年發布。HTTP/2旨在提高Web性能,減少延遲,增加安全性,使Web應用更加快速、高效和可靠。
-
多路復用:HTTP/2 允許同時發送多個請求和響應,而不是像 HTTP/1.1 一樣只能一個一個地處理。這樣可以減少延遲,提高效率,提高網絡吞吐量。
-
二進制傳輸:HTTP/2 使用二進制協議,與 HTTP/1.1 使用的文本協議不同。二進制協議可以更快地解析,更有效地傳輸數據,減少了傳輸過程中的開銷和延遲。
-
頭部壓縮:HTTP/2 使用 HPACK 算法對 HTTP 頭部進行壓縮,減少了頭部傳輸的數據量,從而減少了網絡延遲。
-
服務器推送:HTTP/2 支持服務器推送,允許服務器在客戶端請求之前推送資源,以提高性能。
-
改進的安全性:HTTP/2 默認使用 TLS(Transport Layer Security)加密傳輸數據,提高了安全性。
-
兼容 HTTP/1.1:HTTP/2 可以與 HTTP/1.1 共存,服務器可以同時支持 HTTP/1.1 和 HTTP/2。如果客戶端不支持 HTTP/2,服務器可以回退到 HTTP/1.1。
HTTP/3
-
于 2021 年 5 月 27 日發布 , HTTP/3 是一種新的、快速、可靠且安全的協議,適用于所有形式的設備。 HTTP/3 沒有使用 TCP,而是使用谷歌在 2012 年開發的新協議 QUIC
-
HTTP/3 是繼 HTTP/1.1 和 HTTP/2之后的第三次重大修訂。
-
HTTP/3 帶來了革命性的變化,以提高 Web 性能和安全性。設置 HTTP/3 網站需要服務器和瀏覽器支持。
-
目前,谷歌云、Cloudflare和Fastly支持 HTTP/3。Chrome、Firefox、Edge、Opera 和一些移動瀏覽器支持 HTTP/3。
3.1.2 HTTP協議的會話方式
瀏覽器與服務器之間的通信過程要經歷四個步驟
-
瀏覽器與WEB服務器的連接過程是短暫的,每次連接只處理一個請求和響應。對每一個頁面的訪問,瀏覽器與WEB服務器都要建立一次單獨的連接。
-
瀏覽器到WEB服務器之間的所有通訊都是完全獨立分開的請求和響應對。
3.1.3 HTTP1.0和HTTP1.1的區別
在HTTP1.0版本中,瀏覽器請求一個帶有圖片的網頁,會由于下載圖片而與服務器之間開啟一個新的連接;但在HTTP1.1版本中,允許瀏覽器在拿到當前請求對應的全部資源后再斷開連接,提高了效率。
3.1.4 在瀏覽器中通過F12工具抓取請求響應報文包
幾乎所有的PC端瀏覽器都支持了F12開發者工具,只不過不同的瀏覽器工具顯示的窗口有差異
3.2 請求和響應報文
3.2.1 報文的格式
主體上分為報文首部和報文主體,中間空行隔開
報文部首可以繼續細分為 "行" 和 "頭"
3.2.2 請求報文
客戶端發給服務端的報文
-
請求報文格式
-
請求首行(請求行); GET/POST 資源路徑?參數 HTTP/1.1
-
請求頭信息(請求頭);
-
空行;
-
請求體;POST請求才有請求體
-
瀏覽器 f12 網絡下查看請求數據包
form表單發送GET請求特點
1、由于請求參數在請求首行中已經攜帶了,所以沒有請求體,也沒有請求空行 2、請求參數拼接在url地址中,地址欄可見[url?name1=value1&name2=value2],不安全 3、由于參數在地址欄中攜帶,所以由大小限制[地址欄數據大小一般限制為4k],只能攜帶純文本 4、get請求參數只能上傳文本數據 5、沒有請求體。所以封裝和解析都快,效率高, 瀏覽器默認提交的請求都是get請求比如:地址欄輸入回車,超鏈接,表單默認的提交方式
查看GET請求行,請求頭,請求體
-
請求行組成部分
-
請求方式 GET
-
訪問服務器的資源路徑?參數1=值1&參數2=值2 ... ...
-
協議及版本 HTTP/1.1
-
GET /05_web_tomcat/login_success.html?username=admin&password=123213 HTTP/1.1
-
請求頭
-主機虛擬地址 Host: localhost:8080 ? -長連接 Connection: keep-alive -請求協議的自動升級[http的請求,服務器卻是https的,瀏覽器自動會將請求協議升級為https的] Upgrade-Insecure-Requests: 1 ? - 用戶系統信息 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36 - 瀏覽器支持的文件類型 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 - 當前頁面的上一個頁面的路徑[當前頁面通過哪個頁面跳轉過來的]: ? 可以通過此路徑跳轉回上一個頁面, 廣告計費,防止盜鏈 Referer: http://localhost:8080/05_web_tomcat/login.html - 瀏覽器支持的壓縮格式 Accept-Encoding: gzip, deflate, br - 瀏覽器支持的語言 Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
-
請求空行
-
請求體
-
GET請求數據不放在請求體
-
form表單發送post請求特點
1、POST請求有請求體,而GET請求沒有請求體。 2、post請求數據在請求體中攜帶,請求體數據大小沒有限制,可以用來上傳所有內容[文件、文本] 3、只能使用post請求上傳文件 4、post請求報文多了和請求體相關的配置[請求頭] 5、地址欄參數不可見,相對安全 6、post效率比get低
-
POST請求要求將form標簽的method的屬性設置為post
查看post的請求行 請求頭 請求體
-
請求行組成部分
-
請求方式 POST
-
訪問服務器的資源路徑?參數1=值1&參數2=值2 ... ...
-
協議及版本 HTTP/1.1
-
POST /05_web_tomcat/login_success.html HTTP/1.1
-
請求頭
Host: localhost:8080 Connection: keep-alive Content-Length: 31 ? ? -請求體內容的長度 Cache-Control: max-age=0 -無緩存 Origin: http://localhost:8080 Upgrade-Insecure-Requests: 1 -協議的自動升級 Content-Type: application/x-www-form-urlencoded ? -請求體內容類型[服務器根據類型解析請求體參數] User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Referer: http://localhost:8080/05_web_tomcat/login.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7 Cookie:JSESSIONID-
-
請求空行
-
請求體:瀏覽器提交給服務器的數據
username=admin&password=1232131
3.2.3 響應報文
響應報文格式
-
響應首行(響應行); 協議/版本 狀態碼 狀態碼描述
-
響應頭信息(響應頭);
-
空行;
-
響應體;
-
響應行組成部分
-
協議及版本 HTTP/1.1
-
響應狀態碼 200
-
狀態描述 OK (缺省)
-
HTTP/1.1 200 OK 說明:響應協議為HTTP1.1,響應狀態碼為200,表示請求成功;
-
響應頭
Server: Apache-Coyote/1.1 ? 服務器的版本信息 Accept-Ranges: bytes ETag: W/"157-1534126125811" Last-Modified: Mon, 13 Aug 2018 02:08:45 GMT Content-Type: text/html ? 響應體數據的類型[瀏覽器根據類型解析響應體數據] Content-Length: 157 ? 響應體內容的字節數 Date: Mon, 13 Aug 2018 02:47:57 GMT 響應的時間,這可能會有8小時的時區差
-
響應體
<!--需要瀏覽器解析使用的內容[如果響應的是html頁面,最終響應體內容會被瀏覽器顯示到頁面中]--> ? <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>Insert title here</title></head><body>恭喜你,登錄成功了...</body> </html>
響應狀態碼:響應碼對瀏覽器來說很重要,它告訴瀏覽器響應的結果。比較有代表性的響應碼如下:
-
200: 請求成功,瀏覽器會把響應體內容(通常是html)顯示在瀏覽器中;
-
302: 重定向,當響應碼為302時,表示服務器要求瀏覽器重新再發一個請求,服務器會發送一個響應頭Location指定新請求的URL地址;
-
304: 使用了本地緩存
-
404: 請求的資源沒有找到,說明客戶端錯誤的請求了不存在的資源;
-
405: 請求的方式不允許
-
500: 請求資源找到了,但服務器內部出現了錯誤;
更多的響應狀態碼
狀態碼 | 狀態碼英文描述 | 中文含義 |
---|---|---|
1** | ||
100 | Continue | 繼續。客戶端應繼續其請求 |
101 | Switching Protocols | 切換協議。服務器根據客戶端的請求切換協議。只能切換到更高級的協議,例如,切換到HTTP的新版本協議 |
2** | ||
200 | OK | 請求成功。一般用于GET與POST請求 |
201 | Created | 已創建。成功請求并創建了新的資源 |
202 | Accepted | 已接受。已經接受請求,但未處理完成 |
203 | Non-Authoritative Information | 非授權信息。請求成功。但返回的meta信息不在原始的服務器,而是一個副本 |
204 | No Content | 無內容。服務器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文檔 |
205 | Reset Content | 重置內容。服務器處理成功,用戶終端(例如:瀏覽器)應重置文檔視圖。可通過此返回碼清除瀏覽器的表單域 |
206 | Partial Content | 部分內容。服務器成功處理了部分GET請求 |
3** | ||
300 | Multiple Choices | 多種選擇。請求的資源可包括多個位置,相應可返回一個資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇 |
301 | Moved Permanently | 永久移動。請求的資源已被永久的移動到新URI,返回信息會包括新的URI,瀏覽器會自動定向到新URI。今后任何新的請求都應使用新的URI代替 |
302 | Found | 臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URI |
303 | See Other | 查看其它地址。與301類似。使用GET和POST請求查看 |
304 | Not Modified | 未修改。所請求的資源未修改,服務器返回此狀態碼時,不會返回任何資源。客戶端通常會緩存訪問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源 |
305 | Use Proxy | 使用代理。所請求的資源必須通過代理訪問 |
306 | Unused | 已經被廢棄的HTTP狀態碼 |
307 | Temporary Redirect | 臨時重定向。與302類似。使用GET請求重定向 |
4** | ||
400 | Bad Request | 客戶端請求的語法錯誤,服務器無法理解 |
401 | Unauthorized | 請求要求用戶的身份認證 |
402 | Payment Required | 保留,將來使用 |
403 | Forbidden | 服務器理解請求客戶端的請求,但是拒絕執行此請求 |
404 | Not Found | 服務器無法根據客戶端的請求找到資源(網頁)。通過此代碼,網站設計人員可設置"您所請求的資源無法找到"的個性頁面 |
405 | Method Not Allowed | 客戶端請求中的方法被禁止 |
406 | Not Acceptable | 服務器無法根據客戶端請求的內容特性完成請求 |
407 | Proxy Authentication Required | 請求要求代理的身份認證,與401類似,但請求者應當使用代理進行授權 |
408 | Request Time-out | 服務器等待客戶端發送的請求時間過長,超時 |
409 | Conflict | 服務器完成客戶端的 PUT 請求時可能返回此代碼,服務器處理請求時發生了沖突 |
410 | Gone | 客戶端請求的資源已經不存在。410不同于404,如果資源以前有現在被永久刪除了可使用410代碼,網站設計人員可通過301代碼指定資源的新位置 |
411 | Length Required | 服務器無法處理客戶端發送的不帶Content-Length的請求信息 |
412 | Precondition Failed | 客戶端請求信息的先決條件錯誤 |
413 | Request Entity Too Large | 由于請求的實體過大,服務器無法處理,因此拒絕請求。為防止客戶端的連續請求,服務器可能會關閉連接。如果只是服務器暫時無法處理,則會包含一個Retry-After的響應信息 |
414 | Request-URI Too Large | 請求的URI過長(URI通常為網址),服務器無法處理 |
415 | Unsupported Media Type | 服務器無法處理請求附帶的媒體格式 |
416 | Requested range not satisfiable | 客戶端請求的范圍無效 |
417 | Expectation Failed | 服務器無法滿足Expect的請求頭信息 |
5** | ||
500 | Internal Server Error | 服務器內部錯誤,無法完成請求 |
501 | Not Implemented | 服務器不支持請求的功能,無法完成請求 |
502 | Bad Gateway | 作為網關或者代理工作的服務器嘗試執行請求時,從遠程服務器接收到了一個無效的響應 |
503 | Service Unavailable | 由于超載或系統維護,服務器暫時的無法處理客戶端的請求。延時的長度可包含在服務器的Retry-After頭信息中 |
504 | Gateway Time-out | 充當網關或代理的服務器,未及時從遠端服務器獲取請求 |
505 | HTTP Version not supported | 服務器不支持請求的HTTP協議的版本,無法完成處理 |