整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          從你在瀏覽器輸入url到發起http請求,這過程到底發生了什么?

          當你在瀏覽器輸入url到發起http請求,這過程到底發生了什么?其實整個流程如下:

          1. 域名解析
          2. 為了將消息從你的PC上傳到服務器
          3. 上.需要用到1P協議、ARP協議和0SPF協議
          4. 發起TCP的3次握手
          5. 建立TCP連接后發起http請求
          6. 服務器響應htp請求
          7. 瀏覽器解析htm代碼,并請求html代碼中的資源(如js、css、圖片等)
          8. 斷開TCP連接
          9. 瀏覽器對頁面進行渲染呈現給用戶


          用戶輸入url

          當用戶輸入url,操作系統會將輸入事件傳遞到瀏覽器中,在這過程中,瀏覽器可能會做一些預處理,比如 Chrome 會根據歷史統計來預估所輸入字符對應的網站,例如輸入goog,根據之前的歷史發現 90% 的概率會訪問「www.google.com 」,因此就會在輸入回車前就馬上開始建立 TCP 鏈接甚至渲染了。

          接著是輸入url之后,點擊回車,這時瀏覽器會對 URL 進行檢查,首先判斷協議,如果是 http 就按照 Web 來處理,另外還會對這個 URL 進行安全檢查

          安全檢查完成之后,在瀏覽器內核中會先查看緩存,然后設置 UA 等 HTTP 信息,接著調用不同平臺下網絡請求的方法。

          注意:

          瀏覽器和瀏覽器內核是不同的概念,瀏覽器指的是 Chrome、Firefox,而瀏覽器內核則是 Blink、Gecko,瀏覽器內核只負責渲染,GUI 及網絡連接等跨平臺工作則是瀏覽器實現的



          http網絡請求

          • 通過 DNS 查詢 IP;
          • 通過 Socket 發送數據

          dns查詢ip

          DNS,英文是Domain Name System,中文叫域名系統,是Internet的一項服務,他將域名和IP地址相互映射的一個分布式數據庫

          假設用戶在瀏覽器中輸入的是www.google.com,大概過程:

          如果輸入的是域名,則需要進行dns查詢,將域名解析成ip;

          進行DNS查詢的主機或軟件叫做DNS解析器,用戶使用的工作站或電腦都屬于解析器。域名解析就是利用DNS解析器得到對應IP過程,解析器會向域名服務器進行查詢處理。

          主要過程如下:

          • 從瀏覽器緩存中查找域名www.google.com的IP地址
          • 在瀏覽器緩存中沒找到,就在操作系統緩存中查找,這一步中也會查找本機的hosts看看有沒有對應的域名映射(當然已經緩存在系統DNS緩存中了)
          • 在系統中也沒有的話,就到你的路由器來查找,因為路由器一般也會有自己的DNS緩存

          如果以上都沒有找到,則繼續往下向dns域名服務器查詢

          • 用戶電腦的解析器向LDNS(也就是Local DNS,互聯網服務提供商ISP),發起域名解析請求,查詢www.google.com的IP地址,這是一個遞歸查找過程
          • 在緩存沒有命中的情況下,LDNS向根域名服務器.查詢www.google.com的IP地址,LDNS的查詢過程是一個迭代查詢的過程
          • 根告訴LDNS,我不知道www.google.com對應的IP,但是我知道你可以問com域的授權服務器,這個域歸他管
          • LDNS向com的授權服務器問www.google.com對應的IP地址
          • com告訴LDNS,我不知道www.google.com對應的IP,但是我知道你可以問google.com域的授權服務器,這個域歸他管
          • LDNS向google.com的授權服務器問www.google.com對應的IP地址
          • google.com查詢自己的ZONE文件(也稱區域文件記錄),找到了www.google.com對應的IP地址,返回給LDNS
          • LDNS本地緩存一份記錄,把結果返回給用戶電腦的解析器
          • 在這之后,用戶電腦的解析器拿到結果后,緩存在自己操作系統DNS緩存中,同時返回給瀏覽器,瀏覽器依舊會緩存一段時間。

          注意,

          域名查詢時有可能是經過了CDN調度器的(如果有cdn存儲功能的話)

          而且,需要知道dns解析是很耗時的,因此如果解析域名過多,會讓首屏加載變得過慢,可以考慮dns-prefetch優化

          tcp/ip請求

          有了 IP 地址,就可以通過 Socket API 來發送數據了,這時可以選擇 TCP 或 UDP 協議。

          http本質是tcp協議。

          TCP是一種面向有連接的傳輸層協議。他可以保證兩端(發送端和接收端)通信主機之間的通信可達。他能夠處理在傳輸過程中丟包、傳輸順序亂掉等異常情況;此外他還能有效利用寬帶,緩解網絡擁堵。

          建立TCP連接一開始都要經過三次握手:

          三次握手


          第一次握手,請求建立連接,發送端發送連接請求報文

          第二次握手,接收端收到發送端發過來的報文,可知發送端現在要建立聯機。然后接收端會向發送端發送一個報文

          第三次握手,發送端收到了發送過來的報文,需要檢查一下返回的內容是否是正確的;若正確的話,發送端再次發送確認包

          在TCP連接建立完成之后就可以發送HTTP請求了。

          注意

          瀏覽器對同一個域名有連接數限制,大部分是 6,http1.0中往往一個資源下載就需要對應一個tcp/ip請求,而像 HTTP 2.0 協議盡管只使用一個 TCP 連接來傳輸數據,但性能反而更好,而且還能實現請求優先級。


          后面會分享更多devops和DBA內容,感興趣的朋友可以關注下!!

          eb或H5中使用OAuth2授權機制來獲取第3方平臺用戶基礎信息,進而實現業務邏輯,這是現在比較流行的做法(基本上OAuth已經成為開放授權事實上的標準了)。

          對接第3方平臺OAuth2用戶授權功能時,首先需要在第3方開放平臺中填寫授權回調域名,一般允許用戶填寫的授權回調域名都有數量限制(通常為1個),這就造成我們在開發和正式環境中需要來回更改第3方開放平臺中授權回調域名。

          本文主要講解如何創建OAuth2授權回調中轉URL

          中轉URL:該URL主要將第3方平臺OAuth2用戶授權重定向時傳遞的code參數以及其他Query參數一起傳遞給應用的最終回調URL上。因此我們只需要將第3方開放平臺中授權回調域名固定為該URL所在域名即可。

          HTML + JS實現

          思路:創建一個純靜態HTML文件,該URL接收一個redirect_uri參數指向應用最終回調URL,通過JavaScript獲取redirect_uri值作為最終回調URL并獲取其他參數拼接到最終回調URL上,最后重定向到最終回調URL上。

          優勢:1). 無需后端服務器進行解析,系統開銷小 2). 可以直接將該HTML文件上傳到外部平臺,對外部平臺無任何破壞性

          調用方式:

          假設中轉URL為: https://codebays.com/oauth.html,應用最終回調URL為:https://codebays.com/oauth2/callback。


          第3方開放平臺授權回調域名固定為codebays.com即可。


          構建OAuth2用戶授權URL時,參數redirect_uri的值填入:

          https://codebays.com/oauth.html?redirect_uri=urlencode(https://codebays.com/oauth2/callback)


          代碼如下:

          Nginx + Lua 實現

          思路:Nginx安裝LuaJIT擴展(可以直接安裝Openresty),Nginx配置文件中配置一個虛擬location(指向路徑/oauth.html),虛擬location使用lua腳本來實現rewrite。

          優勢:1). Nginx+Lua直接解析并重定向,系統開銷小

          Nginx配置參數如下:

          oauth.lua代碼如下:

          Openresty是一個基于Nginx和Lua的高性能Web平臺,用于方便地搭建能夠處理超高并發、擴展性極高的動態 Web 應用、Web 服務和動態網關。


          【web說】不局限于web知識分享。

          eb或H5中使用OAuth2授權機制來獲取第3方平臺用戶基礎信息,進而實現業務邏輯,這是現在比較流行的做法(基本上OAuth已經成為開放授權事實上的標準了)。

          對接第3方平臺OAuth2用戶授權功能時,首先需要在第3方開放平臺中填寫授權回調域名,一般允許用戶填寫的授權回調域名都有數量限制(通常為1個),這就造成我們在開發和正式環境中需要來回更改第3方開放平臺中授權回調域名。

          本文主要講解如何創建OAuth2授權回調中轉URL

          中轉URL:該URL主要將第3方平臺OAuth2用戶授權重定向時傳遞的code參數以及其他Query參數一起傳遞給應用的最終回調URL上。因此我們只需要將第3方開放平臺中授權回調域名固定為該URL所在域名即可。

          HTML + JS實現

          思路:創建一個純靜態HTML文件,該URL接收一個redirect_uri參數指向應用最終回調URL,通過JavaScript獲取redirect_uri值作為最終回調URL并獲取其他參數拼接到最終回調URL上,最后重定向到最終回調URL上。

          優勢:1). 無需后端服務器進行解析,系統開銷小 2). 可以直接將該HTML文件上傳到外部平臺,對外部平臺無任何破壞性

          調用方式:

          假設中轉URL為: https://codebays.com/oauth.html,應用最終回調URL為:https://codebays.com/oauth2/callback。


          第3方開放平臺授權回調域名固定為codebays.com即可。


          構建OAuth2用戶授權URL時,參數redirect_uri的值填入:

          https://codebays.com/oauth.html?redirect_uri=urlencode(https://codebays.com/oauth2/callback)


          代碼如下:

          Nginx + Lua 實現

          思路:Nginx安裝LuaJIT擴展(可以直接安裝Openresty),Nginx配置文件中配置一個虛擬location(指向路徑/oauth.html),虛擬location使用lua腳本來實現rewrite。

          優勢:1). Nginx+Lua直接解析并重定向,系統開銷小

          Nginx配置參數如下:

          oauth.lua代碼如下:

          Openresty是一個基于Nginx和Lua的高性能Web平臺,用于方便地搭建能夠處理超高并發、擴展性極高的動態 Web 應用、Web 服務和動態網關。


          【web說】不局限于web知識分享。


          主站蜘蛛池模板: 色婷婷香蕉在线一区二区| 国产未成女一区二区三区| 精品香蕉一区二区三区| 一区二区三区视频网站| 无码av中文一区二区三区桃花岛| 久久91精品国产一区二区| 亚洲国模精品一区| 日韩精品电影一区亚洲| 久久蜜桃精品一区二区三区| 人妻无码第一区二区三区| 亚洲乱码一区二区三区在线观看 | 国产suv精品一区二区33| 香蕉久久AⅤ一区二区三区| 天堂Av无码Av一区二区三区| 国产大秀视频在线一区二区| 蜜臀Av午夜一区二区三区| 久久精品免费一区二区三区| 中文字幕一区二区三区在线不卡| 视频一区二区三区人妻系列| 影院无码人妻精品一区二区| 乱中年女人伦av一区二区| 日本在线视频一区| 国产美女口爆吞精一区二区| 精品人妻少妇一区二区| 手机看片一区二区| 无码一区二区三区| 91精品福利一区二区三区野战| 人妻无码一区二区三区免费 | 丰满人妻一区二区三区视频| 波多野结衣中文字幕一区| 视频在线观看一区| 好爽毛片一区二区三区四| 日韩电影一区二区| 中文字幕一区在线观看视频| 精品国产一区二区三区AV| 国产一区二区三区免费看| 国产精品毛片一区二区| 中文字幕精品一区影音先锋| 蜜芽亚洲av无码一区二区三区| 高清一区二区在线观看| 国产在线精品一区免费香蕉|