1. 程式人生 > >Web頁面解析過程(淺)

Web頁面解析過程(淺)

web頁面流程

域名解析DNS

域名解析:把域名指向網路空間IP,讓人們通過簡單的域名訪問Web網站的服務。

DNS:域名系統

DNS伺服器:記錄著域名及其對應的IP地址

解析域名:

​ 瀏覽器中輸入目標網站的域名,瀏覽器會生成一個域名IP的請求

​ 請求第一時間會查詢本地主機的DNS快取表ipconfig/displaydns,若本地DNS快取表有對應的IP地址則返回瀏覽器進行訪問,如果沒有則會向DNS域名伺服器發出查詢請求(上一級的DNS伺服器)

​ 本地DNS伺服器接收到查詢請求,按照第二步查詢本地已經快取的DNS表對應的IP地址,查詢不到本地的則會向根DNS域名伺服器傳送查詢

​ 根域伺服器接收到查詢請求,則會把把頂級域的IP地址傳送給本地DNS伺服器,本地DNS伺服器向收到的頂級域伺服器傳送請求,頂級域伺服器則會找到管理該域名的域伺服器並返回對應的IP地址給本地DNS伺服器

​ 瀏覽器根據本地DNS伺服器返回的IP地址,連線伺服器並進行TCP連線和HTTP請求

域名記錄

域名和IP地址有某種對應的關係

A記錄:返回域名對應的IP地址

NS域名伺服器記錄:儲存下一級域名資訊的伺服器地址

MX郵件記錄:接收電子郵件的伺服器地址

CNAME規範記錄:返回另一個域名(當前查詢的域名的另一個域名的跳轉地址)

PTR逆向查詢記錄:用於IP地址查詢域名

AAAA記錄:IPv6主機記錄

配置DNS

域名申請成功之後首先需要做域名解析。點DNS解析管理,然後增加IP,增加別名以及郵件MX記錄。先增加IP。如想要實現去掉3W的頂級域名亦可訪問網站,除了要在空間裡繫結不加3W的域名外,還要解析,主機名為空。

修改DNS

​ 條件:要更改為的主、輔DNS伺服器都必須是註冊過的、合法的DNS伺服器名稱,否則修改會失敗。
​ 如果要查詢DNS是否為合法的DNS,可以點選:國際域名DNS查詢介面、國內域名DNS查詢介面通用頂級域名DNS查詢介面使用方法:輸入DNS伺服器的名稱,選中第三個選項Nameserver,查詢如果查詢出有DNS註冊的資訊,如註冊商,名稱對應的IP地址,則這個DNS是合法的。國內域名DNS查詢介面使用方法: 在“主機”一欄中輸入DNS伺服器的名稱,點選查詢,如果查詢出有DNS註冊的資訊,如註冊商,名稱對應的IP地址,則這個DNS是合法的
​ 修改方法:通過相應域名註冊公司進行域名變更DNS操作。

​ 解析生效時間
​ 通用頂級域名解析是2小時內生效,國家頂級域名解析24小時內生效。
​ 是否解析成功
​ 因為域名解析需要同步到DNS根伺服器,而DNS根伺服器會不定時刷,只有DNS根伺服器重新整理後域名才能正常訪問,新增解析一般會在10分鐘左右生效,最長不會超過24小時,修改解析時間會稍微延長。可以用ping命令來檢視域名是否生效。點選開始選單>執行>輸入"CMD">敲回車鍵,進入 命令提示符視窗,輸入"ping 您的域名",如果紅線部分為您主機的IP即解析成功。

web頁面請求(Nginx)

請求過程

  1. 主機向DHCP(動態主機配置協議)伺服器獲取一個IP地址
  2. 瀏覽器確定目標域名/伺服器IP
  3. DNS向瀏覽器返回目標域名的IP地址
  4. 瀏覽器接收DNS返回的IP地址並向目標傳送TCP連線請求(TCP三次握手)
  5. TCP建立成功,瀏覽器向目標傳送HTTP/服務協議請求,伺服器響應瀏覽器的請求
  6. 瀏覽器對伺服器返回的響應資料包進行渲染並輸出到瀏覽器中

Nginx的過程

POST_READ 讀取HTTP頭部,讀取並解析內容

server-rewrite在URL與location匹配之前修改請求的URL(重定向),在server塊中的請求地址重寫

find-config配置查詢階段,根據請求的URL匹配location表示式;不支援nginx模組註冊處理程式,而是由ngx_http_core_module模組來完成當前請求與location配置之間的匹配

rewritelocation塊追蹤的請求地址重寫階段,當rewrite指令用於location中則執行;ngx_lua模組中的set_by_lua指令和rewrite_by_lua指令也在這裡

post-rewrite請求地址重寫提交階段,防止遞迴修改URL造成死迴圈;由ngx_http_core_module模組實現

preaccess訪問許可權檢查準備階段,http模組進入處理階段,ngx_limit_req(訪問控制的頻率)和ngx_limit_zone(訪問的併發率控制)也會執行

access訪問許可權檢查執行階段,ngx_access和nginx_auth_request,ngx_lua的access-by_lua執行在這個階段,配置指令多是執行訪問控制性質的任務,比如檢查使用者的訪問許可權,檢查使用者的IP地址合法性

post-access訪問許可權檢查提交階段,如果請求不被允許訪問Nginx伺服器,該階段用於返回錯誤的響應

try-files配置項try-files處理階段,如果http訪問的靜態檔案try-files配置項可以使這個請求順序地訪問多個靜態檔案,直至符合條件

content內容產生階段,大部分HTTP模組會執行,所有請求處理階段中的重要階段這個階段的指令通常用來生成HTTP響應的內容

log日誌模組處理階段,記錄日誌

HTTP協議

HTTP請求/響應:

統一資源定位符,是一種網際網路的標準地址規範

協議://伺服器IP:埠/路徑/?屬性=value

計算機主要通過瀏覽器的URL進行HTTP請求傳送,在linux中可以使用curl命令傳送HTTP請求:(linux實現curl訪問baidu)

curl http://www.baidu.com #訪問HTTP響應資料

curl http://www.baidu.com -I #回顯HTTP響應頭部資料

curl命令的結果,可以認為瀏覽器的作用是渲染HTTP響應資訊包

HTTP是一種無狀態協議,與WEB瀏覽器之間不會建立永久連線;當伺服器返回響應後,就會關閉與伺服器之間的連線,只有在重新發起請求的時候才會重新建立連線(伺服器不主動連線,連線由客戶端發起)

HTTP是請求和響應為核心:客戶端發起請求,服務端返回響應

HTTP請求包含:請求行、請求頭、請求正文

GET /login.php HTTP/1.1  //請求行
HOST:192.168.2.172
User-Agent:Mozilla/5.0 (Windows NT 10.0;Win64 X64;rv:66.0) Gecko/20100101 Firefox/66.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Languge:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding:gzip,deflate
DNT:1
Connection: keep-alive
Cookie: security=impossible; hibext_instdsigdipv2=1; PHPSESSID=d19t3v9obo76br07i58qrl88p5
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache

HTTP請求方法:

GET方法:

用於獲取請求頁面的指定資源,沒有完整的請求內容(請求的引數實際是存在URL中)

GET /index.php HTTP/1.1
POST方法:

用於向指定的URL頁面請求資源或提交內容資源

我們登入login.php,利用POST方法將請求主體上傳提交

HEAD方法:

用於只要求伺服器響應返回HTTP資訊(返回除訊息主體外的資訊);常用來測試連結的有效性,測試頁面是否可以正常訪問常用這個請求方法訪問

PUT/DELETE方法:

PUT用於向伺服器請求儲存指定的實體資訊在指定的HOST中;DELETE用於向伺服器請求刪除指定URL位置的資源;非常危險的兩個請求方法哦~常常被禁止使用

TRACE方法:

TRACE用於激發服務端的請求訊息迴路,回顯伺服器接收的請求,常用於診斷

HTTP響應狀態碼:

1XX:資訊提示

表示訊息成功接收

2XX:成功

表示伺服器成功的處理了訊息

200:客戶端請求成功

3XX:重定向

訪問的資源被轉移,告知客戶端訪問新的指向URL

302:重定向

4XX:錯誤

請求資源錯誤

404:請求的資源不存在

400:請求語法錯誤,服務端無法解析

401:請求未獲得許可權

403:服務端拒絕客戶端請求

5XX:服務端錯誤

服務端拒絕或無法正常的處理請求

500:服務端錯誤

503:服務不可用(超載或停機維護)

HTTP訊息:

HTTP訊息等同於HTTP頭部(HTTP heard);由請求頭、響應頭、普通頭和實體資訊

請求頭:

起始行:請求方法 + 請求URL + HTTP協議及版本

GET /index.php HTTP/1.1

HOST指定資源的URL

User-Agent客戶端瀏覽器的資訊

Referer當前URL的上一級URL

Range請求實體的部分內容

x-forward-forXXF頭,請求端的IP,多個IP使用逗號隔開

Accept指定服務端接收的MIME型別資訊

Accept-Charset指定客戶端接收的字符集

響應頭:

響應頭是伺服器依據請求向客戶端傳送的HTTP頭,

Server伺服器所使用Web伺服器的名稱

Set-Cookie向客戶端設定Cookie

Last-Modified告訴客戶端該資源最後的修改時間

Location302重定向的新的URL頁面

Refersh告訴瀏覽器客戶端定時重新整理

普通頭:
實體頭:

Content-Type向接收端說明實體的介質型別

Content-Encoding媒體型別的修飾符(採用編碼/解碼的機制)

Content-Lengthvalue代表實體正文的長度(位元組)

Last-Modified資源的最後修改時間

頁面解析中的安全

DNS域名劫持

攻擊者通過對域名解析伺服器的攻擊或偽造,吧目標網站的域名解析到錯誤(黑客準備)的頁面,從而達到攻擊者的某種目的

原理上通俗的解釋:

黑客改變了DNS伺服器中原本正確的網址解析的IP並變更為自己準備的IP伺服器中