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