HTTP、時間戳和重定向理解

時間戳
在很多互聯網公司,都會在URL後加一個時間戳,這是爲了防止緩存,正常來說,加上時間戳後,這個請求會往服務器上發送一次請求。
當http協議爲304的時候,代表是從本地緩存中讀取的數據。所以,在正常的互聯網公司,發佈版本的時候,js、css後都會加上一個時間戳。
重定向實現原理
在這裏插入圖片描述
在我們重定向的時候,當我們訪問OtherServlet這個請求,請求到服務器,服務器返回,響應頭狀態碼爲302,客戶端收到狀態碼爲302時,就會跳轉到服務器返回的Location,如上圖所示。
HTTP協議:
http協議: 對瀏覽器客戶端 和 服務器端 之間數據傳輸的格式規範。
http協議內容:

請求(瀏覽器-》服務器)
GET /day09/hello HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
響應(服務器-》瀏覽器)
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Length: 24
Date: Fri, 30 Jan 2015 01:54:57 GMT

this is hello servlet!!!

請求

GET /day09/hello HTTP/1.1               -請求行
Host: localhost:8080                    --請求頭(多個key-value對象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
                                    --一個空行
name=eric&password=123456             --(可選)實體內容
請求行
	GET /day09/hello HTTP/1.1 
	
	http協議版本
http1.0:當前瀏覽器客戶端與服務器端建立連接之後,只能發送一次請求,一次請求之後連接關閉。
http1.1:當前瀏覽器客戶端與服務器端建立連接之後,可以在一次連接中發送多次請求。(基本都使用1.1)

URL:  統一資源定位符。http://localhost:8080/day09/testImg.html。只能定位互聯網資源。						的子集。
URI: 統一資源標記符。/day09/hello。用於標記任何資源。可以是本地文件系統,局域網的資源(//192.168.14.10/myweb/index.html),可以是互聯網。

請求方式
常見的請求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE	
常用的請求方式: GET  和 POST	

GET vs POST 區別
GET方式提交:
a)地址欄(URI)會跟上參數數據。以?開頭,多個參數之間以&分割。

GET /day09/testMethod.html?name=eric&password=123456 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/day09/testMethod.html
Connection: keep-alive

b)GET提交參數數據有限制,不超過1KB。
c)GET方式不適合提交敏感密碼。
d)注意: 瀏覽器直接訪問的請求,默認提交方式是GET方式
2)POST方式提交
a)參數不會跟着URI後面。參數而是跟在請求的實體內容中。沒有?開頭,多個參數之間以&分割。

POST /day09/testMethod.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/day09/testMethod.html
Connection: keep-alive

name=eric&password=123456

b)POST提交的參數數據沒有限制。
c)POST方式提交敏感數據。
請求頭

Accept: text/html,image/*      -- 瀏覽器接受的數據類型
Accept-Charset: ISO-8859-1     -- 瀏覽器接受的編碼格式
Accept-Encoding: gzip,compress  --瀏覽器接受的數據壓縮格式
Accept-Language: en-us,zh-       --瀏覽器接受的語言
Host: www.it315.org:80          --(必須的)當前請求訪問的目標地址(主機:端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  --瀏覽器最後的緩存時間
Referer: http://www.it315.org/index.jsp      -- 當前請求來自於哪裏
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  --瀏覽器類型
Cookie:name=eric                     -- 瀏覽器保存的cookie信息
Connection: close/Keep-Alive            -- 瀏覽器跟服務器連接狀態。close: 連接關閉  keep-alive:保存連接。
Date: Tue, 11 Jul 2000 18:23:51 GMT      -- 請求發出的時間

Http響應

HTTP/1.1 200 OK                --響應行
Server: Apache-Coyote/1.1         --響應頭(key-vaule)
Content-Length: 24 
Date: Fri, 30 Jan 2015 01:54:57 GMT
                                   --一個空行
this is hello servlet!!!                  --實體內容

#狀態碼: 服務器處理請求的結果(狀態)
常見的狀態:
200 : 表示請求處理完成並完美返回
302: 表示請求需要進一步細化。
404: 表示客戶訪問的資源找不到。
500: 表示服務器的資源發送錯誤。(服務器內部錯誤)
#狀態描述
5.2 常見的響應頭

Location: http://www.it315.org/index.jsp   -表示重定向的地址,該頭和302的狀態碼一起使用。
Server:apache tomcat                 ---表示服務器的類型
Content-Encoding: gzip                 -- 表示服務器發送給瀏覽器的數據壓縮類型
Content-Length: 80                    --表示服務器發送給瀏覽器的數據長度
Content-Language: zh-cn               --表示服務器支持的語言
Content-Type: text/html; charset=GB2312   --表示服務器發送給瀏覽器的數據類型及內容編碼
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  --表示服務器資源的最後修改時間
Refresh: 1;url=http://www.it315.org     --表示定時刷新
Content-Disposition: attachment; filename=aaa.zip --表示告訴瀏覽器以下載方式打開資源(下載文件時用到)
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search   --表示服務器發送給瀏覽器的cookie信息(會話管理用到)
Expires: -1                           --表示通知瀏覽器不進行緩存
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive           --表示服務器和瀏覽器的連接狀態。close:關閉連接 keep-alive:保存連接

狀態碼: 服務器處理請求的結果(狀態)
常見的狀態:
200 : 表示請求處理完成並完美返回
302: 表示請求需要進一步細化。
404: 表示客戶訪問的資源找不到。
500: 表示服務器的資源發送錯誤。(服務器內部錯誤)
HTTPS和HTTP:
與 http 區別?
1、https協議需要到 ca 申請證書,一般免費證書較少,因而¥要一定費用。
2、http 是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的 ssl 加密傳輸協議。
3、http 和 https 使用的是完全不同的連接方式,用的端口也不一樣。 前者是 80,後者是443。
4、http 的連接很簡單,是無狀態的;HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密。認證的網絡協議,比 http協議安全。

客戶端在使用 HTTPS 方式與 Web服務器通信時有以下幾個步驟,如圖所示。
(1)客戶使用 https的 URL 訪問 Web 服務器,要求與 Web服務器建立 SSL連接.
(2) Web 服務器收到客戶端請求後,會將網站的證書信息(證書中包含公鑰》傳達一份給客戶端。
(3)客戶端的瀏覽器與 Web 服務器開始協商 SSL 連接的安全等級, 也就是信息加密的等級
(4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話祕鑰,然後利用網站的公鑰將會話加密,並傳送給Web服務器
(5) Web 服務器利用自己的私鑰解密出會話祕鑰
6) Web 服務器利用會話祕鑰加密與客戶端的通信
在這裏插入圖片描述
Https優缺點:
(1)HTTPS 協議握手階段比較費時,會使頁面的加載時間延長近 50%,增加 10% 到20% 的耗
電:
(2)HTTPS 連接緩存不如 HTTP高效,會增加數據開銷和功耗,甚至已有的安全措施也會因此而受到影響:
(3) SSL 證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用
(4)SSL 證書通常需要綁IP,不能在同一 IP 上綁定多個域名,IPv4 資源不可能支撐這個消耗。
5) HTTPS 協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面
到什麼作用。最關鍵的,SSL 證書的信用鏈體系並不安全,特別是在某些國家可以控制 CA 根證書的情況下 中間人攻擊 樣可行。

發佈了88 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章