標籤:blog http io os 使用 sp for strong on
1.什麼是HTTP
超文字傳輸通訊協定 (HTTP)(英文:HyperText Transfer Protocol,縮寫:HTTP)是互連網上應用最為廣泛的一種網路通訊協定。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的資源由統一資源識別項(Uniform Resource Locator,URL)來標識,通俗地講,超文字傳輸通訊協定 (HTTP)(HTTP)是一種通訊協定,它允許將超文字標記語言 (HTML)(HTML)文檔從Web伺服器傳送到用戶端的瀏覽器。
2.在TCP/IP協議棧中的位置:
HTTP協議通常承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS。如所示:
預設HTTP的連接埠號碼為80,HTTPS的連接埠號碼為443
3.HTTP的請求響應模型
HTTP協議永遠都是用戶端發起請求,伺服器回送響應。
不經過Proxy 伺服器的請求方式
經過Proxy 伺服器的請求方式
這樣就限制了使用HTTP協議,無法實現在用戶端沒有發起請求的時候,伺服器將訊息推送給用戶端。 HTTP協議是一個無狀態的協議,同一個用戶端的這次請求和上次請求是沒有對應關係。
4.URL詳解
URL的基本格式:
schema://host[:port#]/path/.../[?query-string][#anchor]
scheme 指定低層使用的協議(例如:http, https, ftp)
host HTTP伺服器的IP地址或者網域名稱
port# HTTP伺服器的預設連接埠是80,這種情況下連接埠號碼可以省略。如果使用了別的連接埠,必須指明,例如 http://www.cnblogs.com:8080/
path 訪問資源的路徑
query-string 發送給http伺服器的資料
anchor- 錨
URL 的一個例子
http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff Schema: http host: www.mywebsite.com path: /sj/test/test.aspx Query String: name=sviergn&x=true Anchor: stuff
5.開啟一個網頁需要瀏覽器發送很多次Request
5.1. 當你在瀏覽器輸入URL http://www.cnblogs.com 的時候,瀏覽器發送一個Request去擷取 http://www.cnblogs.com 的html. 伺服器把Response發送回給瀏覽器.
5.2. 瀏覽器分析Response中的 HTML,發現其中引用了很多其他檔案,比片,CSS檔案,JS檔案。
5.3. 瀏覽器會自動再次發送Request去擷取圖片,CSS檔案,或者JS檔案。
5.4. 等所有的檔案都下載成功後。 網頁就被顯示出來了。
6.HTTP訊息的結構
第一行中的Method表示要求方法,比如"POST","GET", Path-to-resoure表示請求的資源, Http/version-number 表示HTTP協議的版本號碼
我們再看Response訊息的結構, 和Request訊息的結構基本一樣。 同樣也分為三部分,第一部分叫Response line, 第二部分叫Response header,第三部分是body. header和 body之間也有個空行, 結構如
7.Get和Post方法的區別
8.狀態代碼
Response 訊息中的第一行叫做狀態行,由HTTP協議版本號碼, 狀態代碼, 狀態訊息 三部分組成。
狀態代碼用來告訴HTTP用戶端,HTTP伺服器是否產生了預期的Response.
HTTP/1.1中定義了5類狀態代碼, 狀態代碼由三位元字組成,第一個數字定義了響應的類別
1XX 提示資訊 - 表示請求已被成功接收,繼續處理
2XX 成功 - 表示請求已被成功接收,理解,接受
3XX 重新導向 - 要完成請求必須進行更進一步的處理
4XX 用戶端錯誤 - 請求有語法錯誤或請求無法實現
5XX 伺服器端錯誤 - 伺服器未能實現合法的請求
常見狀態代碼解釋
200 OK
最常見的就是成功響應狀態代碼200了, 這表明該請求被成功地完成,所請求的資源發送回用戶端
302 Found
重新導向,新的URL會在response 中的Location中返回,瀏覽器將會自動使用新的URL發出新的Request
例如在IE中輸入, http://www.google.com. HTTP伺服器會返回302, IE取到Response中Location header的新URL, 又重新發送了一個Request.
304 Not Modified
代表上次的文檔已經被緩衝了, 還可以繼續使用
400 Bad Request
用戶端請求與語法錯誤,不能被伺服器所理解
403 Forbidden
伺服器收到請求,但是拒絕提供服務
404 Not Found
請求資源不存在(輸錯了URL)
500 Internal Server Error
伺服器發生了不可預期的錯誤
503 Server Unavailable
伺服器當前不能處理用戶端的請求,一段時間後可能恢複正常
9.Cookie和Session
9.1Cookie的分類
可以大致把Cookie分為2類: 回話cookie和持久cookie
會話cookie: 是一種臨時的cookie,它記錄了使用者訪問網站時的設定和偏好,關閉瀏覽器,會話cookie就被刪除了
持久cookie: 儲存在硬碟上,(不管瀏覽器退出,或者電腦重啟,持久cookie都存在), 持久cookie有到期時間
9.2Session是儲存在伺服器端的,通過Session ID與用戶端關聯
HTTP協議小結