HTTP/HTTPS
HTTP:超文本傳輸協議):是一種發佈和接收 HTML頁面的方法,默認端口80
HTTPS:HTTP的安全版,在HTTP下加入SSL層,默認端口443
工作流程
- 客戶端(通常是瀏覽器)發送一個HTTP請求
- 服務端開始處理請求,發送HTTP響應把結果返回給客戶端
其中一個請求的開始到一個響應的結束稱爲事務,事務結束後還會在服務端記錄一條日誌
HTTP請求
HTTP請求分爲請求行、請求頭、空行、請求正文:
- 請求行:方法URL協議/版本,示例 GET/sample.jsp HTTP/1.1
- 請求頭:包括請求頭包含許多有關的客戶端環境和請求正文的有用信息,如訪問的域名、用戶代理、Cookie等信息
- 空行:表示請求頭結束,不可缺失
- 請求正文:就是HTTP請求的數據,非必須
URL:統一資源定位符,是用於完整地描述Internet上網頁和其他資源的地址的一種標識方法
基本格式:scheme://
[username:password@]host[:port#]/path/…/[?query-string][#anchor]
HTTP請求方法
- GET:請求頁面信息,不包括主體,也可以傳輸少量數據,以?分割URL和傳輸數據,多個參數用&連接,例如:login.action?name=abc&password=123,如果數據是英文字母/數字,原樣發送,如果是空格,轉換爲+,如果是中文/其他字符,則直接把字符串用BASE64加密,安全方法
- HEAD:與GET請求類似,但是返回的響應中沒有具體的內容,用於獲取報頭,安全方法
- POST:向服務器發送數據,如提交表單,上傳文件等,提交數據放在http包體,數據爲結構化數據,非安全方法
- PUT:替換服務器資源,向服務非結構數據,非安全方法
- PATCH:更新服務器部分資源,結構數據,非安全方法
- DELETE:刪除服務器指定頁面,非安全方法
- CONNECT:將服務器作爲代理,讓服務器代替用戶去訪問其他網頁
- OPTIONS:查看服務器允許的方法
- TRACE:回顯服務器收到的請求,主要用於測試或診斷
更多信息請點擊HTTP request methods
常見HTTP請求Header
- Accept:傳輸文件類型,使用MIME類型表示,即主類型/次類型
示例:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
q是權重係數,範圍 0 =< q <= 1,q 值越大,請求越傾向於獲得其“;”之前的類型表示的內容。若沒有指定q值,則默認爲1,按從左到右排序順序;若被賦值爲0,則用於表示瀏覽器不接受此內容類型Accept-Encoding
-
Accept-Encoding:文件編碼格式
示例:Accept-Encoding:gzip, deflate
- Accept-Language:指定可以接收的語言種類
示例:Accept-Language:zh-CN,zh;q=0.9,en;q=0.8
- Cache-Control:指定緩存機制
示例:Cache-Control:max-age=0 不緩存服務器資源
- Connection:是否開啓長連接
示例:Connection:keep-alive 告訴服務器這是一個長連接
- Cookie:瀏覽器用這個屬性向服務器發送Cookie,它可以記載和服務器相關的用戶信息
- Host:主機和端口號
示例:Host:blog.51cto.com
- Upgrade-Insecure-Requests:升級爲HTTPS請求
示例:Upgrade-Insecure-Requests:1 加載http資源時自動替換爲https請求,不再顯示警報
- User-Agent:瀏覽器名
示例:User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
- Referer:表明產生頁面來自哪個URL
示例:Referer:http://blog.51cto.com/13570193/2108347
- Accept-Charset:表明可以處理的字符編碼
示例:Accept-Charset: utf-8, iso-8859-1;q=0.5
- Content-Type:表明實際發送的數據類型
示例:Content-Type:application/x-www-form-urlencoded
更多header字段含義可到HTTP Headers查詢
HTTP響應
HTTP響應分爲:狀態行、響應頭、空行、響應正文
- 狀態行:協議版本、狀態碼、狀態碼解釋
- 響應頭:與請求頭類似
- 空行:表示響應頭結束,不可缺失
- 響應正文:響應的具體數據
常見HTTP響應Header
-
Cache-Control:
-
Connection
- Content-Encoding
-
Content-Type
-
Date:服務端發送資源時的服務器時間,使用GMT時間,HTTP協議使用的時間都是GMT時間
示例:Date:Sun, 30 Sep 2018 06:49:11 GMT
-
Expires:告訴客戶端在這個時間前,可以直接訪問緩存副本
示例:Expires, 30 Sep 2018 06:49:11 GMT
-
Server:表明服務器信息
示例:Server:openresty
-
Transfer-Encoding:服務器發送的資源的方式
示例:Transfer-Encoding:chunked 分塊發送
-
Vary:用於列出一個響應字段列表,告訴緩存服務器遇到同一個 URL 對應着不同版本文檔的情況時,如何緩存和篩選合適的版本
示例:Vary:Accept-Encoding
-
Strict-Transport-Security:告訴瀏覽器只能通過HTTPS訪問當前資源
示例:Strict-Transport-Security:max-age= 31536000 表示31536000內都使用https訪問資源
更多header字段含義可到HTTP Headers查詢
常見狀態碼
1xx: 信息性狀態碼
- 100, 101
2xx: 成功狀態碼
- 200:OK
3xx: 重定向狀態碼
- 301:請求永久重定向
- 302:請求臨時重定向
- 304:請求被重定向到客戶端本地緩存
4xx: 客戶端錯誤狀態碼
- 400---/客戶端請求存在語法錯誤
- 401---/客戶端請求沒有經過授權
- 403---/客戶端的請求被服務器拒絕,一般爲客戶端沒有訪問權限
- 404---/客戶端請求的URL在服務端不存在
5xx: 服務器端錯誤狀態碼
- 500: Internal Server Error 服務器內部錯誤
- 502: Bad Gateway 前面代理服務器聯繫不到後端的服務器時出現
- 504:Gateway Timeout 這個是代理能聯繫到後端的服務器,但是後端的服務器在規定的時間內沒有給代理服務器響應
更多響應狀態碼請點擊HTTP response status codes
HTTP版本
- HTTP/0.9 HTTP協議的最初版本,僅支持GET,僅能訪問HTML格式的資源
- HTTP/1.0 增加了POST和HEAD,支持MIME,可以訪問多種數據格式,如text/html、image/jpeg等,支持cache。工作方式是每次TCP連接只能發送一個請求,當服務器響應後就會關閉這次連接,不支持keepalive。
- HTTP/1.1 支持keepalive持久連接,加入了管道機制,一個TCP連接同時允許多個請求同時發送,增加了併發性;新增了請求方式PUT、PATCH、DELETE等。但是還存在一些問題,服務端是按隊列順序處理請求的,假如一個請求處理時間很長,則會導致後邊的請求無法處理,這樣就造成了隊頭阻塞的問題;同時HTTP是無狀態的連接,因此每次請求都需要添加重複的字段,降低了帶寬的利用率。
- HTTP/2.0 增加雙工模式,即不僅客戶端能夠同時發送多個請求,服務端也能同時處理多個請求,解決了隊頭堵塞的問題;HTTP請求和響應中,狀態行和請求/響應頭都是些信息字段,並沒有真正的數據,因此在2.0版本中將所有的信息字段建立一張表,爲表中的每個字段建立索引,客戶端和服務端共同使用這個表,他們之間就以索引號來表示信息字段,這樣就避免了1.0舊版本的重複繁瑣的字段,並以壓縮的方式傳輸,提高利用率。另外也增加服務器推送的功能,即不經請求服務端主動向客戶端發送數據。
當前主流的協議版本還是HTTP/1.1版本
網站訪問量
- IP:以公網IP計算訪問量
- UV:以電腦計算訪問量
- PV:以打開網頁次數計算訪問量