http的工作流程
http服務端監聽埠,等待來自客戶端的請求
http客戶端與http伺服器建立tcp連線
http客戶端發起http請求
http服務端響應請求
關閉http連線
web伺服器的作用
上面的例子中與瀏覽器進行互動的http伺服器就是web伺服器。而web伺服器的主要工作也就是響應客戶端(比如瀏覽器)的請求。概括地說,web伺服器是可以向發出請求的瀏覽器提供文件(可以是乙個html網頁、檔案等等)的程式。
雖然說web伺服器的主要工作就是響應客戶端的請求。但是實際中的 web 伺服器遠遠比上面示例的複雜的多,因為要考慮的因素實在是太多了,比如:
常用的web伺服器
apache、nginx、tomcat、jboss、iis等
瀏覽器請求的資源有兩種:靜態資源和動態資源。靜態資源是指內容不會發生改變的資源,如設計好了的css和html、jpg、img等。靜態資源一般直接存放在web伺服器內,響應時直接從伺服器中取出返回給客戶端,並由客戶端解析渲染。
在請求動態資源時,伺服器需要依靠設計好的程式(即web程式)中進行響應。比如搜尋關鍵字a
,web伺服器會將請求送到web程式中,web程式在資料庫中查詢到需要的資料並動態的生成一些html內容(以展示所查詢的資料),再將生成的資源送回web伺服器,經由伺服器傳送給客戶端
最早採用cgi(common gateway inte***ce)技術來實現,cgi使得伺服器可以呼叫外部程式,可以將使用者的html請求輸入給外部程式,並將結果返回到html頁面上。但這種方式速度較慢,只適用於小型靜態編譯的c程式。乙個尚可,如果有一組這樣的程式則會難以管理。因此在這個基礎上發展出了物件導向的mvc框架
可以了解一下web應用框架的演變
早期開發站點確做了許多重複性勞動,後來為了減少重複,避免寫出龐雜,混亂的**,人們將 web 開發的關鍵性過程提取出來,開發出了各種 web 框架。有了框架,就可以專注於編寫清晰、易維護的**,無需關心資料庫連線之類的重複性工作。
使用者輸入 url,客戶端傳送請求,控制器(controller)
首先會拿到請求,然後用模型(models)
從資料庫取出所有需要的資料,進行必要的處理,將處理後的結果傳送給檢視(view)
,檢視利用獲取到的資料,進行渲染生成 html response返回給客戶端。
常用的web框架
django、flask、nodejs(express)
//1.載入http
//2.建立乙個web伺服器
;//3.監聽80埠
server.
listen(80
);//4.響應客戶端請求
server.on(
'request'
,(request, response)
=>
)
僅利用nodejs寫出來的伺服器,是完全由我們自己定製的,因此如果這個伺服器程式中有任何潛在的bug都是可以被人利用的。為了解決這個問題,有的人會在nodejs前加一層apache或者nginx作為nodejs伺服器的介面,即反向** 參考 web伺服器 簡單web伺服器實現
三次握手 一般情況下是瀏覽器先傳送請求資料,c s ack 應答 三次握手成功後,才開始進行通訊資料的收發。四次揮手 一般情況下是客戶端先關閉,給瀏覽器傳送關閉資訊。如果瀏覽器傳送了關閉資訊,但是伺服器沒有回過去,較慢 那麼瀏覽器一直發是不是就會有問題?所以會等待 2msl的時間。一般為2 5分鐘。...
web容器與web伺服器的區別
web容器只能來進行靜態網頁之間的交往,但是當需要顯示jsp和servlet的時候要用到web伺服器,即 一般的情況下web容器和web伺服器在乙個軟體 tomcat 上就能體現出來。web伺服器 tomcat 和應用伺服器 jboss 之間的區別,web伺服器主要用在顯示層 jsp和servet ...
web伺服器 併發web伺服器實現 epoll
在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。epoll 是當今 linux 系統採用的方式,一般伺服器都是用 epoll 來實現的。epoll 是一種方案,這種方案不使用多程序多執行緒多協程,而是使用單程序單...