HTTP協(xié)議

簡介

HTTP(HyperText Transfer Protocol)肾请,當前一直使用的譯法是超文本傳輸協(xié)議。應該算是當前最廣泛使用的一種網(wǎng)絡協(xié)議,現(xiàn)在人們上網(wǎng)都少不了使用瀏覽器瀏覽網(wǎng)頁,這里面使用的就是HTTP協(xié)議乡翅。

這里的Transfer是轉(zhuǎn)移,轉(zhuǎn)換的意思罪郊,不是傳輸?shù)囊馑既溲痢.斍暗淖g法是一個歷史遺留問題

發(fā)展史

HTTP協(xié)議更新還是比較慢的,也可以說明此協(xié)議還是比較穩(wěn)定的悔橄,這么多年只發(fā)布了1.0靶累、1.1腺毫、2.0三個版本。

  • 1989年3月Tim BernersLee博士提出的一種能讓遠隔兩地的研究者們共享知識的設想:借助多文檔之間相互關聯(lián)形成的超文本挣柬,連成可相互參閱的萬維網(wǎng)(World Wide Web, 簡稱WWW或者web)潮酒。
  • 1990年HTTP誕生,但是并沒有形成一種標準邪蛔,這時的HTTP被命名為HTTP/0.9
  • 1996年5月急黎,時隔六年之久才正式將HTTP做為一個標準公布,命名為HTTP/1.0店溢,并記載于RFC1945叁熔。
  • 1997年1月公布了HTTP/1.1版本是目前使用最為主流的HTTP協(xié)議版本。在HTTP/1.0的基礎上增加了很多實用的特性床牧。記載于RFC2068荣回,后面又在RFC2626做了更新。
  • 2015年5月HTTP/2.0版本公布戈咳,并記載于RFC7540心软。此版本來源于谷歌的SPDY協(xié)議,主要目標是降低延遲著蛙。當前瀏覽器應該都已經(jīng)支持此版本删铃,但是使用最多的還是HTTP/1.1版本

特點

HTTP有很明顯的優(yōu)點,也有很明顯的缺點踏堡,所以現(xiàn)在單單使用HTTP協(xié)議的極少

  • 原理簡單猎唁。基于請求顷蟆、響應方式來完成通信诫隅。客戶端發(fā)出請求帐偎,服務端收到請求并處理返回響應信息逐纬。
  • 無連接。即每次連接只處理一個請求削樊,完成之后連接斷開豁生。在一開始很少人上網(wǎng)的時候是優(yōu)點,但是當前上網(wǎng)人太多的時候就是一個缺點了漫贞,像同時發(fā)送大量請求的時候會導致創(chuàng)建大量的連接甸箱,浪費計算機資源。這點已經(jīng)通過keepalive機制解決迅脐。
  • 無狀態(tài)芍殖。HTTP協(xié)議自身不對請求和響應之間的通信狀態(tài)進行保存。這對于一個需要用戶登錄驗證再操作的網(wǎng)站是一個災難性的優(yōu)點仪际,因為每發(fā)一個請求都需要用戶登錄一次围小,不過當前已經(jīng)通過cookie解決。
  • 安全性很差树碱,這個可以通過結(jié)合SSL/TLS協(xié)議解決肯适,即我們所說的HTTPS:
    1. 通信使用明文,內(nèi)容可以被竊聽成榜。
    2. 不驗證通信方的身份框舔,有可能遭遇偽裝。
    3. 無法證明報文的完整性赎婚,內(nèi)容有可能遭到篡改刘绣。

HTTP協(xié)議所處位置

HTTP是應用層協(xié)議底層使用的TCP/IP,如下圖:


http協(xié)議位置.jpg

HTTP報文

HTTP報文結(jié)構(gòu)包含首部和主體兩個部分挣输。根據(jù)HTTP的通信原理分為請求報文和響應報文


請求報文結(jié)構(gòu)jpg.jpg
響應報文結(jié)構(gòu)png.png

HTTP請求方法

主要是為了告知服務端要做什么樣的操作纬凤。HTTP/1.1中可用的有:

  • GET: 獲取資源
  • POST: 傳輸實體主體
  • PUT: 傳輸文件,因安全性差一般不開啟
  • DELETE: 刪除文件
  • HEAD: 獲取報文首部
  • OPTIONS: 詢問支持的方法
  • TRACE: 追蹤路徑

PUT和POST是爭議最大的兩個方法撩嚼,這兩個方法都可以實現(xiàn)創(chuàng)建資源以及修改資源的目的停士,取決于設計實現(xiàn)。兩者最主要的區(qū)別是PUT具有冪等性完丽,而POST的具有恋技。一般來講都是使用PUT創(chuàng)建或者覆蓋資源,而使用POST修改資源逻族。

HTTP首部

HTTP首部由很多字段構(gòu)成蜻底,每個字段由字段名和字段值構(gòu)成,中間以":"分隔聘鳞。字段值可以有多個以","分隔薄辅。每個字段值還可以設置屬性以“;”分隔,q=[0,1]表示權(quán)重(即權(quán)重取值0到1搁痛,默認為1长搀,越大權(quán)重越大)。
Accept-Language:zh-CN,zh;q=0.9

注意:當HTTP首部中出現(xiàn)了多個字段名一樣的字段時鸡典,規(guī)范未做明確規(guī)定源请。所以結(jié)果也未可知,所以最好不要出現(xiàn)這種情況 彻况。

4種HTTP首部

  1. 通用首部字段
    請求報文和響應報文都會使用的字段谁尸。
    常見的有:

    • Connection: 控制不在轉(zhuǎn)發(fā)給代理的首部字段和管理持久連接
      Connection:close關閉連接
      Connection:Keep-AliveHTTP/1.0版本實現(xiàn)長連接的方法
    • Upgrade:用于檢測HTTP協(xié)議及其他協(xié)議是否可以使用更改版本進行通信,其參數(shù)值可以用來指定一個完全不同的通信協(xié)議纽甘,像WebSocket協(xié)議良蛮,就可以使用下面方法:
      Connection: Upgrade
      Upgrade: websocket
      
  2. 請求首部
    從客戶端向服務端發(fā)送請求時使用的首部。補充請求的附加內(nèi)容悍赢、客戶端信息决瞳、響應內(nèi)容相關優(yōu)先級等货徙。
    常見的有:

    • Accept: 用戶代碼可處理的媒體類型
    • Accept-Charset: 優(yōu)先處理的字符集
    • Accept-Encoding: 優(yōu)先的內(nèi)容編碼
    • Accept-Language: 優(yōu)先的語言(中文、英文等自然語言)
    • Host:請求資源所在服務器
    accept:text/plain, */*; q=0.01
    accept-encoding:gzip, deflate, br
    accept-language:zh-CN,zh;q=0.9
    
  3. 響應首部
    從服務端向客戶端返回報文時使用的首部皮胡。補充了響應的附加內(nèi)容痴颊。
    常見的有:

    • Location: 令客戶端重定向到指定的URI
    • Retry-After: 對再次發(fā)起請求的時機要求
    • Server: HTTP服務器的安裝信息
  4. 實體首部
    針對請求報文和響應報文的實體部分使用的首部。補充了與實體資源有關的信息屡贺。
    常用的有:

    • Content-Type: 實體主體的媒體類型
    • Content-Length: 實體主體的大小蠢棱,單位字節(jié)
    • Content-Language: 實體主體的自然語言
    • Content-Encoding: 實體主體適用的編碼方式
    • Expires: 實體主體過期時間
    • Last-Modified: 資源的最后修改時間
    content-length:5
    content-type:text/html; charset=utf-8
    

HTTP狀態(tài)碼

狀態(tài)碼主要是描述服務端對請求處理的返回結(jié)果。
狀態(tài)碼類別

狀態(tài)碼 類別 描述 常用
1XX Informational(信息性狀態(tài)碼) 接收的請求正在處理
2XX Success(成功狀態(tài)碼) 請求正常處理完畢 200 OK,204 No Content,206 Partial Content
3XX Redirection(重定向狀態(tài)碼) 需求進行附加操作以完成 301 Moved Permanently, 302 Found, 303 See Other, 304 Not Modified, 307 Temporary Redirect
4XX Client Error(客戶端錯誤碼) 服務器無法處理請求 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5XX Server Error(服務端錯誤碼) 服務器處理請求出錯 500 Internal Server Error, 503 Service Unavailable
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甩栈,一起剝皮案震驚了整個濱河市泻仙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌量没,老刑警劉巖玉转,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異允蜈,居然都是意外死亡冤吨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門饶套,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漩蟆,“玉大人,你說我怎么就攤上這事妓蛮〉±睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵蛤克,是天一觀的道長捺癞。 經(jīng)常有香客問我,道長构挤,這世上最難降的妖魔是什么髓介? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮筋现,結(jié)果婚禮上唐础,老公的妹妹穿的比我還像新娘。我一直安慰自己矾飞,他們只是感情好一膨,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洒沦,像睡著了一般豹绪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上申眼,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天瞒津,我揣著相機與錄音蝉衣,去河邊找鬼。 笑死巷蚪,一個胖子當著我的面吹牛买乃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钓辆,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肴焊!你這毒婦竟也來了前联?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤娶眷,失蹤者是張志新(化名)和其女友劉穎似嗤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體届宠,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡烁落,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了豌注。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伤塌。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轧铁,靈堂內(nèi)的尸體忽然破棺而出每聪,到底是詐尸還是另有隱情,我是刑警寧澤齿风,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布药薯,位于F島的核電站,受9級特大地震影響救斑,放射性物質(zhì)發(fā)生泄漏童本。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一脸候、第九天 我趴在偏房一處隱蔽的房頂上張望穷娱。 院中可真熱鬧,春花似錦纪他、人聲如沸鄙煤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梯刚。三九已至,卻和暖如春薪寓,著一層夾襖步出監(jiān)牢的瞬間亡资,已是汗流浹背澜共。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锥腻,地道東北人嗦董。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像瘦黑,于是被迫代替她去往敵國和親京革。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

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