一、http與https
1. 什么是超文本
1960年美國人Ted Nelson構(gòu)思了一種通過計(jì)算機(jī)處理文本信息的方法惩阶,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標(biāo)準(zhǔn)架構(gòu)的發(fā)展根基刑然。
超文本是用超鏈接的方法振湾,將各種不同空間的文字信息組織在一起的網(wǎng)狀文本。超文本更是一種用戶界面范式劣针,用以顯示文本及與文本之間相關(guān)的內(nèi)容⌒8洌現(xiàn)時(shí)超文本普遍以電子文檔方式存在,其中的文字包含有可以鏈結(jié)到其他位置或者文檔的連結(jié)捺典,允許從當(dāng)前閱讀位置直接切換到超文本連結(jié)所指向的位置鸟廓。
2. http協(xié)議
HTTP(HyperText Transport Protocol)是超文本傳輸協(xié)議的縮寫,它用于傳送WWW方式的數(shù)據(jù)襟己。
超文本傳輸協(xié)議(HTTP引谜,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)擎浴。設(shè)計(jì)HTTP最初的目的
是為了提供一種發(fā)布和接收HTML頁面的方法员咽。
3. http與https基本概念
- HTTP:是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP)贮预,用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議贝室,它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少仿吞。
- HTTPS:是以安全為目標(biāo)的HTTP通道滑频,簡單講是HTTP的安全版,即HTTP下加入SSL(Secure Sockets Layer)層唤冈,HTTPS的安全基礎(chǔ)是SSL误趴,因此加密的詳細(xì)內(nèi)容就需要SSL。
HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個(gè)信息安全通道务傲,來保證數(shù)據(jù)傳輸?shù)陌踩沟保涣硪环N就是確認(rèn)網(wǎng)站的真實(shí)性枣申。
4. http與https的區(qū)別
簡單來說,HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸看杭、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議忠藤,要比http協(xié)議安全。區(qū)別主要如下:
1楼雹、http是超文本傳輸協(xié)議模孩,信息是明文傳輸,是無狀態(tài)的贮缅;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸榨咐、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全谴供。
2块茁、http和https使用的是完全不同的連接方式,用的默認(rèn)端口也不一樣桂肌,前者是80数焊,后者是443。
3崎场、https協(xié)議需要到ca申請(qǐng)證書佩耳,一般免費(fèi)證書較少,因而需要一定費(fèi)用谭跨。
二干厚、http請(qǐng)求的組成
從客戶端到服務(wù)器端的請(qǐng)求消息,信息由4部分組成請(qǐng)求行螃宙、消息報(bào)頭蛮瞄、空行、請(qǐng)求正文
1. 請(qǐng)求行(請(qǐng)求方法URI協(xié)議/版本)
請(qǐng)求的第一行是“方法URI協(xié)議/版本”例如:GET/sample.jsp HTTP/1.1
以上代碼中“GET”代表請(qǐng)求方法污呼,“/sample.jsp”表示URI裕坊,“HTTP/1.1代表協(xié)議和協(xié)議的版本。
2. 消息報(bào)頭(請(qǐng)求頭Request Header)
請(qǐng)求頭包含許多有關(guān)的客戶端環(huán)境和請(qǐng)求正文的有用信息燕酷。例如籍凝,請(qǐng)求頭可以聲明瀏覽器所用的語言,請(qǐng)求正文的長度等苗缩。例如:
Accept:image/gif.image/jpeg./(請(qǐng)求的圖片內(nèi)容格式)
Accept-Language:zh-cn(zh-CN 是表示中文饵蒂,fr-FR 是表示法語。 這是RFC1766定義的語言表示方式)
Connection:Keep-Alive(又稱持久連接酱讶、連接重用退盯,Keep-Alive功能使客戶端到服務(wù)器端的連接持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請(qǐng)求時(shí),Keep-Alive功能避免了建立或者重新建立連接渊迁。)
Host:localhost(主機(jī)名字)
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)(客戶端身份信息)
Accept-Encoding:gzip,deflate( 以壓縮格式接收請(qǐng)求數(shù)據(jù))
3. 空行
必須有慰照,發(fā)送回車符和換行符,通知服務(wù)器以下不再有請(qǐng)求頭
三琉朽、請(qǐng)求正文(body)
請(qǐng)求頭和請(qǐng)求正文之間是一個(gè)空行毒租,這個(gè)行非常重要,它表示請(qǐng)求頭已經(jīng)結(jié)束箱叁,接下來的是請(qǐng)求正文墅垮。請(qǐng)求正文中可以包含客戶提交的查詢字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP請(qǐng)求中,請(qǐng)求的正文只有一行內(nèi)容耕漱。當(dāng)然算色,在實(shí)際應(yīng)用中,HTTP請(qǐng)求正文可以包含更多的內(nèi)容螟够。
案例
4. 請(qǐng)求方法
請(qǐng)求方法 | 解釋 |
---|---|
GET | 請(qǐng)求獲取Request-URI所標(biāo)識(shí)的資源 |
POST | 在Request-URI所標(biāo)識(shí)的資源后附加新的數(shù)據(jù) |
HEAD | 請(qǐng)求獲取由Request-URI所標(biāo)識(shí)的資源的響應(yīng)消息報(bào)頭 |
PUT | 請(qǐng)求服務(wù)器存儲(chǔ)一個(gè)資源灾梦,并用Request-URI作為其標(biāo)識(shí) |
DELETE | 請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源 |
TRACE | 請(qǐng)求服務(wù)器回送收到的請(qǐng)求信息,主要用于測試或診斷 |
CONNECT | 保留將來使用 |
OPTIONS | 請(qǐng)求查詢服務(wù)器的性能齐鲤,或者查詢與資源相關(guān)的選項(xiàng)和需求 |
四斥废、 http響應(yīng)格式
從服務(wù)器端到客戶器端的響應(yīng)信息椒楣,信息由4部分組成:狀態(tài)行给郊、消息報(bào)頭、空行捧灰、響應(yīng)正文淆九。
1. 狀態(tài)行
HTTP-1.1 Status-Code Reason-Phrase CRLF其中,HTTP-Version表示服務(wù)器HTTP協(xié)議的版本毛俏;Status-Code表示服務(wù)器發(fā)回的響應(yīng)狀態(tài)代碼炭庙;Reason-Phrase表示狀態(tài)代碼的文本描述。
例如:HTTP/1.1 200 OK \r\n
狀態(tài)碼
當(dāng)瀏覽者訪問一個(gè)網(wǎng)頁時(shí)煌寇,瀏覽者的瀏覽器會(huì)向網(wǎng)頁所在服務(wù)器發(fā)出請(qǐng)求焕蹄。當(dāng)瀏覽器接收并顯示網(wǎng)頁前,此網(wǎng)頁所在的服務(wù)器會(huì)返回一個(gè)包含HTTP狀態(tài)碼的信息頭(server header)用以響應(yīng)瀏覽器的請(qǐng)求阀溶。
HTTP狀態(tài)碼的英文為HTTP Status Code腻脏。
下面是常見的HTTP狀態(tài)碼:
狀態(tài)碼 | 描述 |
---|---|
200 | 請(qǐng)求成功 |
301 | 資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL |
404 | 請(qǐng)求的資源(網(wǎng)頁等)不存在 |
500 | 內(nèi)部服務(wù)器錯(cuò)誤 |
HTTP狀態(tài)碼分類
HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型银锻,后兩個(gè)數(shù)字沒有分類的作用永品。HTTP狀態(tài)碼共分為5種類型:
狀態(tài)碼 | 解釋 |
---|---|
100-199 | 信息狀態(tài)碼,表示成功接收請(qǐng)求击纬,要求客戶端繼續(xù)提交下一次請(qǐng)求才能完成整個(gè)處理過程鼎姐。100(continue)繼續(xù)發(fā)送 |
200-299 | 成功狀態(tài)碼,表示成功接收請(qǐng)求并已完成整個(gè)處理過程,常用200(OK)成功接收 |
300-399 | 重定向狀態(tài)碼炕桨,例如饭尝,請(qǐng)求的資源已經(jīng)移動(dòng)一個(gè)新地址,常用302献宫、307和304 |
400-499 | 客戶端的請(qǐng)求有錯(cuò)誤芋肠,常用404(Not Found),403(Fobidden) |
500-599 | 服務(wù)器端出現(xiàn)錯(cuò)誤遵蚜,常用 500 |
HTTP狀態(tài)碼列表:
狀態(tài)碼 | 狀態(tài)碼英文名稱 | 中文描述 |
---|---|---|
100 | Continue | 繼續(xù)帖池。客戶端應(yīng)繼續(xù)其請(qǐng)求 |
101 | Switching Protocols | 切換協(xié)議。服務(wù)器根據(jù)客戶端的請(qǐng)求切換協(xié)議吭净。只能切換到更高級(jí)的協(xié)議睡汹,例如,切換到HTTP的新版本協(xié)議 |
200 | OK | 請(qǐng)求成功寂殉。一般用于GET與POST請(qǐng)求 |
201 | Created | 已創(chuàng)建囚巴。成功請(qǐng)求并創(chuàng)建了新的資源 |
202 | Accepted | 已接受。已經(jīng)接受請(qǐng)求友扰,但未處理完成 |
203 | Non-Authoritative Information | 非授權(quán)信息彤叉。請(qǐng)求成功。但返回的meta信息不在原始的服務(wù)器村怪,而是一個(gè)副本 |
204 | No Content | 無內(nèi)容秽浇。服務(wù)器成功處理,但未返回內(nèi)容甚负。在未更新網(wǎng)頁的情況下柬焕,可確保瀏覽器繼續(xù)顯示當(dāng)前文檔 |
205 | Reset Content | 重置內(nèi)容。服務(wù)器處理成功梭域,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖斑举。可通過此返回碼清除瀏覽器的表單域 |
206 | Partial Content | 部分內(nèi)容病涨。服務(wù)器成功處理了部分GET請(qǐng)求 |
300 | Multiple Choices | 多種選擇富玷。請(qǐng)求的資源可包括多個(gè)位置,相應(yīng)可返回一個(gè)資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇 |
301 | Moved Permanently | 永久移動(dòng)既穆。請(qǐng)求的資源已被永久的移動(dòng)到新URI赎懦,返回信息會(huì)包括新的URI,瀏覽器會(huì)自動(dòng)定向到新URI循衰。今后任何新的請(qǐng)求都應(yīng)使用新的URI代替 |
302 | Found | 臨時(shí)移動(dòng)铲敛。與301類似。但資源只是臨時(shí)被移動(dòng)会钝》ソ客戶端應(yīng)繼續(xù)使用原有URI |
303 | See Other | 查看其它地址工三。與301類似。使用GET和POST請(qǐng)求查看 |
304 | Not Modified | 未修改先鱼。所請(qǐng)求的資源未修改俭正,服務(wù)器返回此狀態(tài)碼時(shí),不會(huì)返回任何資源焙畔〉Ф粒客戶端通常會(huì)緩存訪問過的資源,通過提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源 |
305 | Use Proxy | 使用代理宏多。所請(qǐng)求的資源必須通過代理訪問 |
306 | Unused | 已經(jīng)被廢棄的HTTP狀態(tài)碼 |
307 | Temporary Redirect | 臨時(shí)重定向儿惫。與302類似。使用GET請(qǐng)求重定向 |
400 | Bad Request | 客戶端請(qǐng)求的語法錯(cuò)誤伸但,服務(wù)器無法理解 |
401 | Unauthorized | 請(qǐng)求要求用戶的身份認(rèn)證 |
402 | Payment Required | 保留肾请,將來使用 |
403 | Forbidden | 服務(wù)器理解請(qǐng)求客戶端的請(qǐng)求,但是拒絕執(zhí)行此請(qǐng)求 |
404 | Not Found | 服務(wù)器無法根據(jù)客戶端的請(qǐng)求找到資源(網(wǎng)頁)更胖。通過此代碼铛铁,網(wǎng)站設(shè)計(jì)人員可設(shè)置"您所請(qǐng)求的資源無法找到"的個(gè)性頁面 |
405 | Method Not Allowed | 客戶端請(qǐng)求中的方法被禁止 |
406 | Not Acceptable | 服務(wù)器無法根據(jù)客戶端請(qǐng)求的內(nèi)容特性完成請(qǐng)求 |
407 | Proxy Authentication Required | 請(qǐng)求要求代理的身份認(rèn)證,與401類似却妨,但請(qǐng)求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán) |
408 | Request Time-out | 服務(wù)器等待客戶端發(fā)送的請(qǐng)求時(shí)間過長饵逐,超時(shí) |
409 | Conflict | 服務(wù)器完成客戶端的 PUT 請(qǐng)求時(shí)可能返回此代碼,服務(wù)器處理請(qǐng)求時(shí)發(fā)生了沖突 |
410 | Gone | 客戶端請(qǐng)求的資源已經(jīng)不存在彪标。410不同于404倍权,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設(shè)計(jì)人員可通過301代碼指定資源的新位置 |
411 | Length Required | 服務(wù)器無法處理客戶端發(fā)送的不帶Content-Length的請(qǐng)求信息 |
412 | Precondition Failed | 客戶端請(qǐng)求信息的先決條件錯(cuò)誤 |
413 | Request Entity Too Large | 由于請(qǐng)求的實(shí)體過大捐下,服務(wù)器無法處理账锹,因此拒絕請(qǐng)求萌业。為防止客戶端的連續(xù)請(qǐng)求坷襟,服務(wù)器可能會(huì)關(guān)閉連接。如果只是服務(wù)器暫時(shí)無法處理生年,則會(huì)包含一個(gè)Retry-After的響應(yīng)信息 |
414 | Request-URI Too Large | 請(qǐng)求的URI過長(URI通常為網(wǎng)址)婴程,服務(wù)器無法處理 |
415 | Unsupported Media Type | 服務(wù)器無法處理請(qǐng)求附帶的媒體格式 |
416 | Requested range not satisfiable | 客戶端請(qǐng)求的范圍無效 |
417 | Expectation Failed | 服務(wù)器無法滿足Expect的請(qǐng)求頭信息 |
500 | Internal Server Error | 服務(wù)器內(nèi)部錯(cuò)誤,無法完成請(qǐng)求 |
501 | Not Implemented | 服務(wù)器不支持請(qǐng)求的功能抱婉,無法完成請(qǐng)求 |
502 | Bad Gateway | 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí)档叔,從遠(yuǎn)程服務(wù)器接收到了一個(gè)無效的響應(yīng) |
503 | Service Unavailable | 由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)的無法處理客戶端的請(qǐng)求蒸绩。延時(shí)的長度可包含在服務(wù)器的Retry-After頭信息中 |
504 | Gateway Time-out | 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器衙四,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請(qǐng)求 |
505 | HTTP Version not supported | 服務(wù)器不支持請(qǐng)求的HTTP協(xié)議的版本,無法完成處理 |
2. 消息報(bào)頭
服務(wù)器傳遞給客戶端用于說明服務(wù)器的一些信息患亿,以及將來繼續(xù)訪問該資源時(shí)的策略传蹈。
Location:Location響應(yīng)報(bào)頭域用于重定向接受者到一個(gè)新的位置押逼。
Server:Server響應(yīng)報(bào)頭域包含了服務(wù)器用來處理請(qǐng)求的軟件信息。?WWW-Authenticate:WWW-Authenticate響應(yīng)報(bào)頭域必須被包含在401(未授權(quán)的)響應(yīng)消息中下面是WWW-Authenticate響應(yīng)報(bào)頭域的一個(gè)惦界,例子:WWW-Authenticate: Basic realm="Basic Auth Test!“
Content-Encoding:Content-Encoding實(shí)體報(bào)頭域被使用作媒體類型的修飾符.
Content-Language:Content-Language實(shí)體報(bào)頭域描述了資源所用的自然語言挑格。
Content-Length: Content-Length實(shí)體報(bào)頭域用于指明正文的長度.
Content-Type:Content-Type實(shí)體報(bào)頭域用語指明發(fā)送給接收者的實(shí)體正文的媒體類型。
Last-Modified:Last-Modified實(shí)體報(bào)頭域用于指示資源最后的修改日期及時(shí)間沾歪。
Expires: Expires實(shí)體報(bào)頭域給出響應(yīng)過期的日期和時(shí)間漂彤。
Expires實(shí)體報(bào)頭域使用的日期和時(shí)間必須是RFC 1123中的日期格式,例如:?Expires: Thu, 15 Sep 2005 16:00:00 GMT
3. 響應(yīng)正文
服務(wù)端返回給客戶端的HTML文本內(nèi)容灾搏,或者其他格式的數(shù)據(jù)挫望,比如:視頻流、圖片或者音頻數(shù)據(jù)狂窑。
如果請(qǐng)求的是HTML頁面士骤,那么返回的就是HTML代碼。如果是JS就是JS代碼蕾域。
4. http協(xié)議的各版本
版本號(hào) | 詳情 |
---|---|
HTTP/0.9 | 只接受GET一種請(qǐng)求方法拷肌,沒有在通信中指定版本號(hào),且不支持請(qǐng)求頭旨巷。由于該版本不支持POST方法巨缘,因此客戶端無法向服務(wù)器傳遞太多信息。 |
HTTP/1.0 | 第一個(gè)在通信中指定的版本號(hào)采呐,至今被廣泛采用若锁,特別是在代理服務(wù)器中。 |
HTTP/1.1 | 當(dāng)前版本號(hào)斧吐,持久連接被默認(rèn)采用又固,并能很好地配合代理服務(wù)器工作。還支持以管道方式在同時(shí)發(fā)送多個(gè)請(qǐng)求煤率,以便降低線路負(fù)載仰冠,提高傳輸速度。 |
HTTP/2.0 | 為了解決1.1版本利用率不高的問題蝶糯,提出了HTTP/2.0版本洋只。增加雙工模式,增加服務(wù)器推送的功能 |
當(dāng)前主流的協(xié)議版本還是HTTP/1.1版本昼捍。
HTTP/1.1與HTTP/1.0的區(qū)別
1识虚、persistent connection(持久連接)
HTTP/1.0中,每對(duì)請(qǐng)求/ 響應(yīng)都使用一個(gè)新的連接妒茬。
HTTP/1.1則支持持久連接(默認(rèn))担锤。
2、Host域
HTTP/1.1在請(qǐng)求消息頭多一個(gè)Host域乍钻;HTTP/1.0 則沒有這個(gè)域肛循,建立TCP連接的時(shí)候已經(jīng)指定了IP地址蛛株,而且默認(rèn)一個(gè)IP地址只對(duì)應(yīng)一個(gè)主機(jī)名,IP地址上只有一個(gè)host育拨。
3谨履、.帶寬優(yōu)化
HTTP/1.1加入了一個(gè)新的狀態(tài)碼100(Continue)“旧ィ客戶端事先發(fā)送一個(gè)只帶頭域的請(qǐng)求笋粟,如果服務(wù)器因?yàn)闄?quán)限拒絕了請(qǐng)求,就回送響應(yīng)碼 401(Unauthorized)
4析蝴、請(qǐng)求方法和狀態(tài)碼
HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT這些Request方法害捕。
在HTTP/1.1中新增了24個(gè)狀態(tài)響應(yīng)碼,如409(Conflict)表示請(qǐng)求的資源與資源的當(dāng)前狀態(tài)發(fā)生沖突闷畸;410(Gone)表示服務(wù)器上的某個(gè)資源被永久性的刪除尝盼。