HTTP粗略入門小白篇

目錄

  1. HTTP簡(jiǎn)述
  2. URL
  3. HTTP 請(qǐng)求
    • 格式
    • GET 請(qǐng)求
    • POST 請(qǐng)求
    • GET 和 POST 的區(qū)別
    • 用 Chrome 發(fā)請(qǐng)求
  4. HTTP 響應(yīng)
    • 格式
    • 用 Chrome 查看響應(yīng)
  5. URI 和 URL 的區(qū)別
  6. 總結(jié)

HTTP 簡(jiǎn)述

HTTP 協(xié)議铛铁,即超文本傳輸協(xié)議(HyperText Transfer Protocol),是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議苹粟。HTTP是萬維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ)荒勇。

HTTP 本身是Tim Berners-Lee發(fā)明的萬維網(wǎng)中重要三個(gè)概念之一墨技,即URL警没,HTTP刑然,HTML。
其中愉粤,

  • URL砾医,俗稱網(wǎng)址
  • HTTP,兩個(gè)電腦之間傳輸內(nèi)容的協(xié)議
  • HTML衣厘,超級(jí)文本如蚜,主要用來做頁面跳轉(zhuǎn)

通俗地講,URL 的作用是能讓你訪問一個(gè)頁面影暴,HTTP 的作用是讓你能下載這個(gè)頁面错邦,HTML 的作用是讓你能看懂這個(gè)頁面。
通常坤检,由HTTP客戶端發(fā)起一個(gè)請(qǐng)求兴猩,創(chuàng)建一個(gè)到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接。HTTP服務(wù)器則在那個(gè)端口監(jiān)聽客戶端的請(qǐng)求早歇。一旦收到請(qǐng)求倾芝,服務(wù)器會(huì)向客戶端返回一個(gè)狀態(tài),比如"HTTP/1.1 200 OK"箭跳,以及返回的內(nèi)容晨另,如請(qǐng)求的文件、錯(cuò)誤消息谱姓、或者其它信息借尿。

URL

了解HTTP之前,需要了解下 URL屉来。

url是統(tǒng)一資源定位符路翻,是對(duì)可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡(jiǎn)潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址茄靠。

這里主要了解它的結(jié)構(gòu)茂契。比如:

https://www.baidu.com/s?wd=Jay#6
  • https://: 超文本傳輸安全協(xié)議
  • www.baidu.com: 域名
  • /s: 路徑
  • ?wd=Jay: 查詢參數(shù)
  • #6: 錨點(diǎn)

HTTP 請(qǐng)求

HTTP/1.1 協(xié)議中定義了多種請(qǐng)求方法,包括 GET慨绳,POST掉冶,GET,PUT脐雪,PATCH厌小, DELETE,HEAD战秋,OPTIONS 等璧亚,這里只介紹最常見的 GET 和 POST 請(qǐng)求。

格式

請(qǐng)求方法 路徑 協(xié)議/版本
Key1: value1
Key2: value2
Key3: value3
Content-Length: n
Content-Type: application/x-www-form-urlencoded
Host: www.example.com
User-Agent: curl/7.56.0

要上傳的數(shù)據(jù)

  • 第一行是第一部分:請(qǐng)求行
    請(qǐng)求方法就是前面提到的那幾種脂信,常用GET涨岁,POST(思考它們的區(qū)別)拐袜。這里的路徑包括「查詢參數(shù)」吉嚣,但不包括「錨點(diǎn)」梢薪。如果你沒有寫路徑,那么路徑默認(rèn)為 / 尝哆。
  • 第二行直到回車是第二部分:請(qǐng)求報(bào)頭
    請(qǐng)求報(bào)頭包含客戶端向服務(wù)器傳遞請(qǐng)求的附加信息和客戶端自身的信息秉撇,由關(guān)鍵字/值對(duì)組成,每行一對(duì)秋泄,關(guān)鍵字和值用英文冒號(hào) : 分隔琐馆。
    常見的請(qǐng)求報(bào)頭有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent 等。
  • 第三部分永遠(yuǎn)都是一個(gè)回車(\n)
  • 回車后的內(nèi)容是第四部分:請(qǐng)求正文
    當(dāng)使用 POST恒序、PUT 等方法時(shí)瘦麸,通常需要客戶端向服務(wù)器傳遞數(shù)據(jù)。這些數(shù)據(jù)就儲(chǔ)存在請(qǐng)求正文中歧胁。請(qǐng)求正文可以承載多個(gè)請(qǐng)求參數(shù)的數(shù)據(jù)滋饲,包含回車符、換行符和請(qǐng)求數(shù)據(jù)喊巍,并不是所有請(qǐng)求都具有請(qǐng)求數(shù)據(jù)(也就是說第四部分可以為空)屠缭。
    在請(qǐng)求包頭中有一些與請(qǐng)求正文相關(guān)的信息,例如:現(xiàn)在的 Web 應(yīng)用通常采用 Rest 架構(gòu)崭参,請(qǐng)求的數(shù)據(jù)格式一般為 json呵曹。這時(shí)就需要設(shè)置 Content-Type: application/json

GET 請(qǐng)求

這里先介紹一個(gè)工具 curl何暮。

curl命令

curl是一個(gè)利用URL規(guī)則在命令行下工作的文件傳輸工具奄喂,可以說是一款很強(qiáng)大的http命令行工具。它支持文件的上傳和下載海洼,是綜合傳輸工具跨新,但按傳統(tǒng),習(xí)慣稱url為下載工具贰军。

它可以很直觀地將你要訪問的網(wǎng)站的請(qǐng)求和響應(yīng)表示出來玻蝌,這里我們以訪問國(guó)內(nèi)最大同性交友網(wǎng)站 bilibili 為例。

curl -s -v -H "key: value" -- "https://www.bilibili.com"

如上词疼,

  • -s:不要顯示進(jìn)度
  • -v:顯示一次的http請(qǐng)求的通信過程俯树,去掉的話只返回HTML文檔,沒有請(qǐng)求和響應(yīng)
  • -H:添加后面的內(nèi)容到請(qǐng)求頭贰盗,來自定義Header许饿,里面的內(nèi)容任意,比如:"Referer: www.example.com"
  • 這是一個(gè) GET 請(qǐng)求

我們將會(huì)得到如下結(jié)果舵盈。先是顯示內(nèi)容的頭部陋率,HTML文件太大沒截全圖:

顯示內(nèi)容的尾部:

POST請(qǐng)求

當(dāng)需要發(fā)送表單數(shù)據(jù)到服務(wù)器時(shí)球化,可以用POST請(qǐng)求。

curl -X POST -d "title=xxx&text=yyy" www.example.com/add
  • -X:指定發(fā)送數(shù)據(jù)的方式瓦糟,這里是POST
  • curl 默認(rèn)以 application/x-www-form-urlencoded 作為 Content-Type 來發(fā)送數(shù)據(jù)

那么會(huì)相應(yīng)地返回結(jié)果如下:

POST / HTTP/1.1
Host: www.examle.com/add
User-Agent: curl/7.56.0
Accept: */*
Content-Length: 18
Content-Type: application/x-www-form-urlencoded

title=xxx&text=yyy

GET 和 POST 的區(qū)別

get 和 post 雖然本質(zhì)都是 tcp/ip筒愚,但兩者除了在 http 層面外,在 tcp/ip 層面也有區(qū)別菩浙。

get 會(huì)產(chǎn)生一個(gè) tcp 數(shù)據(jù)包巢掺,post 兩個(gè)。具體就是:

  • get 請(qǐng)求時(shí)劲蜻,瀏覽器會(huì)把 headers 和 data 一起發(fā)送出去陆淀,服務(wù)器響應(yīng) 200(返回?cái)?shù)據(jù))
  • post 請(qǐng)求時(shí),瀏覽器先發(fā)送 headers先嬉,服務(wù)器響應(yīng) 100 continue轧苫, 瀏覽器再發(fā)送 data,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù))

用 Chrome 發(fā)請(qǐng)求

  1. 按 F12 進(jìn)入開發(fā)者模式
  2. 打開 Network
  3. 地址欄輸入網(wǎng)址
  4. 在 Network 點(diǎn)擊疫蔓,查看 request含懊,點(diǎn)擊「view source」
  5. 如果有請(qǐng)求的第四部分,那么在 FormData 或 Payload 里面可以看到

HTTP 響應(yīng)

在上面訪問bilibili的例子中鳄袍,顯示末尾的一部分就是服務(wù)器的響應(yīng):

GET響應(yīng)

再加上前面很長(zhǎng)的那個(gè)HTML文件绢要,一起組成了HTTP響應(yīng)的結(jié)構(gòu)。

格式

協(xié)議/版本號(hào) 狀態(tài)碼 狀態(tài)解釋
Key1: value1
Key2: value2
Content-Length: n
Content-Type: text/html

要下載的內(nèi)容

可以看到拗小,響應(yīng)的格式和請(qǐng)求格式基本一致重罪。
狀態(tài)碼是服務(wù)器對(duì)瀏覽器說的話,可以粗暴地如下來記憶:

1xx 表示server說:我知道了哀九,你繼續(xù)
2xx 表示成功
3xx 表示server說:滾吧
4xx 表示server說:你丫錯(cuò)了
5xx 表示server說:好吧剿配,我錯(cuò)了

一些常見的狀態(tài)碼:

200 OK                        //客戶端請(qǐng)求成功
400 Bad Request               //客戶端請(qǐng)求有語法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized              //請(qǐng)求未經(jīng)授權(quán)阅束,這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用 
403 Forbidden                 //服務(wù)器收到請(qǐng)求呼胚,但是拒絕提供服務(wù)
404 Not Found                 //請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error     //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
502 Bad Gateway               //作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí)息裸,從遠(yuǎn)程服務(wù)器接收到了一個(gè)無效的響應(yīng)
503 Server Unavailable        //服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求蝇更,一段時(shí)間后可能恢復(fù)正常

用 Chrome 查看響應(yīng)

  1. 按 F12 進(jìn)入開發(fā)者模式
  2. 打開 Network
  3. 輸入網(wǎng)址
  4. 選中第一個(gè)響應(yīng)
  5. 查看 Response Headers,點(diǎn)擊「view source」
  6. 查看 Response 或者 Preview呼盆,你會(huì)看到響應(yīng)的第 4 部分

Response

URI 和 URL 的區(qū)別

小插曲年扩,一圖蓋之:


URI & URL

總結(jié)

HTTP的知識(shí)對(duì)前端開發(fā)非常重要,這里只是淺談了一下HTTP的格式访圃、分類和一些狀態(tài)碼厨幻,等以后學(xué)習(xí)了HTTP更深入的知識(shí)再來填坑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市况脆,隨后出現(xiàn)的幾起案子饭宾,更是在濱河造成了極大的恐慌,老刑警劉巖格了,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件看铆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笆搓,警方通過查閱死者的電腦和手機(jī)性湿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來满败,“玉大人,你說我怎么就攤上這事叹括∷隳” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵汁雷,是天一觀的道長(zhǎng)净嘀。 經(jīng)常有香客問我,道長(zhǎng)侠讯,這世上最難降的妖魔是什么挖藏? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮厢漩,結(jié)果婚禮上膜眠,老公的妹妹穿的比我還像新娘。我一直安慰自己溜嗜,他們只是感情好宵膨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炸宵,像睡著了一般辟躏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上土全,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天捎琐,我揣著相機(jī)與錄音,去河邊找鬼裹匙。 笑死瑞凑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幻件。 我是一名探鬼主播拨黔,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起法绵,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤函喉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后麸塞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涧衙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年哪工,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弧哎。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雁比,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撤嫩,到底是詐尸還是另有隱情偎捎,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布序攘,位于F島的核電站茴她,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏程奠。R本人自食惡果不足惜丈牢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞄沙。 院中可真熱鬧己沛,春花似錦、人聲如沸帕识。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肮疗。三九已至晶姊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伪货,已是汗流浹背们衙。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碱呼,地道東北人蒙挑。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像愚臀,于是被迫代替她去往敵國(guó)和親忆蚀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • 前言:最近發(fā)現(xiàn)自己在網(wǎng)絡(luò)相關(guān)這一塊基礎(chǔ)很是欠缺,所以準(zhǔn)備花時(shí)間了解一下馋袜,本文主要是講http協(xié)議的一些基礎(chǔ)男旗,和一些...
    justCode_閱讀 2,094評(píng)論 0 23
  • 作者:滌生_Woo鏈接:http://www.reibang.com/p/6e9e4156ece3 本篇文章篇幅...
    Fi的學(xué)習(xí)筆記閱讀 1,700評(píng)論 0 4
  • 當(dāng) app 和服務(wù)器進(jìn)行通信的時(shí)候察皇,大多數(shù)情況下,都是采用 HTTP 協(xié)議泽台。HTTP 最初是為 web 瀏覽器而定...
    Flysss1219閱讀 1,259評(píng)論 0 4
  • Web 頁面的實(shí)現(xiàn) Web 基于 HTTP 協(xié)議通信 客戶端(Client)的 Web 瀏覽器從 Web 服務(wù)器端...
    毛圈閱讀 1,079評(píng)論 0 2
  • 一個(gè)月前的某天在面點(diǎn)王吃完結(jié)賬時(shí)收銀小姐讓我掃碼辦卡當(dāng)次的付款就可以打折,具體打幾折忘記了,但覺得可以省10元也算...
    daisyaa閱讀 393評(píng)論 0 0