① web後台伺服器是如何工作的
近期准備session,希望能跟大家輕松地分享一些東西,一些常見的場景。比如:web後台伺服器到底是如何工作的。
上網過程對於普通人:首先,他需要一台電腦,然後,他的電腦可以接入網路,最後,他可以打開瀏覽器鍵入自己想要瀏覽的網址,然後就可以上網了。但是對於計算機來講,是一個比較復雜的過程,裡麵包含了信息如何保存,信息如何傳遞以及信息如何展示的過程。所以,針對整個上網過程,我們從前到後,分析一下其中包含的各種技術細節,可能不全,目的是拋磚引玉,希望大家在簡單的流程當中學習更多的東西分享出來,一些基礎知識則當做復習。之前buddy王老吉講過瀏覽器的工作方式,所以本文內容不包含瀏覽器的工作方式,重點在於各種後台服務以及通信層面的分析。
前面說到,用戶瀏覽器中鍵入網址便瀏覽網頁信息,這個網址實際上就是URL,英文全稱是Uniform Resource Locator——統一資源定位符。
完整的、帶有授權部分的普通統一資源標志符語法看上去如下:
協議://用戶名:密碼@子域名.域名.頂級域名:埠號/目錄/文件名.文件後綴?參數=值
協議部分可以是http,https,ftp等協議類型。
前面提到,互聯網上的每個文件都有一個唯一的URL,那麼,到底是如何確認的。前面提到了協議,協議是什麼?比如大家寫信時都需要寫郵編、地址和姓名,便可以通過這種方式將信郵寄到世界上唯一的那個人手裡,填寫的郵編,地址和姓名就是一種協議。協議的價值在於世界上所有的瀏覽器和後台伺服器都需要遵循http這些協議,才能正常進行信息的傳遞。
計算機通信跟人的通信是類似的,也是遵循各種協議的,不同的協議承載著不同的功能。通常,瀏覽器上網使用的是http或者https協議,從網路分層的角度來講,這些協議屬於應用層協議,建立在傳輸層之上。傳輸層跑是什麼協議呢?相信大家都非常熟悉,傳輸層跑的是TCP和UDP協議,再往下就是網路層,網路層上面跑的是IP數據報。每層的功能各不相同,每層的協議也不同,但是一般來講,越往下層,協議會越少,這樣才能化繁為簡,從而支持不同的上層協議。傳輸層協議一般是由操作系統層面支持的,同時還需要跟網路層進行交互(對於物理機來說就是網卡),所以針對我們操作系統之上的程序員來講,新創造的協議都是應用層協議,因為我們的通信都是在傳輸層(TCP和UDP)基礎之上構建的。
http是應用層協議,也就是說,在界面敲下網址那一刻,實際上瀏覽器向伺服器發送了http協議格式的消息,也叫做http請求。http協議是構建在tcp協議之上的,而tcp是可靠的協議,所以http協議無需考慮可靠性,只管傳輸就可以了。
http協議比較簡單,如下所示:
那麼瀏覽器又是如何組織http請求,並且將信息發送的相應伺服器的呢?例如: http://www..com
我們鍵入的僅僅是伺服器域名,但是實際上在網路中我們通信是通過套接字來進行通信的。套接字=IP + 埠,在網路中,IP的作用是用來在網路層進行路由定址,尋找唯一的主機;埠的作用是用來在這個主機中尋找唯一的進程。總體來說,套接字可以用來在網路中確定唯一主機的唯一進程,所以通過套接字我們可以進行通信。
但是問題是上網通過域名來訪問,那麼是如何通過域名來確認唯一主機的唯一後台web伺服器進程的呢?做一個假設,如果我們可以在互聯中提供一個確定的服務,這個服務裡面裝有域名到套接字的映射,上網的人通過這個服務獲取對應域名的套接字,那麼這個問題不就解決了。而實際上,DNS服務原理簡單來說就是剛才假設的方法,服務商通過提供公共的DNS服務,大家上網時便可以查詢到相應域名對應的套接字,通過這個套接字便可以訪問確定的伺服器了。真正的DNS服務其實更為復雜,分為迭代式查詢和遞歸式查詢,兩種方式各有優劣,同時,為了性能,DNS服務通常也配有不同級別的緩存,關於DNS的具體實現有興趣的可以自行查詢資料學習。
總結一下,上網時瀏覽器實際上做了兩件事,第一,通過瀏覽器內置的DNS客戶端,向DNS伺服器發送請求,獲取域名對應套接字;第二,使用套接字發送http請求,獲取數據,然後在瀏覽器端呈現。
另外,DNS服務也需要遵循某種協議才能通信,其協議為DNS協議,其服務固定為53埠,屬於應用層協議。DNS英文為DomainNameSystem。其實DNS服務跟電話簿的工作方式一樣,因為你沒法記得每個人的電話號碼,但是很容易記住每個人的名字。
上網前,我們的計算機裡面什麼都沒有,為何鍵入網址後能在界面顯示出各種各樣的數據?實際上,數據都來自於後台伺服器,所有的數據當然也都存儲在後台伺服器,瀏覽器僅僅請求數據。前面講了,請求數據時,使用套接字加上http請求來獲取數據,後台則必定要提供相應的套接字,接收信息,解析http請求,才能正常的返回客戶端需要的數據。所以,後台伺服器做的工作,第一,綁定套接字,通過該套接字向外提供http服務;第二,解析http請求,根據請求返回響應。
理論上講,我們可以實現自己的http服務,並且解析不同的http請求,返回響應。但是,作為開發者來講,重復造輪子是不推薦的,市面上有多種現成框架供我們選擇。對於java開發者來講,就有tomcat或者jetty,其他語言理論上也有類似的框架。tomcat和jetty幫我們做了什麼呢?實際上最主要的功能還就是接受http請求,針對不同的請求返回響應,當然,他們也提供了更多的高級特性,比如遵循servlet規范,使人們更高效的開發web應用。
總結一下,上網的實際流程在程序員的角度來看,首先需要通過DNS服務解析域名,獲取該域名所在web伺服器應用程序的套接字,然後瀏覽器組裝符合http協議的請求,通過套接字發送給web伺服器,web伺服器解析請求,根據解析結果將需要返回的內容組裝符合http協議的響應,瀏覽器接到響應後,根據http協議解析響應,獲取數據,將數據展示在瀏覽器上。
包含的知識點:DNS協議,HTTP協議,計算機網路知識,後台伺服器實現(tomcat/jetty等)。
② web伺服器的工作原理及安裝配置步驟
一、web伺服器的工作原理
1、客戶端發送請求
客戶端(通過瀏覽器)和Web伺服器建立TCP連接,連接建立以後,向Web伺服器發出訪問請求(如get)。
2、伺服器解析請求
Web伺服器對請求按照HTTP協議進行解碼來確定進一步的動作,設計的內容有三個要點:方法(GET)、文檔(/sample.html)、和瀏覽器使用的協議(HTTP/1.1)其中方法告訴伺服器應完動的動作,GET方法的含義很明顯是:伺服器應定位、讀取文件並將它返回給客戶。
3、讀取其它信息(非必須步驟)
Web伺服器根據需要去讀取請求的其它部分。在HTTP/1.1下,客戶還應給伺服器提供關於它的一些信息。元信息可用來描述瀏覽器及其能力,以使伺服器能據此確定如何返回應答。
4、完成請求的動作
若現在沒有錯誤出現,WWW伺服器將執行請求所要求的動作。要獲取(GET)一個文檔,web伺服器在其文檔樹中搜索請求的文件(/sample.html)。這是由伺服器機器上作為操作系統一部分的文件系統完成的。若文件能找到並可正常讀取,則伺服器將把它返回給客戶。
5、關閉文件和網路連接,結束會話。
當文件已被發郵或錯誤已發出後,web伺服器結束整個會話。它關閉打開的的被請求文件,關閉網路埠從而結束網路連接。有關的其它工作則是由客戶端來完成的,包括接收數據,並以用戶可讀的方式呈現出來。這些與伺服器無關。
二、web伺服器的安裝配置過程
以典型的web伺服器Tomcat為例,進行安裝配置。步驟如下:
1、在tomcat官網上下載tomcat安裝版本。
③ 什麼是https它和http的主要區別在哪裡
一、什麼是HTTPS
HTTPS是在HTTP上建立SSL加密層,並對傳輸數據進行加密,是HTTP協議的安全版。HTTPS主要作用是:
(1)對數據進行加密,並建立一個信息安全通道,來保證傳輸過程中的數據安全;
(2)對網站伺服器進行真實身份認證。
二、什麼是HTTP
HTTP是互聯網上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標准(TCP),用於從WWW伺服器傳輸超文本到本地瀏覽器的傳輸協議。HTTP是採用明文形式進行數據傳輸,極易被不法分子竊取和篡改。
1、HTTPS是加密傳輸協議,HTTP是明文傳輸協議;
2、HTTPS需要用到SSL證書,而HTTP不用;
3、HTTPS比HTTP更加安全,對搜索引擎更友好,利於SEO;
4、 HTTPS標准埠443,HTTP標准埠80;
5、 HTTPS基於傳輸層,HTTP基於應用層;
6、 HTTPS在瀏覽器顯示綠色安全鎖,HTTP沒有顯示;
總的來說HTTPS比HTTP更加安全,能夠有效的保護網站用戶的隱私信息安全,這也是為什麼現在的HTTPS網站越來越多。
④ 如何用Java實現Web伺服器
WEB容器工作原理
市面上的javaweb容器常見的有兩種,一種是jetty,一種是tomcat。要想用java實現web容器,首先要知道其工作雹孫原理。
以Tomcat為例,我們通常開發出來的war包,會放在tomcat中的webapp下面,tomcat會自動解壓war包。解壓完成後,其實就是一個servlet應用!換句話說,我們寫的war包中的servlet應用只需要關注業務層面的,處理http等網路鏈接的事情交給都交給tomcat了,一個請求到達tomcat的流程:
所以其實我們也可以手寫一個web容器,只要能接收請求並轉發給相應的servlet請求即可。
手寫一個小的web容器
整體結構大致如下
1、寫一個處理網路請求連接請求實體類、一個和網路請求連接響應實體類
2、寫一個容器主類,包括啟動棗山監聽埠等
3、寫容器的凳肆中介面,以及註解相關的url附加類便於讓應用servlet
4、寫一個app測試servlet,類似tomcat中跑的war包
如果你監聽的埠是8888,那麼就可以訪問localhost:8888/app,就可以測試了
結語
java寫web容器,其實沒什麼難的,簡單的寫一下了解一下原理即可,真實工作中是不建議自己寫的,有很多問題會考慮不周的。關於web容器網上也有很多例子,可以借鑒了解一下。祝你學習愉快。