你可知道當在瀏覽器地址欄輸入URL("網址」)後,Web網頁是如何顯示的嗎?瀏覽器
其實,當你按下回車後,瀏覽器(客戶端)幫你給服務器發送了請求,服務器收到請求後給出相應的響應,緩存
以後,瀏覽器再把響應內容進行解析,就顯現出一個個豐富多彩的網頁,安全
在這個過程當中,Web使用了一種名爲HTTP(HyperText Transfer Protocol,超文本傳輸協議),完成從客戶端到服務器端的一系列操做。協議,指的是規則的約定,說白了就是「規矩」。服務器
URL(Universal Resource Locator,統一資源定位符)是用於完整地描述Internet上網頁和其餘資源的地址的一種標識方法。網絡
其基本格式爲:scheme://host[:port]/path/…/[?query-string][#anchor]
dom
用於HTTP協議交互的信息被稱爲HTTP報文。客戶端的HTTP報文叫作請求報文,服務器端的HTTP報文叫作響應報文。其格式分別以下:編碼
請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。例如,GET /index.html HTTP/1.1
。加密
HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。3d
請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:
最後一個請求頭以後是一個空行,發送回車符和換行符,通知服務器如下再也不有請求頭。
HTTP響應也由三個部分組成,分別是:狀態行、消息報頭、響應正文。
狀態行格式以下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。
常見的狀態碼以下:
四種HTTP首部字段類型:
通用首部字段
首部字段名 | 說明 |
---|---|
Cache-Control | 控制緩存的行爲 |
Connection | 逐跳首部,鏈接的管理 |
Date | 建立報文的日期時間 |
Pragna | 報文指令 |
Trailer | 報文末端的首部一覽 |
Transfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級爲其餘協議 |
Via | 代理服務器的相關信息 |
Warning | 錯誤通知 |
請求首部字段
首部字段名 | 說明 |
---|---|
Accept | 用戶代理可處理的媒體類型 |
Accept—Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 優先的語言(天然語言) |
Authorization | Web認證信息 |
Expect | 期待服務器的指定行爲 |
From | 用戶的電子郵箱地址 |
Host | 請求資源所在服務器 |
if-Match | 比較實體標記(ETag) |
if-Modified-Since | 比較資源的更新時間 |
if-None-Match | 比較實體標記(與if-Match相反) |
if-Range | 資源爲更新時發送實體Byte的範圍請求 |
if-Unmodified-Since | 比較資源的更新時間(與if-Modified-Since相反) |
Max-Forwards | 最大傳輸逐跳數 |
Proxy-Authorization | 代理服務器要求客戶端的認證信息 |
Range | 實體字節範圍請求 |
Referer | 對請求中的URL的原始獲取方法 |
TE | 傳輸編碼的優先級 |
User-Agent | HTTP客戶端程序的信息 |
響應首部字段
首部字段名 | 說明 |
---|---|
Accept-Ranges | 是否接受字節範圍請求 |
Age | 推算資源建立通過時間 |
ETag | 資源的匹配信息 |
Location | 令客戶端重定向至指定的URL |
Proxy-Authenticate | 代理服務器對客戶端的認證信息 |
Rety-After | 對再次發起請求的時機要求 |
Server | HTTP服務器的安裝信息 |
Vary | 代理服務器緩存的管理信息 |
WWW-Authenticate | 服務器對客戶端的認證信息 |
實體首部字段
首部字段名 | 說明 |
---|---|
Allow | 資源科支持的HTTP方法 |
Content-Encoding | 實體主體適用的編碼方式 |
Content-Language | 實體主體的天然語言 |
Content-Length | 實體主體的大小(單位:字節) |
Content-Location | 替代對資源的URL |
Content-MD5 | 實體主體的報文摘要 |
Content-Range | 實體主體的位置範圍 |
Content-Type | 實體主體的媒體類型 |
Expires | 實體主體過時的日期時間 |
Last-Modified | 資源的最後修改日期時間 |
爲Cookie服務的首部字段
首部字段名 | 說明 | 首部類型 |
---|---|---|
Set-Cookie | 開始狀態管理全部的Cookie信息 | 響應首部字段 |
Cookie | 服務器接收到的Cookie信息 | 請求首部字段 |
Set—Cookie字段的屬性
屬性 | 說明 |
---|---|
NAME=VALUE | 賦予Cookie的名稱和其值 |
expires=DATE | Cookie的有效期(若不mingque指定則默認爲瀏覽器關閉前爲止) |
path=PATH | 將服務器上的文件目錄做爲Cookie的適用對象(若不指定則默認爲文檔所在的目錄) |
domain=域名 | 做爲Cookie適用對象的域名(若不指定則默認爲建立Cookie的服務器的域名) |
Scure | 僅在HTTPS安全通訊時纔會發送Cookie |
HttpOnly | 加以限制,使Cookie不能被JavaScript腳本訪問 |
詳情請看:
https://zh.wikipedia.org/wiki/HTTP%E5%A4%B4%E5%AD%97%E6%AE%B5
代理是一種有轉發功能的應用程序,它扮演了位於服務器和客戶端「中間人」的角色,接收由客戶端發送的請求並轉發給服務器,同時也接受服務器返回的響應並轉發給客戶端。
網關是轉發其餘服務器通訊數據的服務器,接收從客戶端所發送來的請求時,它就像本身擁有資源的源服務器同樣對請求進行處理。
隧道是在相隔甚遠的客戶端和服務器二者之間進行中轉,並保持雙方通訊鏈接的應用程序。
HTTP的缺點
HTTP + 加密 + 認證 + 完整性保護 = HTTPS
HTTPS並不是是應用層的一種新協議。只是普通HTTP通訊接口部分用SSL和TLS協議替代而已。
SSL是獨立於HTTP的協議,因此不光是HTTP協議,其餘運行在應用層的SMTP和Telnet等協議都可配合SSL協議使用。因此說SSL是當今世界上應用最爲普遍的網絡安全技術。
爲何不一直使用HTTPS?
所以,若是是非敏感信息則使用HTTP通訊,只有在包含我的信息等敏感數據時,才利用HTTPS加密通訊。
最後,若是你想了解更多有關內容,推薦閱讀《圖解HTTP》、《HTTP權威指南》等一些資料。