成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

HTTP就是這么簡單

yzd / 1469人閱讀

摘要:是不保存狀態(tài)的協(xié)議是無狀態(tài)的,也就是說,它是不對通信狀態(tài)進行保存的。提升傳輸效率在說明之前,首先我們要知道什么是實體主體實體主體就是作為數(shù)據(jù)在中傳輸?shù)臄?shù)據(jù)。一般地,實體主體可以等價為報文主體,報文主體是中的一部分。

為什么要學(xué)HTTP?

我們絕大多數(shù)的Web應(yīng)用都是基于HTTP來進行開發(fā)的。我們對Web的操作都是通過HTTP協(xié)議來進行傳輸數(shù)據(jù)的。

簡單來說,HTTP協(xié)議就是客戶端和服務(wù)器交互的一種通迅的格式。

HTTP的誕生主要是為了能夠讓文檔之間相互關(guān)聯(lián),形成超文本可以互相傳閱

可以說,Http就是Web通信的基礎(chǔ),這是我們必學(xué)的。

HTTP基礎(chǔ)概念

我們學(xué)計算機網(wǎng)絡(luò)的時候就知道,我們把計算機網(wǎng)絡(luò)分層了5層,一般我們現(xiàn)在用的都是TCP/IP這么一個分層結(jié)構(gòu)。

雖然官方的是ISO 提出的7層結(jié)構(gòu),但是僅僅是理論基礎(chǔ),在實際上大多人都是使用TCP/IP的分層結(jié)構(gòu)

首先,我們先得知道,為什么我們要在計算機網(wǎng)絡(luò)中分層次???

因為如果兩臺計算機能夠相互通信的話,實際實現(xiàn)起來是非常困難操作的...我們分層的目的就是為了將困難的問題簡單化,并且如果我們分層了,我們在使用的時候就可以僅僅關(guān)注我們需要關(guān)注的層次,而不用理會其他層。

如果需要改動設(shè)計的時候,我們只需要把變動的層替換即可,并不用涉及到其他的層次。這與我們程序設(shè)計中的低耦合是一個概念。

而我們的HTTP協(xié)議是在最上層,也就是應(yīng)用層。這是最貼近我們的程序員的層次。

網(wǎng)站通信粗略過程

我們知道HTTP是在應(yīng)用層中的,顯然,我們在Web通信的過程中,不僅僅是需要HTTP協(xié)議的,還會涉及到其他的協(xié)議的。

DNS:負責解析域名

我們訪問一個網(wǎng)頁的時候,往往是通過域名來訪問的www.zhongfucheng.site,而計算機通信只認的是我們的主機地址(192.168.xxx.xxx),因此,當我們輸入域名的時候,需要DNS把域名解析成主機來進行訪問。

HTTP:產(chǎn)生請求報文數(shù)據(jù)

當我們對Web頁面進行操作的時候,就會產(chǎn)生HTTP報文數(shù)據(jù),請求對應(yīng)的服務(wù)端進行響應(yīng)。

TCP協(xié)議:分割HTTP數(shù)據(jù),保證數(shù)據(jù)運輸

TCP協(xié)議采用了三次握手的方式來保證數(shù)據(jù)的準確運輸,在運輸?shù)臄?shù)據(jù)的時候,發(fā)送標識過去給服務(wù)器,服務(wù)器也返回標識給客戶端,而客戶端收到消息后再次返回標識給服務(wù)器。這樣一來就保證了數(shù)據(jù)運輸是可靠的。

IP協(xié)議:傳輸數(shù)據(jù)包,找到通信目的地地址。

IP協(xié)議把我們的產(chǎn)生的數(shù)據(jù)包發(fā)送給對方,IP地址指明了節(jié)點被分配的地址,但IP地址可能會變換,我們可以使用ARP協(xié)議來將IP地址反射為MAC地址。MAC地址是不會更改的,是網(wǎng)卡所屬的固定地址。

在找到通信目的地之前,我們是需要不斷的中轉(zhuǎn)的,這過程我們稱作為:“路由中轉(zhuǎn)”,我們并不知道路由中轉(zhuǎn)了多少次的。因此是不能全面了解到互聯(lián)網(wǎng)中的傳輸狀況的。

接下來就離我們比較遠了,屬于硬件相關(guān)的了,也就是鏈路層和物理層。以后復(fù)習到計算機網(wǎng)絡(luò)的時候再來補充吧!

我們網(wǎng)頁上請求數(shù)據(jù)就是上邊這么一個流程。

告知服務(wù)器請求的意圖

我們?nèi)绻_發(fā)過Web程序的話,我們知道常用的提交方式有POST和GET方法

我們也知道GET是用來獲取數(shù)據(jù)的,POST是用來提交數(shù)據(jù)的。

其實HTTP協(xié)議中還支持著其他的方法,比如:Input、Delete、OPTIONS很多這樣的方法。而由于常用,于是我們也可能僅僅知道GET和POST方法了。

HTTP提供方法的目的就是為了告知服務(wù)器該客戶端想進行什么操作。當HTTP是OPTIONS方法的時候,服務(wù)器端就會返回它支持什么HTTP方法。

當然了,現(xiàn)在RESTful盛行,也就是充分利用了HTTP協(xié)議的這些方法。

HTTP是不保存狀態(tài)的協(xié)議

HTTP是無狀態(tài)的,也就是說,它是不對通信狀態(tài)進行保存的。它并不知道之前通信的對方是誰。這樣設(shè)計的目的就是為了讓HTTP簡單化,能夠快速處理大量的事務(wù)!

但是,我們經(jīng)常是需要知道訪問的人是誰,于是就有了Cookie技術(shù)了。

要是服務(wù)器端想要記住客戶端是誰,那么就頒發(fā)一個cookie給客戶端

客戶端把Cookie保存在硬盤中,當下次訪問服務(wù)器的時候,瀏覽器會自動把客戶端的cookie帶過去。

就這樣,服務(wù)器就能夠知道這家伙是誰了。

持久連接

在HTTP1.0的時候,每一次進行HTTP通信就會斷開一次連接。如果容量很少的文本傳輸是沒有問題的。但是如果我們訪問一個網(wǎng)頁,該網(wǎng)頁有非常多的圖片。一個圖片就算上一個HTTP請求了。那么在中途中就不斷地建立TCP連接、獲取圖片、斷開TCP連接。

這樣是非常浪費資源的,因此在HTTP1.1版本,就是持久連接了。一次HTTP連接能夠處理多個請求。

持久連接為“管線化”方式發(fā)送成為了可能:在一次HTTP連接里面,不需要等待服務(wù)器響應(yīng)請求,就能夠繼續(xù)發(fā)送第二次請求

提升傳輸效率

在說明之前,首先我們要知道什么是實體主體

實體主體就是作為數(shù)據(jù)在HTTP中傳輸?shù)臄?shù)據(jù)。

一般地,實體主體可以等價為報文主體,報文主體是HTTP中的一部分

我們?nèi)绻皇褂萌魏问侄?,服?wù)器返回的數(shù)據(jù)實體主體是原樣返回的。我們可以使用兩種方式來提高傳輸效率

使用壓縮技術(shù)把實體主體壓小,在客戶端再把數(shù)據(jù)解析

使用分塊傳輸編碼,將實體主體分塊傳輸,當瀏覽器解析到實體主體就能夠顯示了。

我們?nèi)绻谙螺d東西的過程中斷了,按照以前我們是需要重新下載的,但是現(xiàn)在可以在中斷中繼續(xù)下載。我們可以使用到獲取范圍數(shù)據(jù),這種叫做范圍請求!

這種請求只會下載資源的一部分。

比如我的圖片下載到一半了,我們只需要下載另一半就可以組成一張完整的圖片了。那么請求的時候請求沒有下載的一部分即可。

常用的狀態(tài)碼簡述 2XX

一般是請求成功

200 正常處理

204 成功處理,但服務(wù)器沒有新數(shù)據(jù)返回,顯示頁面不更新

206 對服務(wù)器進行范圍請求,只返回一部分數(shù)據(jù)

3XX

一般表示重定向

301 請求的資源已分配了新的URI中,URL地址改變了?!居谰弥囟ㄏ颉?/p>

302 請求的資源臨時分配了新的URI中,URL地址沒變【臨時重定向】

303 與302相同的功能,但明確客戶端應(yīng)該采用GET方式來獲取資源

304 發(fā)送了附帶請求,但不符合條件【返回未過期的緩存數(shù)據(jù)】

307 與302相同,但不會把POST請求變成GET

4XX

表示客戶端出錯了。

400 請求報文語法錯誤了

401 需要認證身份

403 沒有權(quán)限訪問

404 服務(wù)器沒有這個資源

5XX

服務(wù)器出錯了

500 內(nèi)部資源出錯了

503 服務(wù)器正忙

服務(wù)器與客戶端之間的應(yīng)用程序

首先要說的是,一個HTTP服務(wù)器可以擁有多個站點,也就是說:HTTP下可以配置多個虛擬主機。當用戶訪問不同主機的時候,實際上都是訪問同一臺HTTP服務(wù)器。

在客戶端和服務(wù)器中還有一些用于通信數(shù)據(jù)轉(zhuǎn)發(fā)的應(yīng)用程序

代理

可以用來緩存數(shù)據(jù),當代理緩存了數(shù)據(jù)以后,客戶端就可以直接用代理獲取數(shù)據(jù)

可以用來對網(wǎng)站進行訪問控制,獲取訪問日志記錄

網(wǎng)關(guān)

能夠提供非HTTP請求的操作,訪問數(shù)據(jù)庫什么的

隧道

建立一條安全的通信路徑,可以使用SSL等加密手段進行通信。

HTTP首部簡述 HTTP請求報文

HTTP請求報文:在請求中,HTTP報文由方法、URI、HTTP版本、HTTP首部字段等部分組成。

請求行【描述客戶端的請求方式、請求的資源名稱,以及使用的HTTP協(xié)議版本號

首部字段【描述客戶端請求哪臺主機,以及客戶端的一些環(huán)境信息等】

一個空行

首部字段例子:

Accept: text/html,image/* 【瀏覽器告訴服務(wù)器,它支持的數(shù)據(jù)類型】

Accept-Charset: ISO-8859-1 【瀏覽器告訴服務(wù)器,它支持哪種字符集

Accept-Encoding: gzip,compress 【瀏覽器告訴服務(wù)器,它支持的壓縮格式

Accept-Language: en-us,zh-cn 【瀏覽器告訴服務(wù)器,它的語言環(huán)境】

Host: www.it315.org:80【瀏覽器告訴服務(wù)器,它的想訪問哪臺主機】

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【瀏覽器告訴服務(wù)器,緩存數(shù)據(jù)的時間】

Referer: http://www.it315.org/index.jsp【瀏覽器告訴服務(wù)器,客戶機是從那個頁面來的---反盜鏈

8.User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【瀏覽器告訴服務(wù)器,瀏覽器的內(nèi)核是什么】

Cookie【瀏覽器告訴服務(wù)器,帶來的Cookie是什么

Connection: close/Keep-Alive 【瀏覽器告訴服務(wù)器,請求完后是斷開鏈接還是保持鏈接】

Date: Tue, 11 Jul 2000 18:23:51 GMT【瀏覽器告訴服務(wù)器,請求的時間】

HTTP響應(yīng)報文

HTTP響應(yīng)報文:在響應(yīng)中,HTTP報文由HTTP版本、狀態(tài)碼(數(shù)字和原因短語)、HTTP首部字段3部分組成。

一個狀態(tài)行【用于描述服務(wù)器對請求的處理結(jié)果。

首部字段【用于描述服務(wù)器的基本信息,以及數(shù)據(jù)的描述,服務(wù)器通過這些數(shù)據(jù)的描述信息,可以通知客戶端如何處理等一會兒它回送的數(shù)據(jù)

一個空行

實體內(nèi)容【服務(wù)器向客戶端回送的數(shù)據(jù)

狀態(tài)行:

格式: HTTP版本號 狀態(tài)碼 原因敘述

狀態(tài)行:HTTP/1.1 200 OK

狀態(tài)碼用于表示服務(wù)器對請求的處理結(jié)果,它是一個三位的十進制數(shù)。響應(yīng)狀態(tài)碼分為5類

首部字段例子:

Location: http://www.it315.org/index.jsp 【服務(wù)器告訴瀏覽器要跳轉(zhuǎn)到哪個頁面

Server:apache tomcat【服務(wù)器告訴瀏覽器,服務(wù)器的型號是什么】

Content-Encoding: gzip 【服務(wù)器告訴瀏覽器數(shù)據(jù)壓縮的格式

Content-Length: 80 【服務(wù)器告訴瀏覽器回送數(shù)據(jù)的長度】

Content-Language: zh-cn 【服務(wù)器告訴瀏覽器,服務(wù)器的語言環(huán)境】

Content-Type: text/html; charset=GB2312 【服務(wù)器告訴瀏覽器,回送數(shù)據(jù)的類型

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服務(wù)器告訴瀏覽器該資源上次更新時間】

Refresh: 1;url=http://www.it315.org【服務(wù)器告訴瀏覽器要定時刷新

Content-Disposition: attachment; filename=aaa.zip【服務(wù)器告訴瀏覽器以下載方式打開數(shù)據(jù)

Transfer-Encoding: chunked 【服務(wù)器告訴瀏覽器數(shù)據(jù)以分塊方式回送】

Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服務(wù)器告訴瀏覽器要保存Cookie

Expires: -1【服務(wù)器告訴瀏覽器不要設(shè)置緩存

Cache-Control: no-cache 【服務(wù)器告訴瀏覽器不要設(shè)置緩存

Pragma: no-cache 【服務(wù)器告訴瀏覽器不要設(shè)置緩存

Connection: close/Keep-Alive 【服務(wù)器告訴瀏覽器連接方式】

Date: Tue, 11 Jul 2000 18:23:51 GMT【服務(wù)器告訴瀏覽器回送數(shù)據(jù)的時間】

對于HTTP首部這一部分是非常龐大的一個章節(jié),知識點也很多,我就沒有一一去記錄了。用到的時候再查吧。我看的是《圖解HTTP》。

HTTPS簡述

HTTP在安全上是不足的

通信使用明文【沒有加密過內(nèi)容的】

不驗證通信方身份,無論是客戶端和服務(wù)器,都是隨意通信的

無法證明報文的完整性【別人監(jiān)聽后,可以篡改】

我們一般在上網(wǎng)時,使用抓包工具就很容易獲取到HTTP請求的信息了,這是TCP/IP在網(wǎng)絡(luò)通信中無法避免的。

假設(shè)我們對HTTP報文進行加密了, 那也僅僅是是內(nèi)容的加密。別人獲取到了HTTP內(nèi)容了,即使無法破解HTTP內(nèi)容,還是能夠篡改的。

我們最好就是使用SSL建立安全的通信線路,就可以在這條線路上進行HTTP通信了。

其實HTTPS就是披著SSL的HTTP...

HTTPS使用的是共享密鑰和公開私有密鑰混合來進行加密的。由于公開私有密鑰需要太多的資源,不可能一直以公開私有密鑰進行通信。因此,HTTP在建立通信線路的時候使用公開私有密鑰,當建立完連接后,隨后就使用共享密鑰進行加密和解密了

對于認證方面,HTTPS是基于第三方的認證機構(gòu)來獲取認受認可的證書、因此,可以從中認證該服務(wù)器是否是合法的。

而客戶端方面則需要自己購買認證證書、這實施起來難度是很大的【認證證書需要錢】。

所以,一般的網(wǎng)站都是使用表單認證就算了,這是用得最廣泛的客戶端認證了。

如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術(shù)文章的同學(xué),可以關(guān)注微信公眾號:Java3y

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68459.html

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號:Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡單 注解就這么簡單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評論0 收藏0
  • SpringBoot就是這么簡單

    摘要:熱加載代表的是我們不需要重啟服務(wù)器,就能夠類檢測得到,重新生成類的字節(jié)碼文件無論是熱部署或者是熱加載都是基于類加載器來完成的。驗證階段字節(jié)碼文件不會對造成危害準備階段是會賦初始值,并不是程序中的值。 一、SpringBoot入門 今天在慕課網(wǎng)中看見了Spring Boot這么一個教程,這個Spring Boot作為JavaWeb的學(xué)習者肯定至少會聽過,但我是不知道他是什么玩意。 只是大...

    whinc 評論0 收藏0
  • SpringMVC入門就這么簡單

    摘要:也就是說映射器就是用于處理什么樣的請求提交給處理。這和是一樣的提交參數(shù)的用戶名編號提交配置處理請求注冊映射器包框架接收參數(shù)設(shè)置無參構(gòu)造器,里邊調(diào)用方法,傳入要封裝的對象這里的對象就表示已經(jīng)封裝好的了對象了。 什么是SpringMVC? SpringMVC是Spring家族的一員,Spring是將現(xiàn)在開發(fā)中流行的組件進行組合而成的一個框架!它用在基于MVC的表現(xiàn)層開發(fā),類似于struts...

    SKYZACK 評論0 收藏0
  • Maven就是這么簡單

    摘要:軟件項目的管理就會變得簡單很多。比如說的驅(qū)動程序,,在是獲取不到的,就需要手工上傳到里是倉庫組,在里沒有這個概念,是特有的。 什么是Maven Maven是一個采用純Java編寫的開源項目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來管理項目,所有的項目配置信息都被定義在一個叫做POM.xml的文件中.. Maven是一款跨平臺的項目...

    leonardofed 評論0 收藏0
  • SpringDataJPA入門就這么簡單

    摘要:一入門在上次學(xué)的時候,那時候的教程就已經(jīng)涉及到了一點的知識了。入門只是中的一個子模塊是一套標準接口,而是的實現(xiàn)底層默認實現(xiàn)是使用的首個接口就是,它是一個標記接口。這也導(dǎo)致了我出現(xiàn)這個錯誤的原因。 一、SpringData入門 在上次學(xué)SpringBoot的時候,那時候的教程就已經(jīng)涉及到了一點SpringData JPA的知識了。當時還是第一次見,覺得也沒什么大不了,就是封裝了Hiber...

    MasonEast 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<