學習http請求原理

深入學習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 的速度會大量的提升
他主要是,多了,通道複用,可以分片傳輸,也可以推送數據了,這裏速度提升特別明顯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章