javaweb開發筆記——XML_Tomcat10_HTTP

第四章 XML_Tomcat10_HTTP

一 XML

XML是EXtensible Markup Language的縮寫,翻譯過來就是可擴展標記語言。所以很明顯,XML和HTML一樣都是標記語言,也就是說它們的基本語法都是標簽。

  • 可擴展 三個字表面上的意思是XML允許自定義格式。但這不代表你可以隨便寫。

  • 在XML基本語法規范的基礎上,你使用的那些第三方應用程序、框架會通過XML約束的方式強制規定配置文件中可以寫什么和怎么寫

  • XML基本語法這個知識點的定位是:我們不需要從零開始,從頭到尾的一行一行編寫XML文檔,而是在第三方應用程序、框架已提供的配置文件的基礎上修改。要改成什么樣取決于你的需求,而怎么改取決XML基本語法和具體的XML約束。

1.1 常見配置文件類型

  1. properties文件,例如druid連接池就是使用properties文件作為配置文件

  2. XML文件,例如Tomcat就是使用XML文件作為配置文件

  3. YAML文件,例如SpringBoot就是使用YAML作為配置文件

  4. json文件,通常用來做文件傳輸,也可以用來做前端或者移動端的配置文件

  5. 等等...

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的使用步驟

  1. 導入jar包 dom4j.jar

  2. 創建解析器對象(SAXReader)

  3. 解析xml 獲得Document對象

  4. 獲取根節點RootElement

  5. 獲取根節點下的子節點

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 VersionEE Version
6.1Jakarta EE ?
6.0Jakarta EE 10
5.0Jakarta EE 9/9.1
4.0JAVA EE 8
3.1JAVA EE 7
3.1JAVA EE 7
3.0JAVAEE 6
  • Tomcat 版本和Servlet版本之間的對應關系

Servlet VersionTomcat VersionJDK Version
6.111.0.x17 and later
6.010.1.x11 and later
5.010.0.x (superseded)8 and later
4.09.0.x8 and later
3.18.5.x7 and later
3.18.0.x (superseded)7 and later
3.07.0.x (archived)6 and later (7 and later for WebSocket)

下載

  • Tomcat官方網站:Apache Tomcat? - Welcome!

  • 安裝版:需要安裝,一般不考慮使用。

  • 解壓版: 直接解壓縮使用,我們使用的版本。

安裝

  1. 正確安裝JDK并配置JAVA_HOME(以JDK17為例 https://injdk.cn中可以下載各種版本的JDK)

  1. 解壓tomcat到非中文無空格目錄

  1. 點擊bin/startup.bat啟動

  1. 打開瀏覽器輸入 http://localhost:8080訪問測試

  1. 直接關閉窗口或者運行 bin/shutdown.bat關閉tomcat

  1. 處理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**
100Continue繼續。客戶端應繼續其請求
101Switching Protocols切換協議。服務器根據客戶端的請求切換協議。只能切換到更高級的協議,例如,切換到HTTP的新版本協議
2**
200OK請求成功。一般用于GET與POST請求
201Created已創建。成功請求并創建了新的資源
202Accepted已接受。已經接受請求,但未處理完成
203Non-Authoritative Information非授權信息。請求成功。但返回的meta信息不在原始的服務器,而是一個副本
204No Content無內容。服務器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文檔
205Reset Content重置內容。服務器處理成功,用戶終端(例如:瀏覽器)應重置文檔視圖。可通過此返回碼清除瀏覽器的表單域
206Partial Content部分內容。服務器成功處理了部分GET請求
3**
300Multiple Choices多種選擇。請求的資源可包括多個位置,相應可返回一個資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇
301Moved Permanently永久移動。請求的資源已被永久的移動到新URI,返回信息會包括新的URI,瀏覽器會自動定向到新URI。今后任何新的請求都應使用新的URI代替
302Found臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URI
303See Other查看其它地址。與301類似。使用GET和POST請求查看
304Not Modified未修改。所請求的資源未修改,服務器返回此狀態碼時,不會返回任何資源。客戶端通常會緩存訪問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源
305Use Proxy使用代理。所請求的資源必須通過代理訪問
306Unused已經被廢棄的HTTP狀態碼
307Temporary Redirect臨時重定向。與302類似。使用GET請求重定向
4**
400Bad Request客戶端請求的語法錯誤,服務器無法理解
401Unauthorized請求要求用戶的身份認證
402Payment Required保留,將來使用
403Forbidden服務器理解請求客戶端的請求,但是拒絕執行此請求
404Not Found服務器無法根據客戶端的請求找到資源(網頁)。通過此代碼,網站設計人員可設置"您所請求的資源無法找到"的個性頁面
405Method Not Allowed客戶端請求中的方法被禁止
406Not Acceptable服務器無法根據客戶端請求的內容特性完成請求
407Proxy Authentication Required請求要求代理的身份認證,與401類似,但請求者應當使用代理進行授權
408Request Time-out服務器等待客戶端發送的請求時間過長,超時
409Conflict服務器完成客戶端的 PUT 請求時可能返回此代碼,服務器處理請求時發生了沖突
410Gone客戶端請求的資源已經不存在。410不同于404,如果資源以前有現在被永久刪除了可使用410代碼,網站設計人員可通過301代碼指定資源的新位置
411Length Required服務器無法處理客戶端發送的不帶Content-Length的請求信息
412Precondition Failed客戶端請求信息的先決條件錯誤
413Request Entity Too Large由于請求的實體過大,服務器無法處理,因此拒絕請求。為防止客戶端的連續請求,服務器可能會關閉連接。如果只是服務器暫時無法處理,則會包含一個Retry-After的響應信息
414Request-URI Too Large請求的URI過長(URI通常為網址),服務器無法處理
415Unsupported Media Type服務器無法處理請求附帶的媒體格式
416Requested range not satisfiable客戶端請求的范圍無效
417Expectation Failed服務器無法滿足Expect的請求頭信息
5**
500Internal Server Error服務器內部錯誤,無法完成請求
501Not Implemented服務器不支持請求的功能,無法完成請求
502Bad Gateway作為網關或者代理工作的服務器嘗試執行請求時,從遠程服務器接收到了一個無效的響應
503Service Unavailable由于超載或系統維護,服務器暫時的無法處理客戶端的請求。延時的長度可包含在服務器的Retry-After頭信息中
504Gateway Time-out充當網關或代理的服務器,未及時從遠端服務器獲取請求
505HTTP Version not supported服務器不支持請求的HTTP協議的版本,無法完成處理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94504.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python從入門到自動化運維

文章目錄IPO編程方式、print、input函數print() -- 輸出信息到屏幕input() -- 讀取用戶的輸入基本數據類型int、float、bool、str常用 str 操作方法格式化字符串的三種方式數據驗證方法字符串拼接字符串去重數據類型轉換函數容器類型列表(list)&#xff1a;可變、可重復、有序元…

【數據可視化-98】2025年上半年地方財政收入Top 20城市可視化分析:Python + Pyecharts打造炫酷暗黑主題大屏

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

【基礎-單選】向服務器提交表單數據,以下哪種請求方式比較合適

向服務器提交表單數據&#xff0c;以下哪種請求方式比較合適A.RequestMethod.GET B.RequestMethod.PUT C.RequestMethod.POST D.RequestMethod.DELETE 解釋如下&#xff1a; 在HarmonyOS應用開發中&#xff0c;向服務器提交表單數據&#xff0c;C. RequestMethod.POST 是比較合…

論文閱讀:Code as Policies: Language Model Programs for Embodied Control

地址&#xff1a;Code as Policies: Language Model Programs for Embodied Control 摘要 針對代碼補全任務訓練的大型語言模型&#xff08;LLMs&#xff09;已被證實能夠從文檔字符串&#xff08;docstrings&#xff09;中合成簡單的 Python 程序。研究發現&#xff0c;這些…

Vue 3 customRef 完全指南:自定義響應式引用的終極教程

&#x1f4d6; 概述 customRef() 是 Vue 3 中用于創建自定義響應式引用的組合式 API。它允許開發者完全控制響應式數據的讀取和寫入行為&#xff0c;為復雜的響應式邏輯提供了強大的靈活性。 &#x1f3af; 基本概念 什么是 customRef&#xff1f; customRef() 是一個工廠函數…

Java項目-蒼穹外賣_Day1

項目來源&#xff1a; 【黑馬程序員 Java項目實戰《蒼穹外賣》】 [https://www.bilibili.com/video/BV1TP411v7v6] ZZHow(ZZHow1024) 軟件開發整體介紹 軟件開發流程 需求分析&#xff1a;需求規格說明書、產品原型。設計&#xff1a;UI 設計、數據庫設計、接口設計。編碼…

面試可能問到的問題思考-MySQL

MySQL 1. 數據庫與緩存的一致性 引入緩存&#xff0c;因為緩存只是數據庫數據的副本&#xff0c;那么就可能存在副本和原數據不一致的情況 一致性 ACID里面的C&#xff0c;和CAP中的C不是一個概念&#xff0c;雖然都叫一致性。CAP中的C&#xff0c;指的是多個副本之間邏輯上…

【Java】 Spring Security 賦能 OAuth 2.0:構建安全高效的現代認證體系

還在為高昂的AI開發成本發愁?這本書教你如何在個人電腦上引爆DeepSeek的澎湃算力! 在當今數字化時代,認證與授權已成為應用系統安全的核心。OAuth 2.0 作為一種開放標準協議,廣泛應用于第三方授權場景中,而 Spring Security 則提供了強大的框架支持來實現這一協議。本文深…

實際工作幾月后常用相關命令筆記記錄

目前&#xff0c;我這只工程師幼崽經歷幾個月的工作&#xff0c;不能說是收獲很多&#xff0c;也算是成長經驗1吧。主要工作后才知道好多東西都是自己不會的不了解的&#xff0c;但是工作需要不一定自己完全吃透&#xff0c;在合適的地方正確的使用一般情況就ok了&#xff0c;所…

突破傳統文本切片的瓶頸:AntSK-FileChunk語義切片技術詳解前言:為什么我們需要重新思考文本切片?

在當今大語言模型&#xff08;LLM&#xff09;應用蓬勃發展的時代&#xff0c;我們面臨著一個看似簡單卻至關重要的問題&#xff1a;如何有效地處理長文本&#xff1f;無論是構建知識庫、實現RAG&#xff08;檢索增強生成&#xff09;系統&#xff0c;還是進行文檔智能分析&…

LeetCode-542. 01 矩陣

1、題目描述給定一個由 0 和 1 組成的矩陣 mat &#xff0c;請輸出一個大小相同的矩陣&#xff0c;其中每一個格子是 mat 中對應位置元素到最近的 0 的距離。兩個相鄰元素間的距離為 1 。示例 1&#xff1a;輸入&#xff1a;mat [[0,0,0],[0,1,0],[0,0,0]] 輸出&#xff1a;[[…

Elasticsearch如何確保數據一致性?

Elasticsearch 通過多種機制確保數據在分布式環境中的一致性&#xff0c;但由于其分布式和近實時&#xff08;Near Real-Time, NRT&#xff09;的特性&#xff0c;它提供的是最終一致性&#xff08;Eventual Consistency&#xff09;&#xff0c;而非強一致性。以下是核心機制和…

2026畢設選題-大數據-基于 Spring Boot的化妝品推薦系統的設計與實現

技術范圍&#xff1a;大數據、物聯網、SpringBoot、Vue、SSM、HLMT、小程序、PHP、Nodejs、Python、爬蟲、數據可視化、安卓App、機器學習等設計與開發。 主要內容&#xff1a;功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文降重、長…

數據結構算法:順序表

數據結構&#xff1a;順序表一.寄包柜1.題目如何創建數組&#xff1f;1. 需求本質2. 傳統靜態數組的缺陷3. 動態方案&#xff1a;向量的數組4. 核心邏輯5. 關鍵優勢總結2.解題思路2.1題目分析2.2具體解題邏輯拆解步驟2.3總結2.4參考代碼二.移動零1.題目2.解題思路2.1**解題核心…

IIS 安裝了.netcore運行時 還是報錯 HTTP 錯誤 500.19

IIS 安裝了.netcore運行時 還是報錯 HTTP 錯誤 500.19 - Internal Server Error 錯誤代碼 0x8007000d 我甚至是先安裝的SDK&#xff0c;再安裝的運行時runtime的安裝包&#xff0c;都不行。 而且在IIS的模塊中&#xff0c;找不到 AspNetCoreModuleV2。 最后在微軟官網n…

Flink 滑動窗口實戰:從 KeyedProcessFunction 到 AggregateFunction WindowFunction 的完整旅程

一、業務背景 我們要在 Flink 實時流上統計 每個用戶-品牌組合最近 1 小時的最晚行為時間&#xff0c;并且每 5 分鐘更新一次結果。 數據來自 Kafka&#xff0c;事件類型為 CartEvent&#xff1a; public class CartEvent {public String userId;public String brandId;public …

Kubernetes“城市規劃”指南:告別資源擁堵與預算超支,打造高效云原生都市

導讀&#xff1a; 如果把你的Kubernetes集群想象成一座拔地而起的現代化大都市&#xff0c;那么你&#xff0c;平臺工程師&#xff0c;就是這座城市的首席規劃師。然而&#xff0c;為何我們精心打造的許多“云原生都市”正迅速陷入交通擁堵、資源閑置和預算超支的困境&#xff…

2.4 Flink運行時架構:Task、SubTask、ExecutionGraph的關系

在理解Flink運行時架構之前&#xff0c;我們先用一個生活化的比喻來建立直觀認識&#xff1a; 想象你是一家大型工廠的總經理&#xff0c;需要生產一批復雜的產品。你會怎么做&#xff1f; 制定生產計劃&#xff1a;首先畫出生產流程圖&#xff0c;明確每個環節的工作內容分解任…

`mysql_query()` 數據庫查詢函數

1) 函數的概念與用途 mysql_query() 是 MySQL C API 中的核心函數&#xff0c;用于向 MySQL 服務器發送 SQL 查詢語句。這個函數充當了 C/C 應用程序與 MySQL 數據庫之間的橋梁&#xff0c;允許程序執行各種數據庫操作。 可以將 mysql_query() 想象成一個"數據庫信使"…

[系統架構設計師]通信系統架構設計理論與實踐(十七)

[系統架構設計師]通信系統架構設計理論與實踐&#xff08;十七&#xff09; 一.通信系統網絡架構 形式: 局域網&#xff0c;廣域網&#xff0c;移動通信網 1.局域網網絡架構 單一機構專用計算機的網絡 組成&#xff1a;計算機&#xff0c;交換機&#xff0c;路由器 特點&#x…