Http學習(二)
參考文獻:
[1]上野·宣.圖解HTTP [M]北京:人民郵電出版社,2015.04;
目錄:
1、常見的HTTP響應狀態碼:
2、常用的HTTP方法:
3、HTTP首部:
1、常見的HTTP響應狀態碼:
(1)狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。藉助狀態碼,用戶可以知道服務端是正常處理了請求,還是出現了錯誤。
(2)狀態碼由三位數字和原因短語組成。
(3)狀態碼的第一位數字指定了響應類別,後面兩位數字沒有具體的分類。
響應類別有五種取值:
①–1xx:信息性狀態碼(Informational),接收的請求正在處理
②–2xx:成功狀態碼(Success),請求正常處理完畢
③–3xx:重定向狀態碼(Redirection),需要進行附加操作以完成請求
④–4xx:客戶端錯誤狀態碼(Client Error),服務器無法處理請求
⑤–5xx:服務器端錯誤狀態碼(Server Error),服務器處理請求出錯
(4)常見的狀態碼:
A)200 OK:
請求已正常處理
在響應報文內,隨狀態碼一起返回的信息會因方法的不同而發生改變。當使用GET方法時,對應請求資源的實體會作爲響應返回;當使用HEAD方法時,在響應中只返回首部,不會返回實體的主體部分。
B)204 No Content:
請求處理成功,但沒有資源可返回
當從瀏覽器發出請求處理後,返回204響應,那麼瀏覽器顯示的頁面不發生更新。一般在只需要從客戶端往服務器發送信息,而對客戶端不需要發送新信息內容的情況下使用。
C)206 Partial Content:
對資源某一部分的請求
響應報文中包含由Content-Range指定範圍的實體內容。
D)301 Moved Permanently:
永久性重定向
該狀態碼錶示請求的資源已被分配了新的URI,以後應使用資源現在所指的URI。如果用戶已經把資源對應的URI保存爲書籤了,則此時應該按Location首部字段提示的URI重新保存。
應用場景:
①開發中網站測試周期長,搜索引擎已收錄測試的域名,搜公司名時,會打開測試地址;
②網站更換域名時,希望百度原來收錄的域名點擊之後直接打開新的域名;
③百度權重及排名分散在主域名和www子域名中,導致優化效果不好,需要把www子域名權重轉化到主域名中。
實現301永久性重定向的方法:在apache環境下,開啓rewrite模塊,將客戶新舊域名、主域名全部指向新站點,然後在新站點的根目錄下創建.htaccess文件,並將下面的代碼拷貝到.htaccess的所有規則之前(以某網站爲例,測試地址爲remoa.com,主域名爲www.main.com)
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^remoa.com [NC]
RewriteRule ^(.*)$ http://www.main.com/$1 [R=301,NC]
E)302 Found:
臨時性重定向
請求的資源已被分配了新的URI,希望用戶(本次)能使用新的URI訪問。新的URL會在response中的Location中返回,瀏覽器將會使用新的URL發出新的Request。已移動的資源對應的URI將來還有可能發生改變。
F)303 See Other:
由於請求的資源存在另一個URI,希望客戶端應使用GET方法定向獲取請求的資源。
########
當301,302,303響應狀態碼返回時,幾乎所有的瀏覽器都會把POST改爲GET,並刪除請求報文內的主體,之後請求會自動再次發送。
301、302標準是禁止將POST方法改變成GET方法的,但實際使用時大家都這麼做。
########
G)304 Not Modified:
客戶端發送附帶條件的請求時,條件不滿足時返回,與重定向無關。
304狀態碼返回時,不包含任何響應的主體部分。服務器端資源未改變,可直接使用客戶端未過期的緩存。
H)307 Temporary Redirect:
臨時重定向
與302類似,只是強制要求使用POST方法
I)400 Bad Request:
請求報文中存在語法錯誤,服務器無法識別
當錯誤發生時,需修改請求的內容後再次發送請求。另外,瀏覽器會像200 OK一樣對待該狀態碼。
J)401 Unauthorized:
請求需要通過HTTP認證(BASIC認證、DIGEST認證)的認證信息
返回401的響應必須含有一個適用於被請求資源的WWW-Authenticate首部用以質詢(challenge)用戶信息。當瀏覽器初次接收到401響應,會彈出認證用的對話窗口。
K)403 Forbidden:
對請求資源的訪問被服務器拒絕了
服務器通常會在響應正文中給出不提供服務的原因。未獲得文件系統的訪問授權,從未授權的發送源IP地址試圖訪問等情況都是發生403的原因。
L)404 Not Found:
服務器上無法找到請求的資源。
在服務器端拒絕請求且不想說明原因時也可使用404。
M)500 Internal Server Error:
服務器端在執行請求時發生了錯誤。也可能是Web應用存在的bug或某些臨時的故障。
N)503 Service Unavailable:
服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。
如果事先得知解除以上狀況需要的時間,最好寫入Retry-After首部字段再返回給客戶端。
2、常用的HTTP方法:
(1)GET:獲取資源
請求訪問已被URI識別的資源。指定的資源經服務器端解析後返回響應內容。
如:使用百度搜索引擎搜索某個關鍵字,就是通過GET方法來請求的。
圖2.1 GET請求
(2)POST:傳輸實體主體
用來傳輸實體的主體。
(3)PUT:傳輸文件
因爲HTTP/1.1的PUT方法自身不帶驗證機制,所以存在安全性問題。若配合Web應用程序的驗證機制,或架構設計採用REST標準的同類Web網站,纔可能會開放使用PUT方法。
(4)HEAD:獲得報文首部
用於確認URI的有效性及資源更新的日期時間等。
(5)DELETE:刪除文件
按請求URI刪除指定的資源。
當配合Web應用程序的驗證機制,或遵守REST標準時還是有可能會開放使用的。
(6)OPTIONS:詢問支持的方法
用來查詢針對請求URI指定的資源支持的方法。
(7)TRACE:追蹤路徑
讓Web服務器端將之前的請求通信環回給客戶端的方法。
發送請求時,在Max-Forwards首部字段(最大傳輸逐跳數)中填入數值,每經過一個服務器端就將該數字減1,當數值剛好減到0時,就停止繼續傳輸,最後接收到請求的服務器端則返回狀態碼200 OK的響應。
客戶端通過TRACE方法可以查詢發送出去的請求是怎樣被加工修改/篡改的。請求想要連接到源目標服務器可能會通過代理中轉,TRACE方法就是用來確認連接過程中發生的一系列操作。
但是TRACE方法容易引發XST跨站追蹤攻擊,所以通常不會用到。
(8)CONNECT:要求用隧道協議連接代理
CONNECT方法要求在與代理服務器通信時建立隧道,實現用隧道協議進行TCP通信。主要使用SSL(安全套接字)和TLS(傳輸層安全)協議把通信內容加密後經網絡隧道傳輸。
CONNECT方法的格式:
CONNECT 代理服務器名:端口號 HTTP版本
3、HTTP首部:
對來賽報名系統的login登錄頭部信息進行查看:
圖3.1 首部信息查看
General通用首部字段:
圖3.2 通用首部信息查看
Status Code:302 Found
請求的資源checklogin.action已被分配了新的URI,希望用戶本次能使用新的URI訪問。新的URL,person.action會在response中的Location中返回,瀏覽器將會使用新的URL發出新的Request。
圖3.3 URL截圖
Referrer Policy(推薦策略):
在頁面引入圖片、JS 等資源,或者從一個頁面跳到另一個頁面,都會產生新的 HTTP 請求,瀏覽器一般都會給這些請求頭加上表示來源的 Referrer 字段。Referrer 在分析用戶來源時很有用,有着廣泛的使用。
2014 年,W3C 的 Web 應用安全工作組(Web Application Security Working Group)發佈了Referrer Policy草案,對瀏覽器該如何發送 Referrer 做了詳細的規定。
五種Referrer策略:
①No Referrer :任何情況下都不發送 Referrer 信息;
②No Referrer When Downgrade :僅當發生協議降級(如 HTTPS 頁面引入 HTTP 資源,從 HTTPS 頁面跳到 HTTP 等)時不發送 Referrer 信息。這個規則是現在大部分瀏覽器默認所採用的;
③Origin Only :發送只包含 host 部分的 Referrer。啓用這個規則,無論是否發生協議降級,無論是本站鏈接還是站外鏈接,都會發送 Referrer 信息,但是隻包含協議 + host 部分(不包含具體的路徑及參數等信息);
④Origin When Cross-origin :僅在發生跨域訪問時發送只包含 host 的 Referrer,同域下還是完整的。它與Origin Only的區別是多判斷了是否Cross-origin。需要注意的是協議、域名和端口都一致,纔會被瀏覽器認爲是同域;
⑤Unsafe URL :無論是否發生協議降級,無論是本站鏈接還是站外鏈接,統統都發送 Referrer 信息。正如其名,這是最寬鬆而最不安全的策略;
圖3.5 響應頭
HTTP版本 + 狀態碼
響應首部字段:
Server:HTTP服務器軟件名稱
Location:令客戶端重定向至指定URI
響應實體首部字段:
Content-Language:響應實體主體的語言
Content-length:響應實體主體的大小(單位:字節)
通用首部字段:
Date:原始服務器消息發出的時間
圖3.6 請求頭
請求方法 + URI + HTTP版本
請求首部字段:
Host:請求資源所在服務器
Content-length:請求實體主體的大小(單位:字節)
User-Agent:HTTP客戶端程序的信息
Accept:用戶代理可處理的媒體類型,即客戶端能接收的內容類型
Referer:對請求中URI的原始獲取方,即先前網頁的地址,當前請求的網頁緊隨其後
Accept-Encoding:優先的內容編碼,指定瀏覽器可以支持的web服務器返回內容壓縮編碼類型
Accept-Language:優先的語言,瀏覽器可接受的語言
Cookie:HTTP請求發送時,會把保存在該請求域名下的所有cookie值一起發送給web服務器
通用首部字段:
Connection:表示是否需要持久連接。HTTP1.1默認進行持久連接。
Cache-control:指定請求和響應遵循的緩存機制
Origin:只用於post請求,說明最初請求是從哪裏發起的
Upgrade-Insecure-Requests:https需要加載http的資源,chrome告訴服務器,瀏覽器可以處理https協議,對於頁面的http資源,請求時可以自動升級到https
實體首部字段:
Content-Type:請求實體對應的MIME信息
圖3.7 表單數據
Form-data:表單數據
usermail:郵箱號
userpassword:用戶密碼
圖3.8 登錄表單截圖