深入學習http
http過程
1,redirect(判斷是否跳轉) 2,app cache(查找緩存) 3,dns(查找地址) 4,tcp(建立鏈接) 5,request(發送數據) 6,response(響應數據)
5層網絡協議
應用層 http ftp
傳輸層 tcp udp
網絡層 系統級別(實現ip地址)
數據鏈層 實現硬件鏈接
物理層 建立硬件鏈接
三次握手
爲了解決多餘的數據開銷的問題
##URI URL URN
URI 統一資源標識符
URL 統一資源定位符,定義資源位置
URN 永久統一資源定位符(不成熟)
報文
http 方法 HTTP1.0 GET, POST 和 HEAD方法。
HTTP1.1 新增了六種請求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
http code 狀態碼
請求限制
可以進行預處理,就是發送數據的時候,
比如包含了方法爲,put (還有其他的,頭信息等),那麼默認瀏覽器是不處理結果的,這時候需要服務器返回數據頭,讓瀏覽器進行處理
緩存(主要是設置緩存)
Cache-Control 是最重要的規則。常見的取值有private、public、no-cache、max-age,no-store,默認爲private。
private: 客戶端可以緩存
public: 客戶端和代理服務器都可緩存(前端的同學,可以認爲public和private是一樣的)
max-age=xxx: 緩存的內容將在 xxx 秒後失效
no-cache: 需要使用對比緩存來驗證緩存數據(後面介紹)
no-store: 所有內容都不會緩存,強制緩存,對比緩存都不會觸發(對於前端開發來說,緩存越多越好,so…基本上和它說886)
cookie
Domain:域,表示當前cookie所屬於哪個域或子域下面。
對於服務器返回的Set-Cookie中,如果沒有指定Domain的值,那麼其Domain的值是默認爲當前所提交的http的請求所對應的主域名的。比如訪問 http://www.example.com,返回一個cookie,沒有指名domain值,那麼其爲值爲默認的www.example.com。
Path:表示cookie的所屬路徑。
Expire time/Max-age:表示了cookie的有效期。expire的值,是一個時間,過了這個時間,該cookie就失效了。或者是用max-age指定當前cookie是在多長時間之後而失效。如果服務器返回的一個cookie,沒有指定其expire time,那麼表明此cookie有效期只是當前的session,即是session cookie,當前session會話結束後,就過期了。對應的,當關閉(瀏覽器中)該頁面的時候,此cookie就應該被瀏覽器所刪除了。
secure:表示該cookie只能用https傳輸。一般用於包含認證信息的cookie,要求傳輸此cookie的時候,必須用https傳輸。
httponly:表示此cookie必須用於http或https傳輸。這意味着,瀏覽器腳本,比如javascript中,是不允許訪問操作此cookie的。
數據協商
分類
請求 Accept
返回 Content
Accept
Accept 聲明想要數據的類型
Accept-Encoding 數據以哪種編碼方式傳輸,限制服務端如何進行數據壓縮。
Accept-Language 展示語言
User-Agent 瀏覽器相關信息,移動端、客戶端、pc端的瀏覽器 User-Agent 不同。
Content服務端返回
Content-Type 對應 Accept,從 Accept 中選擇數據類型返回
Content-Encoding 對應 Accept-Encoding,聲明服務端數據壓縮的方式
Content-Language 對應 Accept-Language,是否根據請求返回語言
nginx
代理可以修改頭,使用下面代碼
proxy_set_header Host $host;
代理緩存 ,這裏沒有 瞭解更多。不過挺重要的
proxy_cache_path /soft/cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;
#proxy_cache //存放緩存臨時文件
#levels //按照兩層目錄分級
#keys_zone //開闢空間名,10m:開闢空間大小,1m可存放8000key
#max_size //控制最大大小,超過後Nginx會啓用淘汰規則
#inactive //60分鐘沒有被訪問緩存會被清理
#use_temp_path //臨時文件,會影響性能,建議關閉
proxy_cache cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_cache //開啓緩存
#proxy_cache_valid //狀態碼200|304的過期爲12h,其餘狀態碼10分鐘過期
#proxy_cache_key //緩存key
#add_header //增加頭信息,觀察客戶端respoce是否命中
#proxy_next_upstream //出現502-504或錯誤,會跳過此臺服務器訪問下一臺服務器
https 和 http2
https 主要是加密了,安全性大大提高,有很多這方面的文章非常簡單
http2 變化非常大,啓動他,需要先開啓https 然後用 nginx ,現在沒有條件,有時間去學習一下,對http 的速度會大量的提升
他主要是,多了,通道複用,可以分片傳輸,也可以推送數據了,這裏速度提升特別明顯