自我提升(基礎(chǔ)技術(shù)篇)——http協(xié)議掃盲

前言:最近發(fā)現(xiàn)自己在網(wǎng)絡(luò)相關(guān)這一塊基礎(chǔ)很是欠缺,所以準(zhǔn)備花時(shí)間了解一下浑度,本文主要是講http協(xié)議的一些基礎(chǔ)林螃,和一些網(wǎng)絡(luò)知識(shí)掃盲吧。

補(bǔ)充概念:(這些都是可以百度得到的俺泣,不過(guò)考慮的有些同學(xué)懶的百度,就寫在這里了)

TLS

安全傳輸層協(xié)議(TLS)用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性完残。

該協(xié)議由兩層組成: TLS 記錄協(xié)議(TLS Record)和 TLS握手協(xié)議(TLS Handshake)伏钠。

ssl :

SSL(Secure Sockets Layer安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議谨设。

TLS與SSL在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密熟掂。

其他協(xié)議:文件傳輸協(xié)議FTP、電子郵件傳輸協(xié)議SMTP扎拣、域名系統(tǒng)服務(wù)DNS赴肚、網(wǎng)絡(luò)新聞傳輸協(xié)議NNTP等,注意:dns是UDP協(xié)議(不安全)二蓝,通秤現(xiàn)在采用httpdns了。(感興趣刊愚,自己百度)

好了踊跟,一些基本概念,就不贅述了鸥诽,大家自行百度商玫。

下面開(kāi)始http的掃盲

我們了解HTTP,主要從幾個(gè)角度了解:HTTP是什么牡借,用來(lái)干什么的拳昌?特點(diǎn)是什么?他是怎么工作的(工作流程)钠龙?HTTP請(qǐng)求和響應(yīng)是怎么樣的炬藤?HTTP的狀態(tài)內(nèi)容(關(guān)于cookie和session)御铃?什么是URL?什么是緩存刻像?當(dāng)然還有就是畅买,HTTP的應(yīng)用(學(xué)來(lái)不用,等于不學(xué))细睡。HTTP安全相關(guān)(包含HTTPS協(xié)議的原理相關(guān))谷羞。最后講一點(diǎn)關(guān)于返回碼的常識(shí)。

相信溜徙,把上述提到的都初略的提一下之后湃缎,可以對(duì)http協(xié)議,有一個(gè)大致的了解蠢壹。不過(guò)嗓违,本文的目的,就是在這里图贸,如果想要深入蹂季,那可能需要花比較長(zhǎng)一段時(shí)間了解了。話不多說(shuō)疏日,我們一個(gè)問(wèn)題一個(gè)問(wèn)題的了解:

1.HTTP協(xié)議是什么(概念性的東西偿洁,了解就可以了)

協(xié)議:

指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或規(guī)則,超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議沟优,它允許將超文本標(biāo)記語(yǔ)言(HTML)文檔從Web服務(wù)器傳送到客戶端的瀏覽器涕滋。

http協(xié)議:

超文本傳輸協(xié)議(Hypertext transfer protocol)。是一種詳細(xì)規(guī)定了瀏覽器和萬(wàn)維網(wǎng)(WWW = World Wide Web)服務(wù)器之間互相通信的規(guī)則挠阁,通過(guò)因特網(wǎng)傳送萬(wàn)維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議宾肺。

是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。它可以使瀏覽器更加高效侵俗,使網(wǎng)絡(luò)傳輸減少锨用。它不僅保證計(jì)算機(jī)正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分隘谣,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等黔酥。

是一個(gè)應(yīng)用層協(xié)議,由請(qǐng)求和響應(yīng)構(gòu)成洪橘,是一個(gè)標(biāo)準(zhǔn)的客戶端服務(wù)器模型跪者。HTTP是一個(gè)無(wú)狀態(tài)的協(xié)議。

在Internet中所有的傳輸都是通過(guò)TCP/IP進(jìn)行的熄求。HTTP協(xié)議作為TCP/IP模型中應(yīng)用層的協(xié)議也不例外渣玲。HTTP協(xié)議通常承載于TCP協(xié)議之上,有時(shí)也承載于TLS或SSL協(xié)議層之上弟晚,這個(gè)時(shí)候忘衍,就成了我們常說(shuō)的HTTPS(TCP/IP協(xié)議逾苫,這里不講,姑且把它當(dāng)作是快遞員好了枚钓,它就是幫你把運(yùn)輸東西的铅搓,后面再講)

HTTP默認(rèn)的端口號(hào)為80,HTTPS的端口號(hào)為443搀捷。

瀏覽網(wǎng)頁(yè)是HTTP的主要應(yīng)用星掰,但是這并不代表HTTP就只能應(yīng)用于網(wǎng)頁(yè)的瀏覽。HTTP是一種協(xié)議嫩舟,只要通信的雙方都遵守這個(gè)協(xié)議氢烘,HTTP就能有用武之地。比如QQ家厌,迅雷這些軟件還有我們現(xiàn)在的各種app播玖,都會(huì)使用HTTP協(xié)議(還包括其他的協(xié)議)。

2.HTTP協(xié)議的特點(diǎn)

方向單一性:(我自己定義的名字饭于,可能不準(zhǔn)確)

HTTP協(xié)議永遠(yuǎn)都是客戶端發(fā)起請(qǐng)求蜀踏,服務(wù)器回送響應(yīng)。這樣就限制了使用HTTP協(xié)議掰吕,無(wú)法實(shí)現(xiàn)在客戶端沒(méi)有發(fā)起請(qǐng)求的時(shí)候脓斩,服務(wù)器將消息推送給客戶端。(如果要實(shí)現(xiàn)服務(wù)器主動(dòng)推送給客戶端畴栖,可以采用TCP或者其他某些協(xié)議。技術(shù)名稱叫“推送”八千,自行百度)

無(wú)狀態(tài)協(xié)議:

協(xié)議的狀態(tài)是指下一次傳輸可以“記住”這次傳輸信息的能力吗讶。

http是不會(huì)為了下一次連接而維護(hù)這次連接所傳輸?shù)男畔?為了保證服務(wù)器內(nèi)存。

比如客戶獲得一張網(wǎng)頁(yè)之后關(guān)閉瀏覽器恋捆,然后再一次啟動(dòng)瀏覽器照皆,再登陸該網(wǎng)站,但是服務(wù)器并不知道客戶關(guān)閉了一次瀏覽器沸停。

由于Web服務(wù)器要面對(duì)很多瀏覽器的并發(fā)訪問(wèn)膜毁,為了提高Web服務(wù)器對(duì)并發(fā)訪問(wèn)的處理能力,在設(shè)計(jì)HTTP協(xié)議時(shí)規(guī)定Web服務(wù)器發(fā)送HTTP應(yīng)答報(bào)文和文檔時(shí)愤钾,不保存發(fā)出請(qǐng)求的Web瀏覽器進(jìn)程的任何狀態(tài)信息瘟滨。這有可能出現(xiàn)一個(gè)瀏覽器在短短幾秒之內(nèi)兩次訪問(wèn)同一對(duì)象時(shí),服務(wù)器進(jìn)程不會(huì)因?yàn)橐呀?jīng)給它發(fā)過(guò)應(yīng)答報(bào)文而不接受第二期服務(wù)請(qǐng)求能颁。由于Web服務(wù)器不保存發(fā)送請(qǐng)求的Web瀏覽器進(jìn)程的任何信息杂瘸,因此HTTP協(xié)議屬于無(wú)狀態(tài)協(xié)議(Stateless Protocol)。

被锞眨活(Connection: keep-alive):

無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力败玉,服務(wù)器不知道客戶端是什么狀態(tài)敌土。從另一方面講,打開(kāi)一個(gè)服務(wù)器上的網(wǎng)頁(yè)和你之前打開(kāi)這個(gè)服務(wù)器上的網(wǎng)頁(yè)之間沒(méi)有任何聯(lián)系运翼。

HTTP是一個(gè)無(wú)狀態(tài)的面向連接的協(xié)議返干,無(wú)狀態(tài)不代表HTTP不能保持TCP連接,更不能代表HTTP使用的是UDP協(xié)議(無(wú)連接)血淌。

從HTTP/1.1起矩欠,默認(rèn)都開(kāi)啟了Keep-Alive,保持連接特性六剥,簡(jiǎn)單地說(shuō)晚顷,當(dāng)一個(gè)網(wǎng)頁(yè)打開(kāi)完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉疗疟,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè)该默,會(huì)繼續(xù)使用這一條已經(jīng)建立的連接。

Keep-Alive不會(huì)永久保持連接策彤,它有一個(gè)保持時(shí)間栓袖,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個(gè)時(shí)間。

其他優(yōu)點(diǎn):

1店诗、支持客戶/服務(wù)器模式裹刮。支持基本認(rèn)證和安全認(rèn)證。

2庞瘸、簡(jiǎn)單快速:客戶向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑违霞。請(qǐng)求方法常用的有GET瞬场、HEAD买鸽、POST。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同眼五。由于HTTP協(xié)議簡(jiǎn)單彤灶,使得HTTP服務(wù)器的程序規(guī)模小看幼,因而通信速度很快。(目前常用的是get和post幌陕,特別是在客服端)

3苞轿、靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對(duì)象逗物。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記瑟俭。

4、HTTP 0.9和1.0使用非持續(xù)連接:限制每次連接只處理一個(gè)請(qǐng)求失暴,服務(wù)器處理完客戶的請(qǐng)求逗扒,并收到客戶的應(yīng)答后欠橘,即斷開(kāi)連接。HTTP 1.1使用持續(xù)連接:不必為每個(gè)web對(duì)象創(chuàng)建一個(gè)新的連接黍檩,一個(gè)連接可以傳送多個(gè)對(duì)象刽酱,采用這種方式可以節(jié)省傳輸時(shí)間瞧捌。

了解了,它是什么姐呐,對(duì)他的認(rèn)識(shí),大概就相當(dāng)于,看了一眼一個(gè)人長(zhǎng)什么樣麦轰,但是款侵,要真的了解一個(gè)人新锈,還需要妹笆,看他的言行。

3.HTTP是怎么工作的墩新?

一次HTTP操作稱為一個(gè)事務(wù)海渊,其工作過(guò)程可分為四步:(一個(gè)事務(wù)可以簡(jiǎn)單看為臣疑,一次請(qǐng)求加一次響應(yīng)吧)

1.首先客戶機(jī)與服務(wù)器需要建立連接徙菠。只要單擊某個(gè)超級(jí)鏈接,HTTP的工作開(kāi)始芙盘。

2.建立連接后儒老,客戶機(jī)發(fā)送一個(gè)請(qǐng)求給服務(wù)器记餐,請(qǐng)求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL)练湿、協(xié)議版本號(hào)疾渣,后邊是MIME信息包括請(qǐng)求修飾符砰碴、客戶機(jī)信息和可能的內(nèi)容啃憎。

3.服務(wù)器接到請(qǐng)求后先壕,給予相應(yīng)的響應(yīng)信息改淑,其格式為一個(gè)狀態(tài)行亮元,包括信息的協(xié)議版本號(hào)斧蜕、一個(gè)成功或錯(cuò)誤的代碼,后邊是MIME信息包括服務(wù)器信息、實(shí)體信息和可能的內(nèi)容。

4.客戶端接收服務(wù)器所返回的信息通過(guò)瀏覽器顯示在用戶的顯示屏上温赔,然后客戶機(jī)與服務(wù)器斷開(kāi)連接待秃。

如果在以上過(guò)程中的某一步出現(xiàn)錯(cuò)誤,那么產(chǎn)生錯(cuò)誤的信息將返回到客戶端霞怀,有顯示屏輸出颓遏。對(duì)于用戶來(lái)說(shuō)叁幢,這些過(guò)程是由HTTP自己完成的曼玩,用戶只要用鼠標(biāo)點(diǎn)擊,等待信息顯示就可以了豫尽。下圖展示:


HTTP是基于傳輸層的TCP協(xié)議美旧,而TCP是一個(gè)端到端的面向連接的協(xié)議陈症。所謂的端到端可以理解為進(jìn)程到進(jìn)程之間的通信震糖。所以HTTP在開(kāi)始傳輸之前吊说,首先需要建立TCP連接,而TCP連接的過(guò)程需要所謂的“三次握手”厅贪。下圖所示TCP連接的三次握手雅宾。

在TCP三次握手之后眉抬,建立了TCP連接蜀变,此時(shí)HTTP就可以進(jìn)行傳輸了。一個(gè)重要的概念是面向連接爬舰,既HTTP在傳輸完成之間并不斷開(kāi)TCP連接情屹。在HTTP1.1中(通過(guò)Connection頭設(shè)置)這是默認(rèn)行為杂腰。

4.HTTP請(qǐng)求和響應(yīng)是怎么樣的颈墅?

這一塊內(nèi)容恤筛,會(huì)比較無(wú)聊和多。講的都是一些基礎(chǔ)知識(shí)望伦,所以,做好心理準(zhǔn)備腿箩,去看以下內(nèi)容(好吧珠移,我看著也是覺(jué)得很無(wú)聊的钧惧,不過(guò)沒(méi)辦法呀)

首先要接觸一個(gè)很不好理解的東西勾习,頭域巧婶。話說(shuō)這頭域是什么鬼?是不是一臉懵逼钮孵,其實(shí)巴席,我也不知道該怎么形象的比喻诅需。就姑且把它理解為信息表吧(有人說(shuō)是控制信息堰塌,有人說(shuō)是附言)。

頭域:

每個(gè)頭域由一個(gè)域名般此,冒號(hào)(:)和域值三部分組成铐懊。域名是大小寫無(wú)關(guān)的科乎,域值前可以添加任何數(shù)量的空格符贼急,頭域可以被擴(kuò)展為多行,在每行開(kāi)始處令杈,使用至少一個(gè)空格或制表符碴倾。(是不是感覺(jué)影斑,還是不懂矫户,沒(méi)關(guān)系残邀,下面看完芥挣。空免。。)

請(qǐng)求信息:

●請(qǐng)求行扼菠,例如GET /images/logo.gif HTTP/1.1循榆,表示從/images目錄下請(qǐng)求logo.gif這個(gè)文件秧饮。

●(請(qǐng)求)頭泽篮,例如Accept-Language: en

●空行

●可選的消息體 請(qǐng)求行和標(biāo)題必須以作為結(jié)尾(也就是帽撑,回車然后換行)油狂〈绨空行內(nèi)必須只有而無(wú)其他空格蒸苇。在HTTP/1.1協(xié)議中溪烤,所有的請(qǐng)求頭庇勃,除post外绊序,都是可選的劝赔。


三個(gè)部分分別是:請(qǐng)求行创淡、消息報(bào)頭衷掷、請(qǐng)求正文柿菩。其實(shí)看名字枢舶,也可以猜出來(lái)祟辟,body嘛旧困,就是身體,自然就是內(nèi)容了嘛僚纷。至于前兩個(gè)嘛怖竭,其實(shí)痊臭,我們不需要太關(guān)心。

請(qǐng)求方法:


HTTP/1.1協(xié)議中共定義了八種方法(有時(shí)也叫“動(dòng)作”)來(lái)表明Request-URI指定的資源的不同操作方式:(這里只是了解即可允趟,我們客戶端潮剪,就只研究GET和POST就可以了抗碰,其他學(xué)科的同學(xué)弧蝇,自行百度)

OPTIONS- 返回服務(wù)器針對(duì)特定資源所支持的HTTP請(qǐng)求方法迄汛。也可以利用向Web服務(wù)器發(fā)送'*'的請(qǐng)求來(lái)測(cè)試服務(wù)器的功能性鞍爱。

HEAD- 向服務(wù)器索要與GET請(qǐng)求相一致的響應(yīng)睹逃,只不過(guò)響應(yīng)體將不會(huì)被返回沉填。這一方法可以在不必傳輸整個(gè)響應(yīng)內(nèi)容的情況下佑笋,就可以獲取包含在響應(yīng)消息頭中的元信息蒋纬。該方法常用于測(cè)試超鏈接的有效性蜀备,是否可以訪問(wèn)碾阁,以及最近是否更新脂凶。

GET- 向特定的資源發(fā)出請(qǐng)求。注意:GET方法不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中埋市,例如在web app.中道宅。其中一個(gè)原因是GET可能會(huì)被網(wǎng)絡(luò)蜘蛛等隨意訪問(wèn)污茵。(主要就是python爬蟲(chóng)泞当,可以爬數(shù)據(jù))

POST- 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)襟士。數(shù)據(jù)被包含在請(qǐng)求體中嚷量。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改蝶溶。

PUT- 向指定資源位置上傳其最新內(nèi)容抖所。

DELETE- 請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源田轧。

TRACE- 回顯服務(wù)器收到的請(qǐng)求傻粘,主要用于測(cè)試或診斷抹腿。

CONNECT- HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。

PATCH- 用來(lái)將局部修改應(yīng)用于某一資源崇败,添加于規(guī)范RFC5789后室。

方法名稱是區(qū)分大小寫的岸霹。當(dāng)某個(gè)請(qǐng)求所針對(duì)的資源不支持對(duì)應(yīng)的請(qǐng)求方法的時(shí)候贡避,服務(wù)器應(yīng)當(dāng)返回狀態(tài)碼405(Method Not Allowed)刮吧;當(dāng)服務(wù)器不認(rèn)識(shí)或者不支持對(duì)應(yīng)的請(qǐng)求方法的時(shí)候杀捻,應(yīng)當(dāng)返回狀態(tài)碼501(Not Implemented)致讥。

HTTP服務(wù)器至少應(yīng)該實(shí)現(xiàn)GET和HEAD方法垢袱,其他方法都是可選的惶桐。此外潘懊,除了上述方法授舟,特定的HTTP服務(wù)器還能夠擴(kuò)展自定義的方法释树。

GET和POST的區(qū)別

1奢啥、GET提交的數(shù)據(jù)會(huì)放在URL之后桩盲,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連孝冒,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數(shù)據(jù)放在HTTP包的Body中庄涡。

2搬设、GET提交的數(shù)據(jù)大小有限制穴店,最多只能有1024字節(jié)(因?yàn)闉g覽器對(duì)URL的長(zhǎng)度有限制),而POST方法提交的數(shù)據(jù)沒(méi)有限制拿穴。

3迹鹅、GET方式需要使用Request.QueryString來(lái)取得變量的值,而POST方式通過(guò)Request.Form來(lái)獲取變量的值贞言。

4斜棚、GET方式提交數(shù)據(jù),會(huì)帶來(lái)安全問(wèn)題弟蚀,比如一個(gè)登錄頁(yè)面,通過(guò)GET方式提交數(shù)據(jù)時(shí)酗失,用戶名和密碼將出現(xiàn)在URL上义钉,如果頁(yè)面可以被緩存或者其他人可以訪問(wèn)這臺(tái)機(jī)器,就可以從歷史記錄獲得該用戶的賬號(hào)和密碼规肴。

所以捶闸,為了安全,我們通常是采用post請(qǐng)求方式拖刃。


響應(yīng)消息:

客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求删壮,服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括:消息協(xié)議的版本兑牡、成功或者錯(cuò)誤編碼央碟、服務(wù)器信息、實(shí)體元信息以及必要的實(shí)體內(nèi)容均函。根據(jù)響應(yīng)類別的類別亿虽,服務(wù)器響應(yīng)里可以含實(shí)體內(nèi)容,但不是所有的響應(yīng)都有實(shí)體內(nèi)容苞也。

響應(yīng)頭第一行也稱為狀態(tài)行洛勉,格式如下(下圖中紅線標(biāo)出的那行):

HTTP-Version 空格 Status-Code 空格 Reason-Phrase CRLF

HTTP- Version表示HTTP版本,例如為HTTP/1.1如迟。Status- Code是結(jié)果代碼收毫,用三個(gè)數(shù)字表示。Reason-Phrase是個(gè)簡(jiǎn)單的文本描述,解釋Status-Code的具體原因牛哺。Status-Code用于機(jī)器自動(dòng)識(shí)別陋气,Reason-Phrase用于人工理解。Status-Code的第一個(gè)數(shù)字代表響應(yīng)類別引润,可能取5個(gè)不同的值巩趁。后兩個(gè)數(shù)字沒(méi)有分類作用。Status-Code的第一個(gè)數(shù)字代表響應(yīng)的類別淳附,后續(xù)兩位描述在該類響應(yīng)下發(fā)生的具體狀況议慰,具體請(qǐng)參見(jiàn):HTTP狀態(tài)碼 。


下面是響應(yīng)消息的結(jié)構(gòu)

無(wú)論你何時(shí)瀏覽一個(gè)網(wǎng)頁(yè)奴曙,你的電腦都會(huì)通過(guò)一個(gè)使用HTTP協(xié)議的服務(wù)器來(lái)獲取所請(qǐng)求的數(shù)據(jù)别凹。在你請(qǐng)求的網(wǎng)頁(yè)顯示在瀏覽器之前,支配網(wǎng)頁(yè)的網(wǎng)站服務(wù)器會(huì)返回一個(gè)包含有狀態(tài)碼的HTTP頭文件洽糟。這個(gè)狀態(tài)碼提供了有關(guān)所請(qǐng)求網(wǎng)頁(yè)的相關(guān)條件信息炉菲。如果一切正常,一個(gè)標(biāo)準(zhǔn)網(wǎng)頁(yè)會(huì)收到一條諸如200的狀態(tài)碼坤溃。當(dāng)然我們的目的不是去研究200響應(yīng)碼拍霜,而是去探討那些代表出現(xiàn)錯(cuò)誤信息的服務(wù)器頭文件響應(yīng)碼,例如表示“未找到指定網(wǎng)頁(yè)”的404碼薪介。

響應(yīng)頭域:(艸祠饺,怎么還有一個(gè)響應(yīng)頭域呀,好吧汁政,這個(gè)和之前頭域道偷,可以理解為一個(gè)東西,只是這里包含的信息是響應(yīng)的罷了)

服務(wù)器需要傳遞許多附加信息记劈,這些信息不能全放在狀態(tài)行里勺鸦。因此,需要另行定義響應(yīng)頭域抠蚣,用來(lái)描述這些附加信息祝旷。響應(yīng)頭域主要描述服務(wù)器的信息和Request-URI的信息履澳。(是不是瞬間釋懷了嘶窄,因?yàn)榉挪幌侣铮圆鸥郊恿艘粋€(gè)域來(lái)放信息嘛)


下面是http常見(jiàn)的請(qǐng)求頭距贷,不過(guò)柄冲,不過(guò),不過(guò)忠蝗,因?yàn)槲矣植皇亲鰓eb端的现横,暫時(shí)就不去研究了,畢竟我是做客戶端的嘛。不過(guò)呢戒祠,雖然懶了一點(diǎn)骇两,但是,還是可以把那些基本的放上來(lái)姜盈,想看就看吧低千,不想看,可以跳過(guò)馏颂,跳過(guò)示血,跳過(guò)

HTTP常見(jiàn)的請(qǐng)求頭:(在HTTP/1.1 協(xié)議中,所有的請(qǐng)求頭救拉,除Host外难审,都是可選的,然而亿絮,都有什么用呢告喊?我反正暫時(shí)不想管)

If-Modified-Since:把瀏覽器端緩存頁(yè)面的最后修改時(shí)間發(fā)送到服務(wù)器去,服務(wù)器會(huì)把這個(gè)時(shí)間與服務(wù)器上實(shí)際文件的最后修改時(shí)間進(jìn)行對(duì)比派昧。如果時(shí)間一致葱绒,那么返回304,客戶端就直接使用本地緩存文件斗锭。如果時(shí)間不一致地淀,就會(huì)返回200和新的文件內(nèi)容♂牵客戶端接到之后帮毁,會(huì)丟棄舊文件,把新文件緩存起來(lái)豺撑,并顯示在瀏覽器中烈疚。

If-None-Match:If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息聪轿。 當(dāng)用戶再次請(qǐng)求該資源時(shí)爷肝,將在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服務(wù)器驗(yàn)證資源的ETag沒(méi)有改變(該資源沒(méi)有更新)陆错,將返回一個(gè)304狀態(tài)告訴客戶端使用本地緩存文件灯抛。否則將返回200狀態(tài)和新的資源和Etag.? 使用這樣的機(jī)制將提高網(wǎng)站的性能。例如: If-None-Match: "03f2b33c0bfcc1:0"音瓷。

Pragma:指定“no-cache”值表示服務(wù)器必須返回一個(gè)刷新后的文檔对嚼,即使它是代理服務(wù)器而且已經(jīng)有了頁(yè)面的本地拷貝;在HTTP/1.1版本中绳慎,它和Cache-Control:no-cache作用一模一樣纵竖。Pargma只有一個(gè)用法漠烧, 例如: Pragma: no-cache

注意: 在HTTP/1.0版本中,只實(shí)現(xiàn)了Pragema:no-cache, 沒(méi)有實(shí)現(xiàn)Cache-Control(但是靡砌,現(xiàn)在早就1.1了已脓,不用理會(huì))

Cache-Control:指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。緩存指令是單向的(響應(yīng)中出現(xiàn)的緩存指令在請(qǐng)求中未必會(huì)出現(xiàn))通殃,且是獨(dú)立的(在請(qǐng)求消息或響應(yīng)消息中設(shè)置Cache-Control并不會(huì)修改另一個(gè)消息處理過(guò)程中的緩存處理過(guò)程)摆舟。請(qǐng)求時(shí)的緩存指令包括no-cache、no-store邓了、max-age恨诱、max-stale、min-fresh骗炉、only-if-cached照宝,響應(yīng)消息中的指令包括public、private句葵、no-cache厕鹃、no-store、no-transform乍丈、must-revalidate剂碴、proxy-revalidate、max-age轻专、s-maxage忆矛。

Cache-Control:Public 可以被任何緩存所緩存

Cache-Control:Private 內(nèi)容只緩存到私有緩存中

Cache-Control:no-cache 所有內(nèi)容都不會(huì)被緩存

Cache-Control:no-store 用于防止重要的信息被無(wú)意的發(fā)布。在請(qǐng)求消息中發(fā)送將使得請(qǐng)求和響應(yīng)消息都不使用緩存请垛。

Cache-Control:max-age 指示客戶機(jī)可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)催训。

Cache-Control:min-fresh 指示客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)。

Cache-Control:max-stale 指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息宗收。如果指定max-stale消息的值漫拭,那么客戶機(jī)可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。

Accept:瀏覽器端可以接受的MIME類型混稽。例如:Accept: text/html 代表瀏覽器可以接受服務(wù)器回發(fā)的類型為 text/html 也就是我們常說(shuō)的html文檔采驻,如果服務(wù)器無(wú)法返回text/html類型的數(shù)據(jù),服務(wù)器應(yīng)該返回一個(gè)406錯(cuò)誤(non acceptable)匈勋。通配符 * 代表任意類型礼旅,例如 Accept: */* 代表瀏覽器可以處理所有類型,(一般瀏覽器發(fā)給服務(wù)器都是發(fā)這個(gè))颓影。

Accept-Encoding:瀏覽器申明自己可接收的編碼方法各淀,通常指定壓縮方法,是否支持壓縮诡挂,支持什么壓縮方法(gzip碎浇,deflate);Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁(yè)面。許多情形下這可以減少5到10倍的下載時(shí)間璃俗。例如: Accept-Encoding: gzip, deflate奴璃。如果請(qǐng)求消息中沒(méi)有設(shè)置這個(gè)域,服務(wù)器假定客戶端對(duì)各種內(nèi)容編碼都可以接受城豁。

Accept-Language:瀏覽器申明自己接收的語(yǔ)言苟穆。語(yǔ)言跟字符集的區(qū)別:中文是語(yǔ)言,中文有多種字符集唱星,比如big5雳旅,gb2312,gbk等等间聊;例如:Accept-Language: en-us攒盈。如果請(qǐng)求消息中沒(méi)有設(shè)置這個(gè)報(bào)頭域,服務(wù)器假定客戶端對(duì)各種語(yǔ)言都可以接受哎榴。

Accept-Charset:瀏覽器可接受的字符集型豁。如果在請(qǐng)求消息中沒(méi)有設(shè)置這個(gè)域,缺省表示任何字符集都可以接受尚蝌。

User-Agent:告訴HTTP服務(wù)器迎变,客戶端使用的操作系統(tǒng)和瀏覽器的名稱和版本。

例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)飘言。

Content-Type:例如:Content-Type: application/x-www-form-urlencoded衣形。

Referer:包含一個(gè)URL,用戶從該URL代表的頁(yè)面出發(fā)訪問(wèn)當(dāng)前請(qǐng)求的頁(yè)面姿鸿。提供了Request的上下文信息的服務(wù)器泵喘,告訴服務(wù)器我是從哪個(gè)鏈接過(guò)來(lái)的,比如從我主頁(yè)上鏈接到一個(gè)朋友那里般妙,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計(jì)出每天有多少用戶點(diǎn)擊我主頁(yè)上的鏈接訪問(wèn)他的網(wǎng)站纪铺。

例如: Referer:http://translate.google.cn/?hl=zh-cn&tab=wT

Connection:

例如:Connection: keep-alive 當(dāng)一個(gè)網(wǎng)頁(yè)打開(kāi)完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉碟渺,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè)鲜锚,會(huì)繼續(xù)使用這一條已經(jīng)建立的連接。HTTP 1.1默認(rèn)進(jìn)行持久連接苫拍。利用持久連接的優(yōu)點(diǎn)芜繁,當(dāng)頁(yè)面包含多個(gè)元素時(shí)(例如Applet,圖片)绒极,顯著地減少下載所需要的時(shí)間骏令。要實(shí)現(xiàn)這一點(diǎn),Servlet需要在應(yīng)答中發(fā)送一個(gè)Content-Length頭垄提,最簡(jiǎn)單的實(shí)現(xiàn)方法是:先把內(nèi)容寫入ByteArrayOutputStream榔袋,然后在正式寫出內(nèi)容之前計(jì)算它的大小周拐。

Connection: close 代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉凰兑,當(dāng)客戶端再次發(fā)送Request妥粟,需要重新建立TCP連接。

Host:(發(fā)送請(qǐng)求時(shí)吏够,該頭域是必需的)主要用于指定被請(qǐng)求資源的Internet主機(jī)和端口號(hào)勾给,它通常從HTTP URL中提取出來(lái)的。HTTP/1.1請(qǐng)求必須包含主機(jī)頭域锅知,否則系統(tǒng)會(huì)以400狀態(tài)碼返回播急。

例如: 我們?cè)跒g覽器中輸入:http://www.guet.edu.cn/index.html,瀏覽器發(fā)送的請(qǐng)求消息中售睹,就會(huì)包含Host請(qǐng)求頭域:Host:http://www.guet.edu.cn桩警,此處使用缺省端口號(hào)80,若指定了端口號(hào)侣姆,則變成:Host:指定端口號(hào)生真。

Cookie:最重要的請(qǐng)求頭之一, 將cookie的值發(fā)送給HTTP服務(wù)器。

Content-Length:表示請(qǐng)求消息正文的長(zhǎng)度捺宗。例如:Content-Length: 38柱蟀。

Authorization:授權(quán)信息,通常出現(xiàn)在對(duì)服務(wù)器發(fā)送的WWW-Authenticate頭的應(yīng)答中蚜厉。主要用于證明客戶端有權(quán)查看某個(gè)資源长已。當(dāng)瀏覽器訪問(wèn)一個(gè)頁(yè)面時(shí),如果收到服務(wù)器的響應(yīng)代碼為401(未授權(quán))昼牛,可以發(fā)送一個(gè)包含Authorization請(qǐng)求報(bào)頭域的請(qǐng)求术瓮,要求服務(wù)器對(duì)其進(jìn)行驗(yàn)證。

UA-Pixels贰健,UA-Color胞四,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發(fā)送的非標(biāo)準(zhǔn)的請(qǐng)求頭伶椿,表示屏幕大小辜伟、顏色深度、操作系統(tǒng)和CPU類型脊另。

From:請(qǐng)求發(fā)送者的email地址导狡,由一些特殊的Web客戶程序使用,瀏覽器不會(huì)用到它偎痛。

Range:可以請(qǐng)求實(shí)體的一個(gè)或者多個(gè)子范圍旱捧。例如,

表示頭500個(gè)字節(jié):bytes=0-499

表示第二個(gè)500字節(jié):bytes=500-999

表示最后500個(gè)字節(jié):bytes=-500

表示500字節(jié)以后的范圍:bytes=500-

第一個(gè)和最后一個(gè)字節(jié):bytes=0-0,-1

同時(shí)指定幾個(gè)范圍:bytes=500-600,601-999

但是服務(wù)器可以忽略此請(qǐng)求頭踩麦,如果無(wú)條件GET包含Range請(qǐng)求頭枚赡,響應(yīng)會(huì)以狀態(tài)碼206(PartialContent)返回而不是以200(OK)氓癌。

好吧,累死了标锄,雖然這一大段是網(wǎng)上cv過(guò)來(lái)的顽铸,但是茁计,看一遍料皇,還是累呀。

HTTP常見(jiàn)的響應(yīng)頭:這一部分就不寫了星压,因?yàn)榧粒铱戳艘幌拢蛻舳岁P(guān)系不大娜膘,就跳過(guò)逊脯,有興趣的同學(xué),請(qǐng)百度”HTTP常見(jiàn)的響應(yīng)頭

5.HTTP的狀態(tài)內(nèi)容(關(guān)于cookie和session)

這一部分竣贪,是重點(diǎn)军洼,用心看一看

Cookies保存狀態(tài)信息:就用圖表示了



Session保存狀態(tài)信息:

Session機(jī)制是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來(lái)保存信息演怎。

當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session的時(shí)候匕争,服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含了一個(gè)session標(biāo)識(shí) - 稱為 session id,如果已包含一個(gè)session id則說(shuō)明以前已經(jīng)為此客戶端創(chuàng)建過(guò)session爷耀,服務(wù)器就按照session id把這個(gè) session檢索出來(lái)使用(如果檢索不到甘桑,可能會(huì)新建一個(gè)),如果客戶端請(qǐng)求不包含session id歹叮,則為此客戶端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的session id跑杭,session id的值應(yīng)該是一個(gè)既不會(huì)重復(fù),又不容易被找到規(guī)律以仿造的字符串咆耿,這個(gè)session id將被在本次響應(yīng)中返回給客戶端保存德谅。

Session的實(shí)現(xiàn)方式:

1、使用Cookie來(lái)實(shí)現(xiàn):

服務(wù)器給每個(gè)Session分配一個(gè)唯一的JSESSIONID萨螺,并通過(guò)Cookie發(fā)送給客戶端窄做。

當(dāng)客戶端發(fā)起新的請(qǐng)求的時(shí)候,將在Cookie頭中攜帶這個(gè)JSESSIONID屑迂。這樣服務(wù)器能夠找到這個(gè)客戶端對(duì)應(yīng)的Session浸策。


2、使用URL回寫來(lái)實(shí)現(xiàn)(這種方式惹盼,比較好庸汗,個(gè)人認(rèn)為)

URL回寫是指服務(wù)器在發(fā)送給瀏覽器頁(yè)面的所有鏈接中都攜帶JSESSIONID的參數(shù),這樣客戶端點(diǎn)擊任何一個(gè)鏈接都會(huì)把JSESSIONID帶會(huì)服務(wù)器手报。如果直接在瀏覽器輸入服務(wù)端資源的url來(lái)請(qǐng)求該資源蚯舱,那么Session是匹配不到的改化。

Tomcat對(duì)Session的實(shí)現(xiàn),是一開(kāi)始同時(shí)使用Cookie和URL回寫機(jī)制枉昏,如果發(fā)現(xiàn)客戶端支持Cookie陈肛,就繼續(xù)使用Cookie,停止使用URL回寫兄裂。如果發(fā)現(xiàn)Cookie被禁用句旱,就一直使用URL回寫。jsp開(kāi)發(fā)處理到Session的時(shí)候晰奖,對(duì)頁(yè)面中的鏈接記得使用response.encodeURL() 谈撒。

Cookie和Session比較:

1.Cookie將狀態(tài)保存在客戶端,Session將狀態(tài)保存在服務(wù)器端;(通常認(rèn)為客戶端是不安全的,一般是用存session的方式)

2.Cookies是服務(wù)器在本地機(jī)器上存儲(chǔ)的小段文本并隨每一個(gè)請(qǐng)求發(fā)送至同一個(gè)服務(wù)器握童。Cookie最早在RFC2109中實(shí)現(xiàn),后續(xù)RFC2965做了增強(qiáng)溯乒。網(wǎng)絡(luò)服務(wù)器用HTTP頭向客戶端發(fā)送cookies,在客戶終端豹爹,瀏覽器解析這些cookies并將它們保存為一個(gè)本地文件裆悄,它會(huì)自動(dòng)將同一服務(wù)器的任何請(qǐng)求縛上這些cookies。Session并沒(méi)有在HTTP的協(xié)議中定義帅戒;

3.Session是針對(duì)每一個(gè)用戶的灯帮,變量的值保存在服務(wù)器上,用一個(gè)sessionID來(lái)區(qū)分是哪個(gè)用戶session變量,這個(gè)值是通過(guò)用戶的瀏覽器在訪問(wèn)的時(shí)候返回給服務(wù)器逻住,當(dāng)客戶禁用cookie時(shí)钟哥,這個(gè)值也可能設(shè)置為由get來(lái)返回給服務(wù)器;

4.就安全性來(lái)說(shuō):當(dāng)你訪問(wèn)一個(gè)使用session 的站點(diǎn)瞎访,同時(shí)在自己機(jī)子上建立一個(gè)cookie腻贰,建議在服務(wù)器端的SESSION機(jī)制更安全些。因?yàn)樗粫?huì)任意讀取客戶存儲(chǔ)的信息扒秸。

6.什么是URL播演?

URL(Uniform Resource Locator) :

統(tǒng)一資源定位符是對(duì)可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問(wèn)方法的一種簡(jiǎn)潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址伴奥⌒纯荆互聯(lián)網(wǎng)上的每個(gè)文件都有一個(gè)唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它

用一種通俗的說(shuō)法就是地址拾徙,比如?http://www.sohu.com/domain/HXWZ

URL基本格式如下

schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]

scheme 指定低層使用的協(xié)議(例如:http, https, ftp)

host HTTP服務(wù)器的IP地址或者域名

port# HTTP服務(wù)器的默認(rèn)端口是80洲炊,這種情況下端口號(hào)可以省略。如果使用了別的端口,必須指明暂衡,例如 http://www.cnblogs.com:8080/

path 訪問(wèn)資源的路徑

url-params

query-string 發(fā)送給http服務(wù)器的數(shù)據(jù)

anchor- 錨

Schema: http

host: www.mywebsite.com

path: /sj/test

URL params: id=8079

Query String: name=sviergn&x=true

Anchor: stuff

不過(guò)询微,其實(shí),我們只需要知道狂巢,URL是地址就可以了

7.什么是緩存撑毛?

WEB緩存(cache)位于Web服務(wù)器和客戶端之間。

緩存會(huì)根據(jù)請(qǐng)求保存輸出內(nèi)容的副本唧领,例如html頁(yè)面藻雌,圖片,文件疹吃,當(dāng)下一個(gè)請(qǐng)求來(lái)到的時(shí)候:如果是相同的URL蹦疑,緩存直接使用副本響應(yīng)訪問(wèn)請(qǐng)求西雀,而不是向源服務(wù)器再次發(fā)送請(qǐng)求萨驶。

簡(jiǎn)單來(lái)說(shuō),就是暫時(shí)存下來(lái)艇肴,如果腔呜,下次請(qǐng)求,還是這個(gè)東西再悼,就直接給核畴,而不需要重新到服務(wù)器來(lái)。

緩存的有點(diǎn)和機(jī)制冲九,就不說(shuō)了谤草,了解一下就可以了。

8.HTTP的應(yīng)用(簡(jiǎn)單舉例)

斷點(diǎn)續(xù)傳:

HTTP協(xié)議的GET方法莺奸,支持只請(qǐng)求某個(gè)資源的某一部分丑孩;(簡(jiǎn)單來(lái)說(shuō),就是灭贷,保存當(dāng)前下載的節(jié)點(diǎn)温学,下次下載,接著這個(gè)節(jié)點(diǎn)甚疟,不需要重頭再來(lái)

206 Partial Content 部分內(nèi)容響應(yīng)仗岖;

Range 請(qǐng)求的資源范圍;

Content-Range 響應(yīng)的資源范圍览妖;

在連接斷開(kāi)重連時(shí)轧拄,客戶端只請(qǐng)求該資源未下載的部分,而不是重新請(qǐng)求整個(gè)資源讽膏,來(lái)實(shí)現(xiàn)斷點(diǎn)續(xù)傳檩电。

分塊請(qǐng)求資源實(shí)例:

Eg1:Range: bytes=306302- :請(qǐng)求這個(gè)資源從306302個(gè)字節(jié)到末尾的部分;

Eg2:Content-Range: bytes 306302-604047/604048:響應(yīng)中指示攜帶的是該資源的第306302-604047的字節(jié),該資源共604048個(gè)字節(jié)是嗜;

客戶端通過(guò)并發(fā)的請(qǐng)求相同資源的不同片段愈案,來(lái)實(shí)現(xiàn)對(duì)某個(gè)資源的并發(fā)分塊下載。從而達(dá)到快速下載的目的鹅搪。目前流行的FlashGet和迅雷基本都是這個(gè)原理站绪。

多線程下載:

下載工具開(kāi)啟多個(gè)發(fā)出HTTP請(qǐng)求的線程;(舉個(gè)例子丽柿,有一堆東西恢准,要搬,你多叫幾個(gè)人甫题,一個(gè)人搬一點(diǎn)馁筐,就更快搬完了)

每個(gè)http請(qǐng)求只請(qǐng)求資源文件的一部分:Content-Range: bytes 20000-40000/47000;

合并每個(gè)線程下載的文件坠非。

http代理:

這玩意很好呀敏沉,最常用的就是,我們?cè)L問(wèn)某些國(guó)外的網(wǎng)站炎码,然而盟迟,我們的ip是不支持的,這個(gè)時(shí)候潦闲,某軟件攒菠,就出現(xiàn)了,他就幫你訪問(wèn)某些網(wǎng)站歉闰,然后辖众,把數(shù)據(jù)返回給你。

代理服務(wù)器英文全稱是Proxy Server和敬,其功能就是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信息凹炸。形象的說(shuō):它是網(wǎng)絡(luò)信息的中轉(zhuǎn)站。

代理服務(wù)器是介于瀏覽器和Web服務(wù)器之間的一臺(tái)服務(wù)器概龄,有了它之后还惠,瀏覽器不是直接到Web服務(wù)器去取回網(wǎng)頁(yè)而是向代理服務(wù)器發(fā)出請(qǐng)求,Request信號(hào)會(huì)先送到代理服務(wù)器私杜,由代理服務(wù)器來(lái)取回瀏覽器所需要的信息并傳送給你的瀏覽器蚕键。

而且,大部分代理服務(wù)器都具有緩沖的功能衰粹,就好象一個(gè)大的Cache锣光,它有很大的存儲(chǔ)空間,它不斷將新取得數(shù)據(jù)儲(chǔ)存到它本機(jī)的存儲(chǔ)器上铝耻,如果瀏覽器所請(qǐng)求的數(shù)據(jù)在它本機(jī)的存儲(chǔ)器上已經(jīng)存在而且是最新的誊爹,那么它就不重新從Web服務(wù)器取數(shù)據(jù)蹬刷,而直接將存儲(chǔ)器上的數(shù)據(jù)傳送給用戶的瀏覽器,這樣就能顯著提高瀏覽速度和效率频丘。更重要的是:Proxy Server(代理服務(wù)器)是Internet鏈路級(jí)網(wǎng)關(guān)所提供的一種重要的安全功能办成,它的工作主要在開(kāi)放系統(tǒng)互聯(lián)(OSI)模型的對(duì)話層。

http代理服務(wù)器的主要功能:

1.突破自身IP訪問(wèn)限制搂漠,訪問(wèn)國(guó)外站點(diǎn)迂卢。如:教育網(wǎng)、169網(wǎng)等網(wǎng)絡(luò)用戶可以通過(guò)代理訪問(wèn)國(guó)外網(wǎng)站桐汤;

2.訪問(wèn)一些單位或團(tuán)體內(nèi)部資源而克,如某大學(xué)FTP(前提是該代理地址在該資源的允許訪問(wèn)范圍之內(nèi)),使用教育網(wǎng)內(nèi)地址段免費(fèi)代理服務(wù)器怔毛,就可以用于對(duì)教育 網(wǎng)開(kāi)放的各類FTP下載上傳员萍,以及各類資料查詢共享等服務(wù);

3.突破中國(guó)電信的IP封鎖:中國(guó)電信用戶有很多網(wǎng)站是被限制訪問(wèn)的拣度,這種限制是人為的碎绎,不同Serve對(duì)地址的封鎖是不同的。所以不能訪問(wèn)時(shí)可以換一個(gè)國(guó)外的代理服務(wù)器試試蜡娶;

4.提高訪問(wèn)速度:通常代理服務(wù)器都設(shè)置一個(gè)較大的硬盤緩沖區(qū)混卵,當(dāng)有外界的信息通過(guò)時(shí),同時(shí)也將其保存到緩沖區(qū)中窖张,當(dāng)其他用戶再訪問(wèn)相同的信息時(shí),則直接由緩沖區(qū)中取出信息蚁滋,傳給用戶宿接,以提高訪問(wèn)速度;

5.隱藏真實(shí)IP:上網(wǎng)者也可以通過(guò)這種方法隱藏自己的IP辕录,免受攻擊睦霎。

對(duì)于客戶端瀏覽器而言,http代理服務(wù)器相當(dāng)于服務(wù)器走诞。

而對(duì)于Web服務(wù)器而言副女,http代理服務(wù)器又擔(dān)當(dāng)了客戶端的角色。蚣旱、

虛擬主機(jī):這個(gè)不講碑幅,自行百度。(因?yàn)楸救酥v不清楚塞绿,能力有限沟涨,以后有機(jī)會(huì)再補(bǔ)充吧)

9.HTTP安全相關(guān)

網(wǎng)絡(luò)安全,一向是非常重要的問(wèn)題异吻。由于本人技術(shù)實(shí)在有限裹赴,只能粗略的講一講:

基本認(rèn)證basic authentication(HTTP1.0提出的認(rèn)證方法):

基本認(rèn)證是一種用來(lái)允許Web瀏覽器或其他客戶端程序在請(qǐng)求時(shí)提供用戶名和口令形式的身份憑證的一種登錄驗(yàn)證方式。

把 "用戶名+冒號(hào)+密碼"用BASE64算法加密后的字符串放在http request 中的header Authorization中發(fā)送給服務(wù)端。

客戶端對(duì)于每一個(gè)realm棋返,通過(guò)提供用戶名和密碼來(lái)進(jìn)行認(rèn)證的方式延都。

包含密碼的明文傳遞。

假如用戶名密碼錯(cuò)誤的話睛竣,服務(wù)器會(huì)返回401

基本認(rèn)證步驟:

1窄潭、客戶端訪問(wèn)一個(gè)受http基本認(rèn)證保護(hù)的資源。

2酵颁、服務(wù)器返回401狀態(tài)嫉你,要求客戶端提供用戶名和密碼進(jìn)行認(rèn)證。(驗(yàn)證失敗的時(shí)候躏惋,響應(yīng)頭會(huì)加上WWW-Authenticate: Basic realm="請(qǐng)求域"幽污。)

401 Unauthorized

WWW-Authenticate: Basic realm="WallyWorld"

3、客戶端將輸入的用戶名密碼用Base64進(jìn)行編碼后簿姨,采用非加密的明文方式傳送給服務(wù)器距误。

Authorization: Basic xxxxxxxxxx.

4、服務(wù)器將Authorization頭中的用戶名密碼解碼并取出扁位,進(jìn)行驗(yàn)證准潭,如果認(rèn)證成功,則返回相應(yīng)的資源域仇。如果認(rèn)證失敗刑然,則仍返回401狀態(tài),要求重新進(jìn)行認(rèn)證暇务。

特記事項(xiàng):

1泼掠、Http是無(wú)狀態(tài)的,同一個(gè)客戶端對(duì)同一個(gè)realm內(nèi)資源的每一個(gè)訪問(wèn)會(huì)被要求進(jìn)行認(rèn)證垦细。

2择镇、客戶端通常會(huì)緩存用戶名和密碼,并和authentication realm一起保存括改,所以腻豌,一般不需要你重新輸入用戶名和密碼。

3嘱能、以非加密的明文方式傳輸吝梅,雖然轉(zhuǎn)換成了不易被人直接識(shí)別的字符串,但是無(wú)法防止用戶名密碼被惡意盜用焰檩。雖然用肉眼看不出來(lái)憔涉,但用程序很容易解密。

優(yōu)點(diǎn):

基本認(rèn)證的一個(gè)優(yōu)點(diǎn)是基本上所有流行的網(wǎng)頁(yè)瀏覽器都支持基本認(rèn)證析苫《颠叮基本認(rèn)證很少在可公開(kāi)訪問(wèn)的互聯(lián)網(wǎng)網(wǎng)站上使用穿扳,有時(shí)候會(huì)在小的私有系統(tǒng)中使用(如路由器

網(wǎng)頁(yè)管理接口)。后來(lái)的機(jī)制HTTP摘要認(rèn)證是為替代基本認(rèn)證而開(kāi)發(fā)的国旷,允許密鑰以相對(duì)安全的方式在不安全的通道上傳輸矛物。

程序員和系統(tǒng)管理員有時(shí)會(huì)在可信網(wǎng)絡(luò)環(huán)境中使用基本認(rèn)證,使用Telnet或其他明文網(wǎng)絡(luò)協(xié)議工具手動(dòng)地測(cè)試Web服務(wù)器跪但。這是一個(gè)麻煩的過(guò)程履羞,但是網(wǎng)絡(luò)上傳輸?shù)?/p>

內(nèi)容是人可讀的,以便進(jìn)行診斷屡久。

缺點(diǎn):

雖然基本認(rèn)證非常容易實(shí)現(xiàn)忆首,但該方案建立在以下的假設(shè)的基礎(chǔ)上,即:客戶端和服務(wù)器主機(jī)之間的連接是安全可信的被环。特別是糙及,如果沒(méi)有使用SSL/TLS這樣的傳輸

層安全的協(xié)議,那么以明文傳輸?shù)拿荑€和口令很容易被攔截筛欢。該方案也同樣沒(méi)有對(duì)服務(wù)器返回的信息提供保護(hù)浸锨。

現(xiàn)存的瀏覽器保存認(rèn)證信息直到標(biāo)簽頁(yè)或?yàn)g覽器被關(guān)閉,或者用戶清除歷史記錄版姑。HTTP沒(méi)有為服務(wù)器提供一種方法指示客戶端丟棄這些被緩存的密鑰柱搜。這意味著服務(wù)

器端在用戶不關(guān)閉瀏覽器的情況下,并沒(méi)有一種有效的方法來(lái)讓用戶登出剥险。

摘要認(rèn)證digest authentication(HTTP1.1提出的基本認(rèn)證的替代方法):

這個(gè)認(rèn)證可以看做是基本認(rèn)證的增強(qiáng)版本聪蘸,不包含密碼的明文傳遞。

引入了一系列安全增強(qiáng)的選項(xiàng)炒嘲;“保護(hù)質(zhì)量”(qop)宇姚、隨機(jī)數(shù)計(jì)數(shù)器由客戶端增加、以及客戶生成的隨機(jī)數(shù)夫凸。

在HTTP摘要認(rèn)證中使用 MD5 加密是為了達(dá)成"不可逆的",也就是說(shuō)阱持,當(dāng)輸出已知的時(shí)候夭拌,確定原始的輸入應(yīng)該是相當(dāng)困難的。如果密碼本身太過(guò)簡(jiǎn)單衷咽,也許可以

通過(guò)嘗試所有可能的輸入來(lái)找到對(duì)應(yīng)的輸出(窮舉攻擊)鸽扁,甚至可以通過(guò)字典或者適當(dāng)?shù)牟檎冶砑涌觳檎宜俣取?/p>

典型的認(rèn)證過(guò)程包括如下步驟:

客戶端請(qǐng)求一個(gè)需要認(rèn)證的頁(yè)面,但是不提供用戶名和密碼镶骗。通常這是由于用戶簡(jiǎn)單的輸入了一個(gè)地址或者在頁(yè)面中點(diǎn)擊了某個(gè)超鏈接桶现。

服務(wù)器返回401 "Unauthorized" 響應(yīng)代碼,并提供認(rèn)證域(realm)鼎姊,以及一個(gè)隨機(jī)生成的骡和、只使用一次的數(shù)值相赁,稱為密碼隨機(jī)數(shù) nonce。

此時(shí)慰于,瀏覽器會(huì)向用戶提示認(rèn)證域(realm)(通常是所訪問(wèn)的計(jì)算機(jī)或系統(tǒng)的描述)钮科,并且提示用戶名和密碼。用戶此時(shí)可以選擇取消婆赠。

一旦提供了用戶名和密碼绵脯,客戶端會(huì)重新發(fā)送同樣的請(qǐng)求,但是添加了一個(gè)認(rèn)證頭包括了響應(yīng)代碼休里。

注意:客戶端可能已經(jīng)擁有了用戶名和密碼蛆挫,因此不需要提示用戶,比如以前存儲(chǔ)在瀏覽器里的妙黍。

10.HTTPS傳輸協(xié)議

兩種基本的加解密算法類型:

對(duì)稱加密:密鑰只有一個(gè)悴侵,加密解密為同一個(gè)密碼,且加解密速度快废境,典型的對(duì)稱加密算法有DES畜挨、AES等。

非對(duì)稱加密:密鑰成對(duì)出現(xiàn)(且根據(jù)公鑰無(wú)法推知私鑰噩凹,根據(jù)私鑰也無(wú)法推知公鑰)巴元,加密解密使用不同密鑰(公鑰加密需要私鑰解密,私鑰加密需要公鑰解密)驮宴,相對(duì)對(duì)稱加密速度較慢逮刨,典型的非對(duì)稱加密算法有RSA、DSA等堵泽。

HTTPS通信過(guò)程:


HTTPS通信的優(yōu)點(diǎn):

客戶端產(chǎn)生的密鑰只有客戶端和服務(wù)器端能得到修己;

加密的數(shù)據(jù)只有客戶端和服務(wù)器端才能得到明文;

客戶端到服務(wù)端的通信是安全的迎罗。

11.http的狀態(tài)響應(yīng)碼

這一部分睬愤,純屬,了解:

1**(信息類):表示接收到請(qǐng)求并且繼續(xù)處理

100——客戶必須繼續(xù)發(fā)出請(qǐng)求

101——客戶要求服務(wù)器根據(jù)請(qǐng)求轉(zhuǎn)換HTTP協(xié)議版本

2**(響應(yīng)成功):表示動(dòng)作被成功接收纹安、理解和接受

200——表明該請(qǐng)求被成功地完成尤辱,所請(qǐng)求的資源發(fā)送回客戶端

201——提示知道新文件的URL

202——接受和處理、但處理未完成

203——返回信息不確定或不完整

204——請(qǐng)求收到厢岂,但返回信息為空

205——服務(wù)器完成了請(qǐng)求光督,用戶代理必須復(fù)位當(dāng)前已經(jīng)瀏覽過(guò)的文件

206——服務(wù)器已經(jīng)完成了部分用戶的GET請(qǐng)求

3**(重定向類):為了完成指定的動(dòng)作,必須接受進(jìn)一步處理

300——請(qǐng)求的資源可在多處得到

301——本網(wǎng)頁(yè)被永久性轉(zhuǎn)移到另一個(gè)URL

302——請(qǐng)求的網(wǎng)頁(yè)被轉(zhuǎn)移到一個(gè)新的地址塔粒,但客戶訪問(wèn)仍繼續(xù)通過(guò)原始URL地址结借,重定向,新的URL會(huì)在response中的Location中返回卒茬,瀏覽器將會(huì)使用新的URL發(fā)出新的Request船老。

303——建議客戶訪問(wèn)其他URL或訪問(wèn)方式

304——自從上次請(qǐng)求后咖熟,請(qǐng)求的網(wǎng)頁(yè)未修改過(guò),服務(wù)器返回此響應(yīng)時(shí)努隙,不會(huì)返回網(wǎng)頁(yè)內(nèi)容球恤,代表上次的文檔已經(jīng)被緩存了,還可以繼續(xù)使用

305——請(qǐng)求的資源必須從服務(wù)器指定的地址得到

306——前一版本HTTP中使用的代碼荸镊,現(xiàn)行版本中不再使用

307——申明請(qǐng)求的資源臨時(shí)性刪除

4**(客戶端錯(cuò)誤類):請(qǐng)求包含錯(cuò)誤語(yǔ)法或不能正確執(zhí)行

400——客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤咽斧,不能被服務(wù)器所理解

401——請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用

HTTP 401.1 - 未授權(quán):登錄失敗

HTTP 401.2 - 未授權(quán):服務(wù)器配置問(wèn)題導(dǎo)致登錄失敗

HTTP 401.3 - ACL 禁止訪問(wèn)資源

HTTP 401.4 - 未授權(quán):授權(quán)被篩選器拒絕

HTTP 401.5 - 未授權(quán):ISAPI 或 CGI 授權(quán)失敗

402——保留有效ChargeTo頭響應(yīng)

403——禁止訪問(wèn)躬存,服務(wù)器收到請(qǐng)求张惹,但是拒絕提供服務(wù)

HTTP 403.1 禁止訪問(wèn):禁止可執(zhí)行訪問(wèn)

HTTP 403.2 - 禁止訪問(wèn):禁止讀訪問(wèn)

HTTP 403.3 - 禁止訪問(wèn):禁止寫訪問(wèn)

HTTP 403.4 - 禁止訪問(wèn):要求 SSL

HTTP 403.5 - 禁止訪問(wèn):要求 SSL 128

HTTP 403.6 - 禁止訪問(wèn):IP 地址被拒絕

HTTP 403.7 - 禁止訪問(wèn):要求客戶證書(shū)

HTTP 403.8 - 禁止訪問(wèn):禁止站點(diǎn)訪問(wèn)

HTTP 403.9 - 禁止訪問(wèn):連接的用戶過(guò)多

HTTP 403.10 - 禁止訪問(wèn):配置無(wú)效

HTTP 403.11 - 禁止訪問(wèn):密碼更改

HTTP 403.12 - 禁止訪問(wèn):映射器拒絕訪問(wèn)

HTTP 403.13 - 禁止訪問(wèn):客戶證書(shū)已被吊銷

HTTP 403.15 - 禁止訪問(wèn):客戶訪問(wèn)許可過(guò)多

HTTP 403.16 - 禁止訪問(wèn):客戶證書(shū)不可信或者無(wú)效

HTTP 403.17 - 禁止訪問(wèn):客戶證書(shū)已經(jīng)到期或者尚未生效

404——一個(gè)404錯(cuò)誤表明可連接服務(wù)器,但服務(wù)器無(wú)法取得所請(qǐng)求的網(wǎng)頁(yè)岭洲,請(qǐng)求資源不存在宛逗。eg:輸入了錯(cuò)誤的URL

405——用戶在Request-Line字段定義的方法不允許

406——根據(jù)用戶發(fā)送的Accept拖,請(qǐng)求資源不可訪問(wèn)

407——類似401盾剩,用戶必須首先在代理服務(wù)器上得到授權(quán)

408——客戶端沒(méi)有在用戶指定的餓時(shí)間內(nèi)完成請(qǐng)求

409——對(duì)當(dāng)前資源狀態(tài)雷激,請(qǐng)求不能完成

410——服務(wù)器上不再有此資源且無(wú)進(jìn)一步的參考地址

411——服務(wù)器拒絕用戶定義的Content-Length屬性請(qǐng)求

412——一個(gè)或多個(gè)請(qǐng)求頭字段在當(dāng)前請(qǐng)求中錯(cuò)誤

413——請(qǐng)求的資源大于服務(wù)器允許的大小

414——請(qǐng)求的資源URL長(zhǎng)于服務(wù)器允許的長(zhǎng)度

415——請(qǐng)求資源不支持請(qǐng)求項(xiàng)目格式

416——請(qǐng)求中包含Range請(qǐng)求頭字段,在當(dāng)前請(qǐng)求資源范圍內(nèi)沒(méi)有range指示值告私,請(qǐng)求也不包含If-Range請(qǐng)求頭字段

417——服務(wù)器不滿足請(qǐng)求Expect頭字段指定的期望值屎暇,如果是代理服務(wù)器,可能是下一級(jí)服務(wù)器不能滿足請(qǐng)求長(zhǎng)驻粟。

5**(服務(wù)端錯(cuò)誤類):服務(wù)器不能正確執(zhí)行一個(gè)正確的請(qǐng)求

HTTP 500 - 服務(wù)器遇到錯(cuò)誤根悼,無(wú)法完成請(qǐng)求

HTTP 500.100 - 內(nèi)部服務(wù)器錯(cuò)誤 - ASP 錯(cuò)誤

HTTP 500-11 服務(wù)器關(guān)閉

HTTP 500-12 應(yīng)用程序重新啟動(dòng)

HTTP 500-13 - 服務(wù)器太忙

HTTP 500-14 - 應(yīng)用程序無(wú)效

HTTP 500-15 - 不允許請(qǐng)求 global.asa

Error 501 - 未實(shí)現(xiàn)

HTTP 502 - 網(wǎng)關(guān)錯(cuò)誤

HTTP 503:由于超載或停機(jī)維護(hù),服務(wù)器目前無(wú)法使用蜀撑,一段時(shí)間后可能恢復(fù)正常


后記:吼吼挤巡,寫了好久呀,兩天酷麦,才弄完矿卑,參考了很多博客,還有百度沃饶,才整理出來(lái)粪摘。感謝博客園的大神。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绍坝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苔悦,更是在濱河造成了極大的恐慌轩褐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玖详,死亡現(xiàn)場(chǎng)離奇詭異把介,居然都是意外死亡勤讽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門拗踢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脚牍,“玉大人,你說(shuō)我怎么就攤上這事巢墅≈钕粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵君纫,是天一觀的道長(zhǎng)驯遇。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蓄髓,這世上最難降的妖魔是什么叉庐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮会喝,結(jié)果婚禮上陡叠,老公的妹妹穿的比我還像新娘。我一直安慰自己肢执,他們只是感情好枉阵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蔚万,像睡著了一般岭妖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上反璃,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天昵慌,我揣著相機(jī)與錄音,去河邊找鬼淮蜈。 笑死斋攀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梧田。 我是一名探鬼主播淳蔼,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼裁眯!你這毒婦竟也來(lái)了鹉梨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤穿稳,失蹤者是張志新(化名)和其女友劉穎存皂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旦袋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年骤菠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疤孕。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡商乎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祭阀,到底是詐尸還是另有隱情鹉戚,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布柬讨,位于F島的核電站崩瓤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏踩官。R本人自食惡果不足惜却桶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔗牡。 院中可真熱鬧颖系,春花似錦、人聲如沸辩越。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)黔攒。三九已至趁啸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間督惰,已是汗流浹背不傅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赏胚,地道東北人访娶。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像觉阅,于是被迫代替她去往敵國(guó)和親崖疤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一典勇、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,359評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)劫哼,內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,224評(píng)論 3 82
  • 本文整理自MIN飛翔博客 [1] 1. 概念 協(xié)議是指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或...
    HoyaWhite閱讀 2,674評(píng)論 2 20
  • http協(xié)議有http0.9,http1.0割笙,http1.1和http2三個(gè)版本沦偎,但是現(xiàn)在瀏覽器使用的是htt...
    一現(xiàn)_閱讀 1,865評(píng)論 0 3
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器豪嚎,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139