第一次進入乙個**時,本地無快取,response成功返回200
伺服器在response header裡,設定了etag和last-modify,如下圖;
etag
欄位將資源唯一性的標識,如果資源有更新,etag值也將變化;
last-modify
表明了在伺服器端最後發生改變的時間;
瀏覽器儲存這個etag值和last-modify,以便於下次請求的時候使用;
重新整理後,傳送的request header如下:
其中if-none-match欄位就是向伺服器端詢問第一次的etag值是否更新,兩次etag相同,說明資源未發生根本改變
if-modified-since向伺服器詢問在這個時間發生改變了嗎;
最終發回響應,etag和last-modify無變化,所以最終返回304,比第一次的responseheader相比,還多了兩個字段cache-control: max-age
和expires
這兩個屬性就是為了告訴瀏覽器,不必再來詢問伺服器資源過沒過期,允許瀏覽器在乙個時間段內繼續使用本地快取;
max-age屬於http1.1 ,expires屬於http1.0,如果max-age和expires同時存在,expires則被cache-control的max-age覆蓋。
另外返回的responseheader還有via欄位,說明經過了很多**伺服器,這說明我們要的資源可能是放在了cdn上的;
還有個字段vary,它可對快取進行控制,它告訴**伺服器,返回和accept-encoding欄位相同的快取資源,而不是從源伺服器端;
no-store不快取任何內容
no-cache先向伺服器驗證快取
共享金鑰加密(對稱加密):加密解密用同一金鑰,當客戶端傳送資料時,用金鑰加密,同時也要把金鑰發給伺服器端。這樣造成的問題是金鑰容易被中間攻擊者獲取,也能解密內容;
公開金鑰加密(非對稱加密):加密用公開金鑰加密,解密用私有金鑰解密。其中公開金鑰任何人都能獲取,私有金鑰不公開。當客戶端傳送資料時,用公鑰加密,伺服器端再用自己的私鑰解密;
https是在http和tcp之間,再填一層ssl,ssl的基本思想是用非對稱加密來建立鏈結(握手階段),用對稱加密來傳輸資料(傳輸階段)。這樣做是因為非對稱加密比對稱加密複雜,計算量大,所以只在建立連線階段來傳送對稱加密的金鑰;
具體建立連線步驟如下:
在http1.1中預設開啟長連線connection: keep-alive
,這樣是為了復用tcp,頻繁的http請求會造成頻繁的tcp建立。
使用connection: keep-alive
後,當乙個網頁開啟完成後,客戶端和伺服器之間用於傳輸http資料的tcp連線不會立即關閉,之後的ajax請求、靜態檔案請求,會繼續使用這一條已經建立的連線,但是keep-alive不會永久保持連線,它有乙個保持時間,超過保持時間仍會斷開。
雖然http1.1的tcp連線有乙個保持時間,超過保持時間會斷開,但是我們可以不時地向這條連線傳送資料,這樣這個連線就一直不會斷開。所以可以用http長連線來做乙個不使用客戶端輪詢的comet推送。
採用node編寫的伺服器端**:
if (request.url == '/ct' && request.method == "post") );
request.on("end", function() );
var json=
json=json.stringify(json)
response.write(json);
console.log(body)
response.id=body;
clients.push(response); //clients陣列儲存response
});request.connection.on("end",function () )
}setinterval(function()
json=json.stringify(json)
client.write(json);
})}, 10000);
關於HTTP的一些自我歸納
http 瀏覽器和web伺服器之間使用的溝通方式。http有兩個極為重要的特性 1 基於請求 request 響應 response 模型 客戶端對伺服器發出乙個取得資源的請求,伺服器將要求的資源響應給客戶端 2 無狀態 stateless 通訊協議 伺服器響應客戶端之後,便不會再記得客戶端資訊 g...
關於日誌的一些學習
為什麼要打日誌 在日常開發中 日誌起到至關重要的作用 因為專案上線後不允許你除錯,你只能通過log來分析問題。專案出問題時,你要能拿出log證明自己負責的部分沒有問題,如果是自己的問題,要從log裡快速找出錯誤原因 關於log級別 曾經在面試的時候被問到過的問題 直到忙到今天才有時間對這個問題進行詳...
關於gcc的一些學習
參考部落格 c原始檔到可執行檔案共經歷了4個過程。包括預處理 編譯 彙編 鏈結。為了方便好記,可以採用記錄單條編譯命令的方式,這樣可以把命令也一起記下來。比如 esco gcc e hello.c hello.i 編譯器將hello.c預處理結果輸出 hello.i 檔案。這是我本地的hello.c...