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)
請求過程
- 主機向DHCP(動態主機配置協議)伺服器獲取一個IP地址
- 瀏覽器確定目標域名/伺服器IP
- DNS向瀏覽器返回目標域名的IP地址
- 瀏覽器接收DNS返回的IP地址並向目標傳送TCP連線請求(TCP三次握手)
- TCP建立成功,瀏覽器向目標傳送HTTP/服務協議請求,伺服器響應瀏覽器的請求
- 瀏覽器對伺服器返回的響應資料包進行渲染並輸出到瀏覽器中
Nginx的過程
POST_READ
讀取HTTP頭部,讀取並解析內容
server-rewrite
在URL與location匹配之前修改請求的URL(重定向),在server塊中的請求地址重寫
find-config
配置查詢階段,根據請求的URL匹配location表示式;不支援nginx模組註冊處理程式,而是由ngx_http_core_module模組來完成當前請求與location配置之間的匹配
rewrite
location塊追蹤的請求地址重寫階段,當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-for
XXF頭,請求端的IP,多個IP使用逗號隔開
Accept
指定服務端接收的MIME型別資訊
Accept-Charset
指定客戶端接收的字符集
響應頭:
響應頭是伺服器依據請求向客戶端傳送的HTTP頭,
Server
伺服器所使用Web伺服器的名稱
Set-Cookie
向客戶端設定Cookie
Last-Modified
告訴客戶端該資源最後的修改時間
Location
302重定向的新的URL頁面
Refersh
告訴瀏覽器客戶端定時重新整理
普通頭:
實體頭:
Content-Type
向接收端說明實體的介質型別
Content-Encoding
媒體型別的修飾符(採用編碼/解碼的機制)
Content-Length
value代表實體正文的長度(位元組)
Last-Modified
資源的最後修改時間
頁面解析中的安全
DNS域名劫持
攻擊者通過對域名解析伺服器的攻擊或偽造,吧目標網站的域名解析到錯誤(黑客準備)的頁面,從而達到攻擊者的某種目的
原理上通俗的解釋:
黑客改變了DNS伺服器中原本正確的網址解析的IP並變更為自己準備的IP伺服器中