Web基礎 0x00 Web工作方式

2022-07-09 02:42:09 字數 3820 閱讀 1074

web工作方式

對於普通的上網過程,系統其實是這樣做的:瀏覽器本身是乙個客戶端,當輸入url的時候,首先瀏覽器會去請求dns伺服器,通過nds獲取相應的網域名稱對應的ip,然後通過ip位址找到ip對應的伺服器後,要求建立tcp連線,等瀏覽器傳送完http request包後,伺服器接收到請求包之後才開始處理請求包,伺服器呼叫自身服務,返回http response包;客戶端收到來自伺服器的響應後開始渲染這個response包裡的主體(body),等收到全部的內容後斷開與伺服器之間的tcp連線。

乙個web伺服器也被稱為http伺服器,它通過http協議與客戶端通訊。這個客戶端通常指的是web瀏覽器(其實收集客戶端內部也是瀏覽器實現的)。

web伺服器的工作原理可以簡單地歸納為:

乙個簡單的http事務就是這樣實現的,看起來很複雜,原理其實是挺簡單的。需要注意的是客戶機與伺服器之間的通訊時非持久連線的,也就是當伺服器傳送了應答後就與客戶機斷開連線,等待下一次請求。

url和dns解析

我們瀏覽網頁都是通過url訪問的,那麼url到底是怎麼樣的呢?

url(uniform resource locator)是「統一資源定位符」的縮寫,用於描述乙個網路上的資源,基本格式如下

scheme://

host[:port#]/path/.../[?query-string][#anchor]

scheme 指定低層使用的協議(http,https,ftp)

host http伺服器的ip位址或者網域名稱

port 埠號

path 訪問資源路徑

query-string

傳送給http伺服器的資料

anchor 錨

dns(domain name system)是「網域名稱系統」的英文縮寫,是一種組織成域層次結構的計算機和網路服務命名系統,它用於tcp/ip網路,它從事將主機名或網域名稱轉換為實際ip位址的工作。

dns解析的過程如下,這個過程有助於我們理解dns的工作模式

如果hosts裡沒有這個網域名稱的對映,則查詢本地dns解析器快取,是否有這個**對映關係,如果有,直接返回,完成網域名稱解析。

如果hosts與本地dns解析器快取都沒響應的**對映關係,首先會找tcp/ip引數中設定的首選dns伺服器,在此我們叫它本地dns伺服器,此伺服器收到查詢時,如果要查詢的網域名稱,包含在本地配置區域資源中,則返回解析結果給客戶機,完成網域名稱解析,此解析具有權威性。

如果用的是**模式,此dns伺服器就會把請求**至上一級dns伺服器,由上一級伺服器進行解析,上一級伺服器如果不能解析,或找根dns或把請求轉至上上級,以此迴圈。不管是本地dns伺服器是用**還是根提示,最後都是把結果返回給本地dns伺服器,由此dns伺服器再返回給客戶機。

通過上面的步驟,我們最後獲取的是ip位址,也就是瀏覽器最後發起請求的時候是基於ip來和伺服器進行資訊互動的。

http協議詳解

http協議是web工作的核心,所以要了解清楚web的工作方式就需要詳細的了解清楚http是怎麼樣工作的。

http協議是無狀態的,同乙個客戶端的這次請求和上次請求是沒有對應關係,對http伺服器來說,它並不知道這兩個請求是否來自同乙個客戶端。為了解決這個問題,web程式引入了cookie機制來維護連線的可持續狀態。

http協議是建立在tcp協議之上的,因此tcp攻擊一樣會影響http的通訊

例如比較常見的一些攻擊:

syn flood是當前最流行的dos(拒絕服務攻擊)與ddos(分布式拒絕服務攻擊)的方式之一

這是利用tcp協議缺陷,傳送大量偽造的tcp連線請求

從而使得被攻擊方資源耗盡(cpu滿負荷或記憶體不足)的攻擊方式

http請求包(瀏覽器資訊)我們先來看看request包的結構,request包分為3個部分,第一部分叫request line,第二部分叫request header,第三部分是body。header和body之間有個空行,請求包的例子所示:

get /domains/example/ http/1.1  //請求行:請求方法 請求uri http協議/協議版本

host:www.iana.org //服務端的主機名

chrome/22.0.1229.94 safari/537.4 //瀏覽器資訊

accept-encoding : gzip,deflate,sdch //是否支援流壓縮

accept-charset : utf-8,*;q=0.5 //客戶端字元編碼集

//空行,用於分隔請求頭和訊息體

//訊息體,請求資源引數,例如post傳遞的引數

http協議定義了很多與伺服器互動的請求方法,最基本的有4種,分別是get,post,put,delete。乙個url位址用於描述乙個網路上的資源。而http中的get,post,put,delete就對應著對這個資源的查,增,改,刪4個操作。我們最常見的就是get和post了。get一般用於獲取、查詢資源資訊,而post一般用於更新資源資訊。

通過fiddler抓包可以看到如下請求資訊:

-- fiddler抓取的get資訊

--fiddler抓取的post資訊

我們看看get和post的區別:

我們可以看到get請求訊息體為空,post請求帶有訊息體。

get提交的資料會放在url之後,以?分隔url和傳輸資料,引數之間&相連,如editposts.aspx?name=test1&id=123。post方法是把提交的資料放在http包的body中。

get提交的資料大小有限制(因為瀏覽器對url的長度有限制),而post方法提交的資料沒有限制。

get方式提交資料,會帶來安全問題,比如乙個登陸頁面,通過get方式提交資料時,使用者名稱和密碼將出現在url上,如果頁面可以被快取或者其他人可以訪問這台機器,這可以從歷史記錄獲得該使用者的賬號和密碼。

http響應包(伺服器資訊)

我們再來看看http的response包,他的結構如下:

response包中的第一行叫做狀態行,由http協議版本號,狀態碼,狀態訊息三部分組成。

狀態碼用來告訴http客戶端,http伺服器是否產生了預期的response。http/1.1協議中定義了5類狀態碼,狀態碼由三位數字組成,第乙個數字定義了響應的類別

http協議是無狀態的和connection:keep-alive的區別

無狀態是指協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。從另一方面將,開啟乙個伺服器上的網頁和你之前開啟這個伺服器上的網頁之間沒有任何聯絡。

http是乙個無狀態的面向連線的協議,無狀態不代表http不能保持tcp連線,更不能代表http使用的是udp協議(面對無連線)。

從http/1.1起,預設都開啟了keep-alive保持連線特性,簡單來說,當乙個網頁開啟完成後,客戶端和伺服器之間用於傳輸http資料的tcp連線不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的tcp連線。

keep-alive不會永久保持連線,它有乙個保持時間,可以在不同伺服器軟體(如apache)中設定這個時間。

web基礎 0x01 Go搭建乙個Web伺服器

前面已經介紹了web是基於http協議的乙個服務,go語言裡面提供了乙個完善的net http包,通過http包可以很方便的就搭建起來乙個可以執行的web服務。同時使用這個包能很簡單的對web的路由,靜態檔案,模板,cookie等資料進行設定和操作。http包建立web伺服器 fmt.fprintf...

web前端學習成長記 PHP基礎學習00

00.網頁開發技術 html 網頁內容結構 css 網頁外觀樣式 js 程式語言 可以用於呼叫瀏覽器提供的api wep apis 網頁互動 介面功能 jquery 便捷手段 搭建web伺服器 提供 伺服器的機器 http 瀏覽器與服務端的通訊協議 服務端開發 動態網頁技術 資料庫操作 服務端儲存資...

web前端全棧0基礎到精通(祺)10

多欄布局解決方案 document center left right 優化 品質 使用精靈圖 測試檢查 1 做完的頁面要與設計稿進行比對,保證對設計稿 95 以上的還原度。1 頁面模組的完整性,保證頁面不出現模組丟失 尤其是懸浮的側邊欄 彈窗 下拉列表等 2 字型 字型大小 文字顏色的一致性 3 ...