搞定PHP面試 - HTTP協議知識點整理

HTTP協議知識點整理

1、HTTP協議的工做特色和工做原理

工做特色

  • 基於B/S模式
  • 通訊開銷小、簡單快速、傳輸成本低
  • 使用靈活、可試用超文本傳輸協議
  • 節省傳輸時間
  • 無狀態

工做原理

客戶端發送請求給服務器,建立一個TCP連接,指定端口號,默認80,鏈接到服務器,服務器監聽瀏覽器請求,一旦監聽到客戶端請求,分析請求類型後,服務器會向客戶端放回狀態信息和數據內容。html

2、HTTP協議請求方法

1. GET:獲取資源

GET 方法用來請求訪問已被 URI 識別的資源。指定的資源經服務器端解析後返回響應內容。web

2. POST:傳輸實體主體

POST 方法用來傳輸實體的主體。
雖然用 GET 方法也能夠傳輸實體的主體,但通常不用 GET 方法進行傳輸,而是用 POST 方法。雖然說 POST 的功能與 GET 很類似,但POST 的主要目的並非獲取響應的主體內容。跨域

3. PUT:傳輸文件

PUT 方法用來傳輸文件。就像 FTP 協議的文件上傳同樣,要求在請求報文的主體中包含文件內容,而後保存到請求 URI 指定的位置。
可是,鑑於 HTTP/1.1 的 PUT 方法自身不帶驗證機制,任何人均可以上傳文件 , 存在安全性問題,所以通常的 Web 網站不使用該方法。若配合 Web 應用程序的驗證機制,或架構設計採用 REST(REpresentationalState Transfer,表徵狀態轉移)標準的同類 Web 網站,就可能會開放使用 PUT 方法。瀏覽器

4. HEAD:得到報文首部

HEAD 方法和 GET 方法同樣,只是不返回報文主體部分。用於確認URI 的有效性及資源更新的日期時間等。緩存

5. DELETE:刪除文件

DELETE 方法用來刪除文件,是與 PUT 相反的方法。DELETE 方法按請求 URI 刪除指定的資源。
可是,HTTP/1.1 的 DELETE 方法自己和 PUT 方法同樣不帶驗證機制,因此通常的 Web 網站也不使用 DELETE 方法。當配合 Web 應用程序的驗證機制,或遵照 REST 標準時仍是有可能會開放使用的。安全

6. OPTIONS:詢問支持的方法

OPTIONS 方法用來查詢針對請求 URI 指定的資源支持的方法。服務器

7. TRACE:追蹤路徑

TRACE 方法是讓 Web 服務器端將以前的請求通訊環回給客戶端的方法。
發送請求時,在 Max-Forwards 首部字段中填入數值,每通過一個服務器端就將該數字減 1,當數值恰好減到 0 時,就中止繼續傳輸,最後接收到請求的服務器端則返回狀態碼 200 OK 的響應。
客戶端經過 TRACE 方法能夠查詢發送出去的請求是怎樣被加工修改 / 篡改的。這是由於,請求想要鏈接到源目標服務器可能會經過代理中轉,TRACE 方法就是用來確認鏈接過程當中發生的一系列操做。
可是,TRACE 方法原本就不怎麼經常使用,再加上它容易引起 XST(Cross-Site Tracing,跨站追蹤)攻擊,一般就更不會用到了。cookie

3、HTTP經常使用狀態碼

狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。
藉助狀態碼,用戶能夠知道服務器端是正常處理了請求,仍是出現了錯誤。架構

1. 1XX Informational(信息性狀態碼, 接收的請求正在處理)

2. 2XX Success(成功狀態碼,表示請求正常處理完畢)

200 OK

表示從客戶端發來的請求在服務器端被正常處理了。app

204 No Content

該狀態碼錶明服務器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。另外,也不容許返回任何實體的主體。好比,當從瀏覽器發出請求處理後,返回 204 響應,那麼瀏覽器顯示的頁面不發生更新。
通常在只須要從客戶端往服務器發送信息,而對客戶端不須要發送新信息內容的狀況下使用。

206 Partial Content

該狀態碼錶示客戶端進行了範圍請求,而服務器成功執行了這部分的 GET 請求。響應報文中包含由 Content-Range 指定範圍的實體內容。

3. 3XX Redirection(重定向狀態碼,須要進行附加操做以完成請求)

301 Moved Permanently

永久性重定向。該狀態碼錶示請求的資源已被分配了新的 URI,之後應使用資源如今所指的 URI。也就是說,若是已經把資源對應的 URI保存爲書籤了,這時應該按 Location 首部字段提示的 URI 從新保存。

302 Move temporarily

臨時性重定向。該狀態碼錶示請求的資源已被分配了新的 URI,但願用戶(本次)能使用新的 URI 訪問。
和 301 Moved Permanently 狀態碼類似,但 302 狀態碼錶明的資源不是被永久移動,只是臨時性質的。換句話說,已移動的資源對應的URI 未來還有可能發生改變。好比,用戶把 URI 保存成書籤,但不會像301 狀態碼出現時那樣去更新書籤,而是仍舊保留返回 302 狀態碼的頁面對應的 URI。

304 Not Modified

該狀態碼錶示客戶端發送附帶條件的請求時,服務器端容許請求訪問資源,而文檔的內容(自上次訪問以來或者根據請求的條件)並無改變。

4. 4XX Client Error(客戶端錯誤狀態碼,服務器沒法處理請求)

400 Bad Request

該狀態碼錶示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容後再次發送請求。

401 Unauthorized

該狀態碼錶示發送的請求須要有經過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證信息。另外若以前已進行過 1 次請求,則表示用戶認證失敗。
返回含有 401 的響應必須包含一個適用於被請求資源的 WWW-Authenticate 首部用以質詢(challenge)用戶信息。當瀏覽器初次接收到 401 響應,會彈出認證用的對話窗口。

403 Forbidden

該狀態碼代表對請求資源的訪問被服務器拒絕了。
未得到文件系統的訪問受權,訪問權限出現某些問題(從未受權的發送源 IP 地址試圖訪問)等狀況均可能是發生 403 的緣由。

404 Not Found

該狀態碼代表服務器上沒法找到請求的資源。

405 Method Not Allowed

代表當前請求使用的 HTTP 方法不被服務器容許。
例如使用GET方法請求須要POST方法的數據。

5. 5XX Server Error(服務器錯誤狀態碼,服務器處理請求出錯)

500 Internal Server Error

該狀態碼代表服務器端在執行請求時發生了錯誤。有多是 Web 應用存在的 bug 或某些臨時的故障。

502 Bad Gateway

該狀態碼代表服務器和網關/代理通訊出錯。

503 Service Unavailable

該狀態碼代表服務器暫時處於超負載或正在進行停機維護,如今沒法處理請求。

504 Gateway Timeout 網關超時

該狀態碼代表服務器做爲網關或代理,可是沒有及時從上游服務器收到請求。

4、HTTP協議常見請求、響應頭

1. HTTP/1.1 通用首部字段

通用首部字段是指,請求報文和響應報文雙方都會使用的首部。

Cache-Control 設置緩存的工做機制

指令的參數是可選的,多個指令之間經過 , 分隔。

Cache-Control: private, max-age=0, no-cache
  • 緩存請求指令
指令 參數 說明
no-cache 強制向源服務器再次驗證
no-store 不緩存請求或響應的任何內容
max-age = [ 秒] 必需 響應的最大Age值
max-stale( = [ 秒]) 可省略 接收已過時的響應
min-fresh = [ 秒] 必需 指望在指定時間內的響應仍有效
no-transform 代理不可更改媒體類型
only-if-cached 從緩存獲取資源
cache-extension - 新指令標記(token)
  • 緩存響應指令
指令 參數 說明
public 可向任意方提供響應的緩存
private 可省略 僅向特定用戶返回響應
no-cache 可省略 緩存前必須先確認其有效性
no-store 不緩存請求或響應的任何內容
no-transform 代理不可更改媒體類型
must-revalidate 可緩存但必須再向源服務器進行確認
proxy-revalidate 要求中間緩存服務器對緩存的響應有效性再進行確認
max-age = [ 秒] 必需 響應的最大Age值
s-maxage = [ 秒] 必需 公共緩存服務器響應的最大Age值
cache-extension - 新指令標記(token)

Connection

Connection 首部字段具有以下兩個做用。

  • 控制再也不轉發給代理的首部字段
  • 管理持久鏈接

    Connection: keep-alive
    Connection: Upgrade

Date 建立 HTTP 報文的日期和時間。

Date: Tue, 03 Jul 2012 04:40:59 GMT
Date: Tue, 03-Jul-12 04:40:59 GMT
Date: Tue Jul 03 04:40:59 2012
Content-Type 設置請求體或相應體的MIME類型
Content-Type: application/x-www-form-urlencoded
Content-Type: text/html; charset=utf-8

Content-Encoding 設置數據使用的編碼類型

Content-Encoding: gzip

Content-Length 請求體或響應體的字節長度

Content-Length: 348

2. 常見請求頭字段

Host 設置服務器域名和TCP端口號,若是使用的是服務請求標準端口號,端口號能夠省略

Host: en.wikipedia.org:8080
Host: en.wikipedia.org

Accept 設置接受的內容類型

Accept: text/plain

Accept-Charset 設置接受的字符編碼

Accept-Charset: utf-8

Accept-Encoding 設置接受的編碼格式

Accept-Encoding: gzip, deflate

Origin 標識跨域資源請求(請求服務端設置Access-Control-Allow-Origin響應字段)

Origin: http://www.example-social-network.com

User-Agent 用戶代理的字符串值

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0

Cookie 設置服務器使用Set-Cookie發送的http cookie

Cookie: $Version=1; Skin=new;

Authorization 設置HTTP身份驗證的憑證

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Referer 告知服務器請求的原始資源的 URI

Referer: http://en.wikipedia.org/wiki/Main_Page

X-Forwarded-For 客戶端經過HTTP代理或者負載均衡器鏈接的web服務器的原始IP地址

X-Forwarded-For: client1, proxy1, proxy2
X-Forwarded-For: 129.78.138.66, 129.78.64.103

Forwarded 客戶端經過http代理鏈接web服務的源信息

Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
Forwarded: for=192.0.2.43, for=198.51.100.17

3. 常見響應頭字段

Allow 通知客戶端請求所支持的 HTTP 方法

Allow: GET, HEAD

Access-Control-Allow-Origin 指定哪些站點能夠參與跨站資源共享

Access-Control-Allow-Origin: *

Expires 設置響應體的過時時間

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Last-Modified 設置請求對象最後一次的修改日期

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

Age 對象在代理緩存中暫存的秒數

Age: 3600

ETag 特定版本資源的標識符,一般是消息摘要

ETag: "737060cd8c284d8af7ad3082f209582d"

Refresh 重定向

Refresh: 5; url=http://www.w3.org/pub/WWW/People.html

Set-Cookie 設置HTTP Cookie

Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
相關文章
相關標籤/搜索