10.1 http與https
10.1.1 什么是超文本
1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法车荔,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標準架構的發(fā)展根基颂碘。
超文本是用超鏈接的方法洒试,將各種不同空間的文字信息組織在一起的網(wǎng)狀文本。超文本更是一種用戶界面范式球散,用以顯示文本及與文本之間相關的內(nèi)容。現(xiàn)時超文本普遍以電子文檔方式存在,其中的文字包含有可以鏈結到其他位置或者文檔的連結漫蛔,允許從當前閱讀位置直接切換到超文本連結所指向的位置。
10.1.2 http協(xié)議
HTTP(HyperText Transport Protocol)是超文本傳輸協(xié)議的縮寫旧蛾,它用于傳送WWW方式的數(shù)據(jù)莽龟。
超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議锨天。所有的WWW文件都必須遵守這個標準毯盈。設計HTTP最初的目的
是為了提供一種發(fā)布和接收HTML頁面的方法。
10.1.3 http與https基本概念
HTTP:是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議病袄,是一個客戶端和服務器端請求和應答的標準(TCP)搂赋,用于從WWW服務器傳輸超文本到本地瀏覽器的傳輸協(xié)議,它可以使瀏覽器更加高效益缠,使網(wǎng)絡傳輸減少脑奠。
HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版幅慌,即HTTP下加入SSL(Secure Sockets Layer)層宋欺,HTTPS的安全基礎是SSL,因此加密的詳細內(nèi)容就需要SSL欠痴。
HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個信息安全通道迄靠,來保證數(shù)據(jù)傳輸?shù)陌踩涣硪环N就是確認網(wǎng)站的真實性喇辽。
10.1.4 http與https的區(qū)別
簡單來說掌挚,HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議菩咨,要比http協(xié)議安全吠式。區(qū)別主要如下:
1、https協(xié)議需要到ca申請證書抽米,一般免費證書較少特占,因而需要一定費用。
2云茸、http是超文本傳輸協(xié)議是目,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議标捺。
3懊纳、http和https使用的是完全不同的連接方式揉抵,用的默認端口也不一樣,前者是80嗤疯,后者是443冤今。
4、http的連接很簡單茂缚,是無狀態(tài)的戏罢;HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議脚囊,比http協(xié)議安全龟糕。
10.2 http請求的組成
從客戶端到服務器端的請求消息,信息由4部分組成請求行凑术、消息報頭翩蘸、空行、請求正文
10.2.1 請求行(請求方法URI協(xié)議/版本)
請求的第一行是“方法URI協(xié)議/版本”例如:GET/sample.jsp HTTP/1.1
以上代碼中“GET”代表請求方法淮逊,“/sample.jsp”表示URI催首,“HTTP/1.1代表協(xié)議和協(xié)議的版本。
10.2.2 消息報頭(請求頭Request Header)
請求頭包含許多有關的客戶端環(huán)境和請求正文的有用信息泄鹏。例如郎任,請求頭可以聲明瀏覽器所用的語言,請求正文的長度等备籽。例如:
Accept:image/gif.image/jpeg./(請求的圖片內(nèi)容格式)
Accept-Language:zh-cn(zh-CN 是表示中文舶治,fr-FR 是表示法語。 這是RFC1766定義的語言表示方式)
Connection:Keep-Alive(又稱持久連接车猬、連接重用霉猛,Keep-Alive功能使客戶端到服務器端的連接持續(xù)有效,當出現(xiàn)對服務器的后繼請求時珠闰,Keep-Alive功能避免了建立或者重新建立連接惜浅。)
Host:localhost(主機名字)
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)(客戶端身份信息)
Accept-Encoding:gzip,deflate( 以壓縮格式接收請求數(shù)據(jù))
10.2.3 空行
必須有,發(fā)送回車符和換行符伏嗜,通知服務器以下不再有請求頭
10.2.4 請求正文(body)
請求頭和請求正文之間是一個空行坛悉,這個行非常重要,它表示請求頭已經(jīng)結束承绸,接下來的是請求正文裸影。請求正文中可以包含客戶提交的查詢字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP請求中,請求的正文只有一行內(nèi)容军熏。當然轩猩,在實際應用中,HTTP請求正文可以包含更多的內(nèi)容。
10.4 請求方法
請求方法 解釋
GET 請求獲取Request-URI所標識的資源
POST 在Request-URI所標識的資源后附加新的數(shù)據(jù)
HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭
PUT 請求服務器存儲一個資源界轩,并用Request-URI作為其標識
DELETE 請求服務器刪除Request-URI所標識的資源
TRACE 請求服務器回送收到的請求信息画饥,主要用于測試或診斷
CONNECT 保留將來使用
OPTIONS 請求查詢服務器的性能衔瓮,或者查詢與資源相關的選項和需求
10.5 http響應格式
從服務器端到客戶器端的響應信息浊猾,信息由4部分組成:狀態(tài)行、消息報頭热鞍、空行葫慎、響應正文。
10.5.1 狀態(tài)行
HTTP-1.1 Status-Code Reason-Phrase CRLF其中薇宠,HTTP-Version表示服務器HTTP協(xié)議的版本偷办;Status-Code表示服務器發(fā)回的響應狀態(tài)代碼;Reason-Phrase表示狀態(tài)代碼的文本描述澄港。
例如:HTTP/1.1 200 OK \r\n
狀態(tài)碼
當瀏覽者訪問一個網(wǎng)頁時椒涯,瀏覽者的瀏覽器會向網(wǎng)頁所在服務器發(fā)出請求。當瀏覽器接收并顯示網(wǎng)頁前回梧,此網(wǎng)頁所在的服務器會返回一個包含HTTP狀態(tài)碼的信息頭(server header)用以響應瀏覽器的請求废岂。
HTTP狀態(tài)碼的英文為HTTP Status Code。
下面是常見的HTTP狀態(tài)碼:
狀態(tài)碼 描述
200 請求成功
301 資源(網(wǎng)頁等)被永久轉移到其它URL
404 請求的資源(網(wǎng)頁等)不存在
500 內(nèi)部服務器錯誤
HTTP狀態(tài)碼分類
HTTP狀態(tài)碼由三個十進制數(shù)字組成狱意,第一個十進制數(shù)字定義了狀態(tài)碼的類型湖苞,后兩個數(shù)字沒有分類的作用。HTTP狀態(tài)碼共分為5種類型:
狀態(tài)碼 解釋
100-199 信息狀態(tài)碼详囤,表示成功接收請求财骨,要求客戶端繼續(xù)提交下一次請求才能完成整個處理過程。100(continue)繼續(xù)發(fā)送
200-299 成功狀態(tài)碼藏姐,表示成功接收請求并已完成整個處理過程隆箩,常用200(OK)成功接收
300-399 重定向狀態(tài)碼,例如羔杨,請求的資源已經(jīng)移動一個新地址捌臊,常用302、307和304
400-499 客戶端的請求有錯誤问畅,常用404(Not Found)娃属,403(Fobidden)
500-599 服務器端出現(xiàn)錯誤,常用 500
HTTP狀態(tài)碼列表:
<meta charset="utf-8">
狀態(tài)碼 | 狀態(tài)碼英文名稱 | 中文描述 |
---|---|---|
100 | Continue | 繼續(xù)护姆。客戶端應繼續(xù)其請求 |
101 | Switching Protocols | 切換協(xié)議矾端。服務器根據(jù)客戶端的請求切換協(xié)議。只能切換到更高級的協(xié)議卵皂,例如秩铆,切換到HTTP的新版本協(xié)議 |
200 | OK | 請求成功。一般用于GET與POST請求 |
201 | Created | 已創(chuàng)建。成功請求并創(chuàng)建了新的資源 |
202 | Accepted | 已接受殴玛。已經(jīng)接受請求捅膘,但未處理完成 |
203 | Non-Authoritative Information | 非授權信息。請求成功滚粟。但返回的meta信息不在原始的服務器寻仗,而是一個副本 |
204 | No Content | 無內(nèi)容。服務器成功處理凡壤,但未返回內(nèi)容署尤。在未更新網(wǎng)頁的情況下,可確保瀏覽器繼續(xù)顯示當前文檔 |
205 | Reset Content | 重置內(nèi)容亚侠。服務器處理成功曹体,用戶終端(例如:瀏覽器)應重置文檔視圖∠趵茫可通過此返回碼清除瀏覽器的表單域 |
206 | Partial Content | 部分內(nèi)容箕别。服務器成功處理了部分GET請求 |
300 | Multiple Choices | 多種選擇价涝。請求的資源可包括多個位置剂桥,相應可返回一個資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇 |
301 | Moved Permanently | 永久移動钾菊。請求的資源已被永久的移動到新URI瓦堵,返回信息會包括新的URI簇宽,瀏覽器會自動定向到新URI竖般。今后任何新的請求都應使用新的URI代替 |
302 | Found | 臨時移動飒赃。與301類似蜜托。但資源只是臨時被移動禾酱∥⒊辏客戶端應繼續(xù)使用原有URI |
303 | See Other | 查看其它地址。與301類似颤陶。使用GET和POST請求查看 |
304 | Not Modified | 未修改颗管。所請求的資源未修改,服務器返回此狀態(tài)碼時滓走,不會返回任何資源垦江。客戶端通常會緩存訪問過的資源搅方,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源 |
305 | Use Proxy | 使用代理比吭。所請求的資源必須通過代理訪問 |
306 | Unused | 已經(jīng)被廢棄的HTTP狀態(tài)碼 |
307 | Temporary Redirect | 臨時重定向。與302類似姨涡。使用GET請求重定向 |
400 | Bad Request | 客戶端請求的語法錯誤衩藤,服務器無法理解 |
401 | Unauthorized | 請求要求用戶的身份認證 |
402 | Payment Required | 保留,將來使用 |
403 | Forbidden | 服務器理解請求客戶端的請求涛漂,但是拒絕執(zhí)行此請求 |
404 | Not Found | 服務器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)赏表。通過此代碼检诗,網(wǎng)站設計人員可設置"您所請求的資源無法找到"的個性頁面 |
405 | Method Not Allowed | 客戶端請求中的方法被禁止 |
406 | Not Acceptable | 服務器無法根據(jù)客戶端請求的內(nèi)容特性完成請求 |
407 | Proxy Authentication Required | 請求要求代理的身份認證,與401類似瓢剿,但請求者應當使用代理進行授權 |
408 | Request Time-out | 服務器等待客戶端發(fā)送的請求時間過長逢慌,超時 |
409 | Conflict | 服務器完成客戶端的 PUT 請求時可能返回此代碼,服務器處理請求時發(fā)生了沖突 |
410 | Gone | 客戶端請求的資源已經(jīng)不存在间狂。410不同于404攻泼,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設計人員可通過301代碼指定資源的新位置 |
411 | Length Required | 服務器無法處理客戶端發(fā)送的不帶Content-Length的請求信息 |
412 | Precondition Failed | 客戶端請求信息的先決條件錯誤 |
413 | Request Entity Too Large | 由于請求的實體過大前标,服務器無法處理坠韩,因此拒絕請求。為防止客戶端的連續(xù)請求炼列,服務器可能會關閉連接。如果只是服務器暫時無法處理音比,則會包含一個Retry-After的響應信息 |
414 | Request-URI Too Large | 請求的URI過長(URI通常為網(wǎng)址)俭尖,服務器無法處理 |
415 | Unsupported Media Type | 服務器無法處理請求附帶的媒體格式 |
416 | Requested range not satisfiable | 客戶端請求的范圍無效 |
417 | Expectation Failed | 服務器無法滿足Expect的請求頭信息 |
500 | Internal Server Error | 服務器內(nèi)部錯誤,無法完成請求 |
501 | Not Implemented | 服務器不支持請求的功能洞翩,無法完成請求 |
502 | Bad Gateway | 作為網(wǎng)關或者代理工作的服務器嘗試執(zhí)行請求時稽犁,從遠程服務器接收到了一個無效的響應 |
503 | Service Unavailable | 由于超載或系統(tǒng)維護,服務器暫時的無法處理客戶端的請求骚亿。延時的長度可包含在服務器的Retry-After頭信息中 |
504 | Gateway Time-out | 充當網(wǎng)關或代理的服務器已亥,未及時從遠端服務器獲取請求 |
505 | HTTP Version not supported | 服務器不支持請求的HTTP協(xié)議的版本,無法完成處理 |
10.5.2 消息報頭
服務器傳遞給客戶端用于說明服務器的一些信息来屠,以及將來繼續(xù)訪問該資源時的策略虑椎。
Location:Location響應報頭域用于重定向接受者到一個新的位置。
Server:Server響應報頭域包含了服務器用來處理請求的軟件信息俱笛。?WWW-Authenticate:WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應消息中下面是WWW-Authenticate響應報頭域的一個捆姜,例子:WWW-Authenticate: Basic realm="Basic Auth Test!“
Content-Encoding:Content-Encoding實體報頭域被使用作媒體類型的修飾符.
Content-Language:Content-Language實體報頭域描述了資源所用的自然語言。
Content-Length: Content-Length實體報頭域用于指明正文的長度.
Content-Type:Content-Type實體報頭域用語指明發(fā)送給接收者的實體正文的媒體類型迎膜。
Last-Modified:Last-Modified實體報頭域用于指示資源最后的修改日期及時間泥技。
Expires: Expires實體報頭域給出響應過期的日期和時間。
10.5.3 響應正文
服務端返回給客戶端的HTML文本內(nèi)容磕仅,或者其他格式的數(shù)據(jù)珊豹,比如:視頻流、圖片或者音頻數(shù)據(jù)榕订。
如果請求的是HTML頁面店茶,那么返回的就是HTML代碼。如果是JS就是JS代碼卸亮。
10.4 http協(xié)議的各版本
版本號 詳情
HTTP/0.9 只接受GET一種請求方法忽妒,沒有在通信中指定版本號,且不支持請求頭。由于該版本不支持POST方法段直,因此客戶端無法向服務器傳遞太多信息吃溅。
HTTP/1.0 第一個在通信中指定的版本號,至今被廣泛采用鸯檬,特別是在代理服務器中决侈。
HTTP/1.1 當前版本號,持久連接被默認采用喧务,并能很好地配合代理服務器工作赖歌。還支持以管道方式在同時發(fā)送多個請求,以便降低線路負載功茴,提高傳輸速度庐冯。
HTTP/2.0 為了解決1.1版本利用率不高的問題,提出了HTTP/2.0版本坎穿。增加雙工模式展父,增加服務器推送的功能
當前主流的協(xié)議版本還是HTTP/1.1版本。
HTTP/1.1與HTTP/1.0的區(qū)別
1玲昧、persistent connection(持久連接)
HTTP/1.0中栖茉,每對請求/ 響應都使用一個新的連接。
HTTP/1.1則支持持久連接(默認)孵延。
2吕漂、Host域
HTTP/1.1在請求消息頭多一個Host域;HTTP/1.0 則沒有這個域尘应,建立TCP連接的時候已經(jīng)指定了IP地址惶凝,而且默認一個IP地址只對應一個主機名,IP地址上只有一個host菩收。
3梨睁、.帶寬優(yōu)化
HTTP/1.1加入了一個新的狀態(tài)碼100(Continue)∧榷客戶端事先發(fā)送一個只帶頭域的請求坡贺,如果服務器因為權限拒絕了請求,就回送響應碼 401(Unauthorized)
4箱舞、請求方法和狀態(tài)碼
HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT這些Request方法遍坟。
在HTTP/1.1中新增了24個狀態(tài)響應碼,如409(Conflict)表示請求的資源與資源的當前狀態(tài)發(fā)生沖突晴股;410(Gone)表示服務器上的某個資源被永久性的刪除愿伴。