HTTP學習(二)

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 登錄表單截圖


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