JavaWeb學習總結(一)JavaWeb入門與Tomcat


一、常見軟件系統體系結構B/S、C/S

1. C/S

  • C/S結構即客戶端/服務器(Client/Server),例如QQ;
  • 需要編寫服務器端程序,以及客戶端程序,例如我們安裝的就是QQ的客戶端程序;
  • 缺點:軟件更新時需要同時更新客戶端和服務器端兩端,比較麻煩;
  • 優點:安全性比較好。

2. B/S

  • B/S結構即瀏覽器/服務器(Browser/Server);
  • 優點:只需要編寫服務器端程序;
  • 缺點:安全性較差。

 

二、Web資源與Web服務器

1. Web資源

  • html:靜態資源;
  • JSP/Servlet :動態資源。

當然,除了JavaWeb程序,還有其他Web程序,例如:ASP、PHP等。

2. Web服務器

Web服務器的作用是接收客戶端的請求,給客戶端作出響應。

對於JavaWeb程序而已,還需要有JSP/Servlet容器,JSP/Servlet容器的基本功能是把動態資源轉換成靜態資源。

我們需要使用的是Web服務器和JSP/Servlet容器,通常這兩者會集於一身。下面是對JavaWeb服務器:

  • Tomcat(Apache):當前應用最廣的JavaWeb服務器;
  • JBoss(Redhat紅帽):支持JavaEE,應用比較廣;EJB容器;
  • GlassFish(Orcale):Oracle開發JavaWeb服務器,應用不是很廣;
  • Resin(Caucho):支持JavaEE,應用越來越廣;
  • Weblogic(Orcale):要錢的!支持JavaEE,適合大型項目;
  • Websphere(IBM):要錢的!支持JavaEE,適合大型項目;

 

三、Tomcat

1. Tomcat概述 

Tomcat服務器由Apache提供,開源免費。由於Sun和其他公司參與到了Tomcat的開發中,所以最新的JSP/Servlet規范總是能在Tomcat中體現出來。Tomcat7支持Servlet3.0,而Tomcat6只支持Servlet2.5!

2. 安裝、啟動、配置Tomcat

下載Tomcat可以到http://tomcat.apache.org下載。

Tomcat分為安裝版和解壓版:

  • 安裝版:一台電腦上只能安裝一個Tomcat;
  • 解壓版:無需安裝,解壓即可用,解壓多少份都可以,所以我們選擇解壓版。

 

3. 啟動和關閉Tomcat

在啟動Tomcat之前,我們必須要配置環境變量:

  • JAVA_HOME:必須先配置JAVA_HOME,因為Tomcat啟動需要使用JDK;
  • CATALANA_HOME:如果是安裝版,那么還需要配置這個變量,這個變量用來指定Tomcat的安裝路徑,例如:F:\apache-tomcat-7.0.42。
  • 啟動:進入%CATALANA_HOME%\bin目錄,找到startup.bat ,雙擊即可;
  • 關閉:進入%CATALANA_HOME%\bin目錄,找到shutdown.bat,雙擊即可;

startup.bat會調用catalina.bat,而catalina.bat會調用setclasspath.bat,setclasspath.bat會使用JAVA_HOME環境變量,所以我們必須在啟動Tomcat之前把JAVA_HOME配置正確。

啟動問題:點擊startup.bat后窗口一閃即消失:檢查JAVA_HOME環境變量配置是否正確;

訪問:http://localhost:8080進入Tomcat主頁

4. 配置端口號

打開%CATALANA_HOME%\conf\server.xml文件:

http默認端口號為80,也就是說在URL中不給出端口號時就表示使用80端口。當然你也可以修改為其它端口號。

當把端口號修改為80后,在瀏覽器中只需要輸入:http://localhost就可以訪問Tomcat主頁了。

 5. Tomcat的目錄結構

 
  • bin:該目錄下存放的是二進制可執行文件,如果是安裝版,那么這個目錄下會有兩個exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下啟動Tomcat,后者是彈出UGI窗口啟動Tomcat;如果是解壓版,那么會有startup.bat和shutdown.bat文件,startup.bat用來啟動Tomcat,但需要先配置JAVA_HOME環境變量才能啟動,shutdawn.bat用來停止Tomcat;
  • conf:這是一個非常非常重要的目錄,這個目錄下有四個最為重要的文件:

    • server.xml:配置整個服務器信息。例如修改端口號,添加虛擬主機等;下面會詳細介紹這個文件;
    • tomcatusers.xml:存儲tomcat用戶的文件,這里保存的是tomcat的用戶名及密碼,以及用戶的角色信息。可以按着該文件中的注釋信息添加tomcat用戶,然后就可以在Tomcat主頁中進入Tomcat Manager頁面了;
    • 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是一個特殊的項目,在地址欄中沒有給出項目目錄時,對應的就是ROOT項目。http://localhost:8080/examples,進入示例項目。其中examples就是項目名,即文件夾的名字;
  • work:運行時生成的文件,最終運行的文件都在這里。通過webapps中的項目生成的!可以把這個目錄下的內容刪除,再次運行時會生再次生成work目錄。當客戶端用戶訪問一個JSP文件時,Tomcat會通過JSP生成Java文件,然后再編譯Java文件生成class文件,生成的java和class文件都會存放到這個目錄下;
  • LICENSE:許可證;
  • NOTICE:說明文件;

 

四、Web應用

靜態網站:

  • 在webapps目錄下創建一個目錄(命名必須不包含中文和空格),這個目錄稱之為項目目錄;
  • 在項目目錄下創建一個html文件;

動態網站:

  • 在webapps目錄下創建一個項目目錄;
  • 在項目目錄下創建如下內容:
    • WEB-INF目錄:在WEB-INF目錄下創建web.xml文件(web.xml文件的內容,我們可以去其他項目中借!)
    • 創建靜態或動態頁面;

1. 創建靜態應用

  • 在webapps下創建一個hello目錄;
  • 在webapps\hello\下創建index.html;
  • 啟動tomcat;
  • 打開瀏覽器訪問http://localhost:8080/hello/index.html

index.html

1 <html>
2   <head>
3     <title>hello</title>
4   </head>
5   <body>
6     <h1>Hello World!</h1>
7   </body>
8 </html>

2. 創建動態應用

  • 在webapps下創建hello1目錄;
  • 在webapps\hello1\下創建WEB-INF目錄;
  • 在webapps\hello1\WEB-INF\下創建web.xml;
  • 在webapps\hello1\下創建index.html。
  • 打開瀏覽器訪問http://localhost:8080/hello/index.html

web.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="2.5" 
3     xmlns="http://java.sun.com/xml/ns/javaee" 
4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
7 </web-app>

完整的Web應用還需要在WEB-INF目錄下創建:

  • classes;
  • lib目錄;

webapps

  |- hello

    |-index.html

    |-WEB-INF

      |-web.xml

      |-classes

      |-lib

hello:應用目錄,hello就是應用的名稱;

  • index.html:應用資源。應用下可以有多個資源,例如css、js、html、jsp等,也可以把資源放到文件夾中,例如:hello\html\index.html,這時訪問URL為:http://localhost:8080/hello/html/index.html;
  • WEB-INF:這個目錄名稱必須是大寫,這個目錄下的東西是無法通過瀏覽器直接訪問的,也就是說放到這里的東西是安全的;
  • web.xml:應用程序的部署描述符文件,可以在該文件中對應用進行配置,例如配置應用的首頁:

         <welcome-file-list>

            <welcome-file>index.html</welcome-file>

         </welcome-file-list>

  • classes:存放class文件的目錄;
  • lib:存放jar包的目錄;

3. 配置外部應用

原來我們的項目放到webapps下,現在我放到外面,也希望tomcat可以找到它!

也可以把應用放到Tomcat之外,這就是外部應用了。例如我們把上面寫的hello應用從webapps目錄中剪切到C盤下,即C:/hello。現在hello這個Web應用已經不在Tomcat中了,這時我們需要在tomcat中配置外部應用的位置,配置的方式一共有兩種:

  • conf/server.xml:打開server.xml文件,找到<Host>元素,在其中添加<Context>元素,代碼如下:

server.xml

<Host name="localhost" appBase="webapps"
        unpackWARs="true" autoDeploy="true">
        <Context path="hello" docBase="C:/hello"/>
</Host>

1) path:指定當前應用的名稱;

2) docBase:指定應用的物理位置;

3) 瀏覽器訪問路徑:http://localhost:8080/hello/index.html

  • conf/catalana/localhost:在該目錄下創建hello.xml文件,在該文件中編寫<Context>元素,代碼如下:
<Context docBase="C:/hello"/>

1)     文件名:指定當前應用的名稱;

2)     docBase:指定應用的物理位置;

3)     瀏覽器訪問路徑:http://localhost:8080/hello/index.html

4. 理解server.xml

<Server>

  <Servier>

    <Connector>

    <Engine>

      <Host>

        <Context>

  • <Server>:根元素,表示整個服務器的配置信息;
  • <Service>:<Server>的子元素,在<Server>中只能有一個<Service>元素,它表示服務;
  • <Connector>:<Service>的子元素,在<Service>中可以有N個<Connector>元素,它表示連接。
  • <Engine>:<Service>的子元素,在<Service>中只能有一<Engine>元素,該元素表示引擎,它是<Service>組件的核心。
  • <Host>:<Engine>的子元素,在<Engine>中可以有N個<Host>元素,每個<Host>元素表示一個虛擬主機。所謂虛擬主機就像是真的主機一樣,每個主機都有自己的主機名和項目目錄。例如<Host name=”localhost” appBase=”webapps”>表示主機名為localhost,這個主機的項目存放在webapps目錄中。訪問這個項目下的主機時,需要使用localhost主機名,項目都存放在webapps目錄下。
  • <Context>:<Host>元素的子元素,在<Host>中可以有N個<Context>元素,每個<Context>元素表示一個應用。如果應用在<Host>的appBase指定的目錄下,那么可以不配置<Context>元素,如果是外部應用,那么就必須配置<Context>。如果要為應用指定資源,也需要配置<Context>元素。

 

我們可以把<Server>看作是一個大酒店:

  • <Service>:酒店的服務部門;
  • <Connector>:服務員;
  • <Engine>:后廚;
  • <Host>:后廚中的一個區,例如川菜區是一個<Host>、粵菜區是一個<Host>;
  • <Context>:后廚的一個廚師。

用戶發出一個請求:http://localhost:8080/hello/index.jsp。發現是http/1.1協議,而且還是8080端口,所以就交給了處理這一請求的“服務員(處理HTTP請求的<Connector>)”,“服務員”再把請求交給了“后廚(<Engine>)”,因為請求是要一盤水煮魚,所以由“川菜區(<Host>)”負責,因為“大老王師傅<Context>”做水煮魚最地道,所以由它完成。

  • <Connector>:關心請求中的http、和8080;
  • < Host>:關心localhost;
  • <Context>:關心hello

 

我們的目標是,在瀏覽器中輸出:http://www.baidu.com就可以訪問我們的項目。

完成這一目標,我們需要做三件事:

  • 修改端口號為80;
  • 在本機上可以解析域名為127.0.0.1,這需要修改C:\WINDOWS\system32\drivers\etc\hosts文件,添加對http://www.baidu.com和127.0.01的綁定關系;
  • 在server.xml文件中添加一個<Host>(主機)。

1) 修改端口號為80

2) 綁定http://www.baidu.com和127.0.01的綁定關系

  127.0.0.1       www.baidu.com

3) server.xml文件中添加一個<Host>

<Host name="www.baidu.com" appBase="F:/Mywebapps"
        unpackWARs="true" autoDeploy="true">
</Host>

name=”www.baidu.com”:指定虛擬主機名為www.baidu.com;

appBase=”F:/Mywebapps”:指定當前虛擬主機的應用程序存放目錄為F:/Mywebapps。

在Mywebapps目錄下創建名為ROOT的應用,因為一個主機只可以有一個名為ROOT的應用,名為ROOT的應用在瀏覽器中訪問是可以不給出應用名稱。

請注意,只有本機可以通過http://www.baidu.com來訪問,而其他電腦不可以!

 

五、MyEclipse創建JavaWeb應用

 1. 配置Tomcat

使用MyEclipse配置服務器后,就可以使用MyEclipse來啟動和停止服務器了。當然,你需要先安裝好服務器(Tomcat),才能配置。

MyEclipse自帶了一個Tomcat,強烈建議不要使用它。所以,我們需要先把MyEclipse自帶的Tomcat關閉,然后再來配置我們自己的Tomcat。

  • 關閉MyEclipse自帶Tomcat。

在工具欄中找到,點擊下箭頭,點擊Configure Server Connector

彈出對話框

  • 配置我們自己的Tomcat
 
 

使用MyEclipse啟動Tomcat

2. 創建JavaWeb應用

 
 
 
 

3. 啟動Tomcat

 

上面兩種方式都可以啟動tomcat

4. 關閉tomcat

與啟動Tomcat相同位置下方就是Stop Server,即可關閉tomcat了。

5. 發布項目到tomcat的webapps目錄

 

 

項目發布后,就是把項目的WebRoot目錄copy到Tomcat的webapps目錄,並把WebRoot重命名為項目名稱,即hello。所以在Tomcat的webapps下會多出一個文件夾hello。

6. 打war包

JavaSE程序可以打包成Jar包,而JavaWeb程序可以打包成war包。然后把war發布到Tomcat的webapps目錄下,Tomcat會在啟動時自動解壓war包。

 
 

六、HTTP協議

協議:協議的甲乙雙方,就是客戶端(瀏覽器)和服務器!
  理解成雙方通信的格式!

  • 請求協議;
  • 響應協議;

1. 安裝HttpWatch

HttpWatch是專門為IE瀏覽器提供的,用來查看HTTP請求和響應內容的工具。而FireFox上需要安裝FireBug軟件。如果你使用的是Chrome,那么就不用自行安裝什么工具了,因為它自身就有查看請求和響應內容的功能!

HttpWatch和FireBug這些工具對瀏覽器而言不是必須的,但對我們開發者是很有幫助的,通過查看HTTP請求響應內容,可以使我們更好的學習HTTP協議。

2. HTTP概述

HTTP(hypertext transport protocol),即超文本傳輸協議。這個協議詳細規定了瀏覽器和萬維網服務器之間互相通信的規則。

HTTP就是一個通信規則,通信規則規定了客戶端發送給服務器的內容格式,也規定了服務器發送給客戶端的內容格式。其實我們要學習的就是這個兩個格式!客戶端發送給服務器的格式叫“請求協議”;服務器發送給客戶端的格式叫“響應協議”。

3. 請求協議

請求協議的格式如下:

  • 請求首行;
  • 請求頭信息;
  • 空行;
  • 請求體

瀏覽器發送給服務器的內容就這個格式的,如果不是這個格式服務器將無法解讀!在HTTP協議中,請求有很多請求方法,其中最為常用的就是GET和POST。 

4. GET請求

打開IE,在訪問hello項目的index.jsp之間打開HttpWatch,並點擊“Record”按鈕。然后訪問index.jsp頁面。查看請求內容如下:

GET /hello/index.jsp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
  • GET /hello/index.jsp HTTP/1.1:GET請求,請求服務器路徑為/hello/index.jsp,協議為1.1;
  • Host:localhost:請求的主機名為localhost;
  • User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0:與瀏覽器和OS相關的信息。有些網站會顯示用戶的系統版本和瀏覽器版本信息,這都是通過獲取User-Agent頭信息而來的;
  • Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8:告訴服務器,當前客戶端可以接收的文檔類型,其實這里包含了*/*,就表示什么都可以接收;
  • Accept-Language: zh-cn,zh;q=0.5:當前客戶端支持的語言,可以在瀏覽器的工具à選項中找到語言相關信息;
  • Accept-Encoding: gzip, deflate:支持的壓縮格式。數據在網絡上傳遞時,可能服務器會把數據壓縮后再發送;
  • Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7:客戶端支持的編碼;
  • Connection: keep-alive:客戶端支持的鏈接方式,保持一段時間鏈接,默認為3000ms;
  • Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因為不是第一次訪問這個地址,所以會在請求中把上一次服務器響應中發送過來的Cookie在請求中一並發送去過;這個Cookie的名字為JSESSIONID,然后在講會話是講究它!

5. POST請求

為了演示POST請求,我們需要修改index.jsp頁面,即添加一個表單:

1 <form action="" method="post">
2   關鍵字:<input type="text" name="keyword"/>
3   <input type="submit" value="提交"/>
4 </form>

打開HttpWatch,輸入hello后點擊提交,查看請求內容如下:

POST /hello/index.jsp HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://localhost:8080/hello/index.jsp
Accept-Language: zh-cn,en-US;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 13
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=E365D980343B9307023A1D271CC48E7D

keyword=hello

POST請求是可以有體的,而GET請求不能有請求體。

  • Referer: http://localhost:8080/hello/index.jsp:請求來自哪個頁面,例如你在百度上點擊鏈接到了這里,那么Referer:http://www.baidu.com;如果你是在瀏覽器的地址欄中直接輸入的地址,那么就沒有Referer這個請求頭了;
  • Content-Type: application/x-www-form-urlencoded:表單的數據類型,說明會使用url格式編碼數據;url編碼的數據都是以“%”為前綴,后面跟隨兩位的16進制,例如“傳智”這兩個字使用UTF-8的url編碼用為“%E4%BC%A0%E6%99%BA”;
  • Content-Length:13:請求體的長度,這里表示13個字節。
  • keyword=hello:請求體內容!hello是在表單中輸入的數據,keyword是表單字段的名字。

 

Referer請求頭是比較有用的一個請求頭,它可以用來做統計工作,也可以用來做防盜鏈。

統計工作:我公司網站在百度上做了廣告,但不知道在百度上做廣告對我們網站的訪問量是否有影響,那么可以對每個請求中的Referer進行分析,如果Referer為百度的很多,那么說明用戶都是通過百度找到我們公司網站的。

防盜鏈:我公司網站上有一個下載鏈接,而其他網站盜鏈了這個地址,例如在我網站上的index.html頁面中有一個鏈接,點擊即可下載JDK7.0,但有某個人的微博中盜鏈了這個資源,它也有一個鏈接指向我們網站的JDK7.0,也就是說登錄它的微博,點擊鏈接就可以從我網站上下載JDK7.0,這導致我們網站的廣告沒有看,但下載的卻是我網站的資源。這時可以使用Referer進行防盜鏈,在資源被下載之前,我們對Referer進行判斷,如果請求來自本網站,那么允許下載,如果非本網站,先跳轉到本網站看廣告,然后再允許下載。

6. 響應協議

6.1 響應內容

響應協議的格式如下:

  • 響應首行;
  • 響應頭信息;
  • 空行;
  • 響應體。

響應內容是由服務器發送給瀏覽器的內容,瀏覽器會根據響應內容來顯示。

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 724
Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
Date: Wed, 25 Sep 2012 04:15:03 GMT

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="http://localhost:8080/hello/">
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
  <body>
<form action="" method="post">
  關鍵字:<input type="text" name="keyword"/>
  <input type="submit" value="提交"/>
</form>
  </body>
</html>
  • HTTP/1.1 200 OK:響應協議為HTTP1.1,狀態碼為200,表示請求成功,OK是對狀態碼的解釋;
  • Server: Apache-Coyote/1.1:服務器的版本信息;
  • Content-Type: text/html;charset=UTF-8:響應體使用的編碼為UTF-8;
  • Content-Length: 724:響應體為724字節;
  • Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:響應給客戶端的Cookie;
  • Date: Wed, 25 Sep 2012 04:15:03 GMT:響應的時間,這可能會有8小時的時區差;

6.2 響應碼

響應頭對瀏覽器來說很重要,它說明了響應的真正含義。例如200表示響應成功了,302表示重定向,這說明瀏覽器需要再發一個新的請求。

  • 200:請求成功,瀏覽器會把響應體內容(通常是html)顯示在瀏覽器中;
  • 404:請求的資源沒有找到,說明客戶端錯誤的請求了不存在的資源;
  • 500:請求資源找到了,但服務器內部出現了錯誤;
  • 302:重定向,當響應碼為302時,表示服務器要求瀏覽器重新再發一個請求,服務器會發送一個響應頭Location,它指定了新請求的URL地址;
  • 304:當用戶第一次請求index.html時,服務器會添加一個名為Last-Modified響應頭,這個頭說明了index.html的最后修改時間,瀏覽器會把index.html內容,以及最后響應時間緩存下來。當用戶第二次請求index.html時,在請求中包含一個名為If-Modified-Since請求頭,它的值就是第一次請求時服務器通過Last-Modified響應頭發送給瀏覽器的值,即index.html最后的修改時間,If-Modified-Since請求頭就是在告訴服務器,我這里瀏覽器緩存的index.html最后修改時間是這個,您看看現在的index.html最后修改時間是不是這個,如果還是,那么您就不用再響應這個index.html內容了,我會把緩存的內容直接顯示出來。而服務器端會獲取If-Modified-Since值,與index.html的當前最后修改時間比對,如果相同,服務器會發響應碼304,表示index.html與瀏覽器上次緩存的相同,無需再次發送,瀏覽器可以顯示自己的緩存頁面,如果比對不同,那么說明index.html已經做了修改,服務器會響應200。

響應頭:Last-Modified:最后的修改時間;

請求頭:If-Modified-Since:把上次請求的index.html的最后修改時間還給服務器;

狀態碼:304,比較If-Modified-Since的時間與文件真實的時間一樣時,服務器會響應304,而且不會有響正文,表示瀏覽器緩存的就是最新版本!

6.3 其他響應頭

告訴瀏覽器不要緩存的響應頭:

  • Expires: -1;
  • Cache-Control: no-cache;
  • Pragma: no-cache;

自動刷新響應頭,瀏覽器會在3秒之后請求http://www.baidu.com:

  • Refresh: 3;url=http://www.baidu.com

6.4 HTML中指定響應頭

在HTMl頁面中可以使用<meta http-equiv="" content="">來指定響應頭,例如在index.html頁面中給出<meta http-equiv="Refresh" content="3;url=http://www.baidu.com">,表示瀏覽器只會顯示index.html頁面3秒,然后自動跳轉到http://www.baidu.com。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM