B/S結構,伺服器端的結構分析與部分實現

來源:互聯網
上載者:User

標籤:地址   直接   參數   資料   bubuko   max-age   好的   read   path   

1.1 簡述

瀏覽器在訪問一個IP地址的時候,一般會自動在地址前方加上HTTP://  表示其基於http協議訪問。

一般而言,http跟tcp在本質上沒有區別。

tcp串連的過程,在JAVA語言中,在java.net包中被整合,可以很方便的調用。

Socket s = new Socket("IP地址",連接埠號碼);

 

tcp串連的確立基於三向交握,其過程本質上是C端與S端相互驗證,建立信任的一種方式。http跟tcp在網路通訊中所屬的層級不同,但http協議大致是在tcp基礎上,需要額外一些相互驗證,建立信任的方式,以滿足http協議的需要。如同tcp協議連結過程的三向交握一般,http也有一套固定的驗證格式。

因此,使用Socket類,在此基礎之上將其固定的驗證格式實現,將C端請求的內容以一定格式解析,將響應內容以一定格式封裝,便可以實現響應http請求。

 

1.2 大致的結構

,一個HTTP請求與響應的流程大致如此

1、瀏覽器端向伺服器發送一個http請求,其資料由伺服器端一個基於Socket協議的接收器接收。

2、接收器將接收到的資料交由一內容解析器解析,以擷取該http請求的請求內容。

3、解析器將解析出來的內容交由業務處理器,業務處理器負責根據請求產生響應的內容,其可以是一個html頁面,可以是一張圖片,也可以是一段代碼塊,之後將內容交由封裝器。

4、封裝器將內容封裝成http響應的相應格式。

5、基於Socket協議的發送器將封裝好的內容發送給瀏覽器。

 

其中瀏覽器的部分自然不需要我們實現,而Socket的部分直接使用java.net中現成的東西,構建一個能響應http請求的伺服器,所需要實現的是:

1、HTTP請求內容解析器

2、HTTP響應內容封裝器

3、業務處理部分。

 

1.3 HTTP請求內容解析器

建立一個Socket

ServerSocket ss = new ServerSocket(8888);Socket s = ss.accept();BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String str = null;while ((str = br.readLine()) != null) {System.out.println(str);}br.close();s.close();ss.close();

  使用本地瀏覽器訪問一次,便可獲得http響應中包含的內容:

GET / HTTP/1.1Host: localhost:8888Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9

 

其中包含的內容有訪問的方式,HTTP協議的版本,可以返回的資料格式,瀏覽器的資訊等。

先考慮GET方式,一般而言,http的C端,其期望執行的業務,以參數的形式,通過HTTP協議內容進行傳遞。

在訪問地址後面加上請求的業務參數和其他社麼東西。

GET /login.html?username=gaga HTTP/1.1
Host: localhost:8888
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

 發現URL中的Path部分被完整的添加到了http請求中的第一行。

 也就是說,如果業務參數僅包含URL中的內容(不考慮不同的瀏覽器或者啥),HTTP請求內容解析器所需要解析的東西,僅包括http請求中的第一行。

 

1.4 HTTP響應內容封裝器

 http響應格式必須遵循http響應的格式,其包括響應體和回應標頭兩部分,中間以一個分行符號分隔。

其中回應標頭的第一行必須遵循HTTP版本+響應狀態+響應狀態原因的格式組成。其他就沒什麼要求了。

 

 

 

 

 

 最簡單的一響應格式比如

PrintStream ps = new PrintStream(s.getOutputStream());ps.println("HTTP/1.1 200 OK");ps.println();ps.write("你好".getBytes());

  其執行的結果:

 

B/S結構,伺服器端的結構分析與部分實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.