歷史
互聯(lián)網(wǎng)其實早就有了嚎莉,出現(xiàn)的時間大概是20世紀50-60年代,不過當時互聯(lián)網(wǎng)只用于科研機構(gòu)和軍事方面动壤。
1965年萝喘,Email被發(fā)明出來,在當時看來是一個和牛逼的應用琼懊,人們不需要在寫信阁簸,不需要郵遞員,一個信息可以瞬間發(fā)給一個千里以外的人哼丈。
1970年-1975年启妹,Email被廣泛使用,人們通過ftp下載Email里面的內(nèi)容
1980年-1990年醉旦,人們迫切需要一種更好的上網(wǎng)方式饶米,當時提出了很多方案,比如HTTP车胡,Gopher檬输,后來因為HTTP簡單易用,勝出了匈棘,從那以后我們就開始使用HTTP協(xié)議進行上網(wǎng)了丧慈。
1989年-1992年期間,Tim Berners-Lee主卫,發(fā)明了萬維網(wǎng)WWW(world wide web),一種適應全世界的網(wǎng)絡逃默。
WWW里面主要包含3個東西
1.URI??
2.HTTP協(xié)議
3.HTML
URI
URI的全稱是 UniformResourceIdentifier 中文是?統(tǒng)一資源標識符。
URI 分為 URL 和 URN簇搅,我們一般使用 URL 作為網(wǎng)址完域。
URN:通過 URN 你可以確定一個「唯一的」資源。
百度的解釋:標識持久性Internet資源姿现。URN 可以提供一種機制肠仪,用于查找和檢索定義特定命名空間的架構(gòu)文件。盡管普通的URL可以提供類似的功能建钥,但是在這方面藤韵,URN 更加強大并且更容易管理,因為 URN 可以引用多個 URL熊经。
有點抽象泽艘,我的理解是URN就是一個身份證,它對于我們每個人(資源)來說都是唯一的镐依。
URL:統(tǒng)一資源定位符
百度解釋:統(tǒng)一資源定位符是對可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡潔的表示匹涮,是互聯(lián)網(wǎng)上標準資源的地址』笨牵互聯(lián)網(wǎng)上的每個文件都有一個唯一的URL然低,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它。
我的理解是,它類似一個地址雳攘,它可以定位一個資源某個時間點在那里带兜。比如我上班的時候,我(資源)的位置就是公司吨灭,但是我(資源)下班我就回家了刚照,就不在公司,所以說url是定位符喧兄,它不是唯一的无畔。
URL的組成:
其實還有端口80沒寫,但為了方便吠冤,我們一般不寫80端口號浑彰,除了一些特殊的端口號,要寫
http://www.baidu.com??
.com是頂級域名? baidu是二級域名 www是三級域名
HTTP
超文本傳輸協(xié)議(HTTP拯辙,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議郭变。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法薄风。1960年美國人Ted Nelson構(gòu)思了一種通過計算機處理文本信息的方法饵较,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標準架構(gòu)的發(fā)展根基。Ted Nelson組織協(xié)調(diào)萬維網(wǎng)協(xié)會(World Wide Web Consortium)和互聯(lián)網(wǎng)工程工作小組(Internet Engineering Task Force )共同合作研究遭赂,最終發(fā)布了一系列的RFC循诉,其中著名的RFC 2616定義了HTTP 1.1。
上面是百度的解釋 撇他,我的理解是HTTP協(xié)議茄猫,就是教客戶端和服務器 ,這兩臺電腦怎么傳輸(對話)的
HTML
服務器接受到客戶端瀏覽器的一個請求困肩,會給客戶端機子一個響應划纽,這個響應就是HTML,瀏覽器接收到這個響應锌畸,然后翻譯出來給我們看勇劣。所以HTML就是讓我們可以讀懂一個頁面的東西
總結(jié):URI是讓我們可以訪問一個頁面,HTTP是教服務器和客戶端怎么對話潭枣,HTML是讓我們可以讀懂一個頁面比默。
Lee除了發(fā)明了這三樣東西,還動手做了世界上第一個服務器盆犁,第一個瀏覽器命咐,和第一個網(wǎng)頁(info.cern.ch)據(jù)說這個網(wǎng)頁現(xiàn)在都還可以訪問。
DNS
DNS(Domain Name System谐岁,域名系統(tǒng))醋奠,因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫榛臼,能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機器直接讀取的IP數(shù)串窜司。通過主機名沛善,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協(xié)議運行在UDP協(xié)議之上例证,使用端口號53路呜。在RFC文檔中RFC 2181對DNS有規(guī)范說明迷捧,RFC 2136對DNS的動態(tài)更新進行說明织咧,RFC 2308對DNS查詢的反向緩存進行說明。
我的理解是漠秋,DNS就是一個服務器笙蒙,因為我們一般上網(wǎng)都是輸入域名(因為域名好記啊)庆锦,但是實際上我們要訪問的服務器是一個IP捅位,DNS服務器的作用就是把我們輸入的域名翻譯成對應的IP,讓我們能訪問服務器搂抒。
當我們輸入一個url(網(wǎng)址)按下回車的時候發(fā)生了什么艇搀?
1.先在瀏覽器緩存里面找對應的ip,如果找不到求晶,就在本地dns找對應的ip焰雕,如果還找不到,就到電信/聯(lián)通的服務器(DNS服務器)找對應的ip
2.得到對應的ip
3.往Server(服務器)發(fā)送一個請求 芳杏,并且由80端口接受
4.Server(服務器)收到請求矩屁,并且做出響應了,給Client(客戶)發(fā)送了一個HTML格式的文件
5.Client(客戶)的瀏覽器下載HTML格式的文件爵赵,并由瀏覽器把html翻譯出來
6.網(wǎng)頁呈現(xiàn)出來
Server(服務器) + Client(客戶) + HTTP(協(xié)議:告訴服務器和客戶怎么說話)
Server(服務器)
1.上面有很多端口吝秕,每個端口只做一件事。(0-2048)都是制定了做某些事情的空幻,比如21是做ftp的烁峭,443是做https端口,1080是代理端口秕铛,80是http端口
Client(客戶)
1.發(fā)起請求 2.下載服務器返回的內(nèi)容约郁,并翻譯出來,展現(xiàn)頁面
HTTP(協(xié)議)
告訴服務器和客戶怎么說話
請求的事例
在gitbash里面輸入下面的命令
curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"? ?//向百度發(fā)送一個請求?
請求的內(nèi)容為
GET / HTTP/1.1? ?//GET是獲得的意思? ? /表示根目錄? ?HTTP協(xié)議類型? ?1.1 是協(xié)議的版本
翻譯: 獲得 根目錄 用的是HTTP協(xié)議 版本是1.1
Host: www.baidu.com? ?Host的意思是主機 如捅,
翻譯:我訪問的主機是www.baidu.com
User-Agent: curl/7.54.0
翻譯:我用的軟件是curl? 版本好是7.54.0
Accept: */*
翻譯:我接受你返回給我的任何東西
Frank: xxx? //這個沒意義棍现,無視就行了?
響應的內(nèi)容
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive < Content-Length: 2443? ? //? ?響應的大小
< Content-Type: text/html? ? //? ? 響應的類型
< Date: Sun, 26 Nov 2017 10:40:22 GMT
< Etag: "58860421-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:49 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
GET 獲取內(nèi)容? ?
POST 上傳內(nèi)容 登陸某網(wǎng)站的時候
PUT 更新 整體更新
PATCH 更新 局部更新
Delete 刪除
一般發(fā)情命令的請求就是這些? POST是在輸入賬號密碼的時候用的 ,如圖
POST命令是在輸入賬號密碼登陸時候镜遣,發(fā)出的請求己肮,這時候我們看請求士袄,GET變成了POST,F(xiàn)rom Data里面就是我們上傳到系統(tǒng)的字符串(賬號和密碼)谎僻。
請求的格式
1 動詞 路徑 協(xié)議/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
?4 要上傳的數(shù)據(jù)
請求最多包含四部分娄柳,最少包含三部分。(也就是說第四部分可以為空)
第三部分永遠都是一個回車(\n)
動詞有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
這里的路徑包括「查詢參數(shù)」艘绍,但不包括「錨點」
如果你沒有寫路徑赤拒,那么路徑默認為 /
第 2 部分中的 Content-Type 標注了第 4 部分的格式
響應的格式
1 協(xié)議/版本號 狀態(tài)碼 狀態(tài)解釋
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下載的內(nèi)容
格式跟請求的格式差不多。第3部門用于都是回車诱鞠,第4部分就是服務器返給你的內(nèi)容挎挖,內(nèi)容的大小和類型,在第二部里面由說明航夺。
狀態(tài)碼一般是要背的蕉朵,常見的由下面幾種
狀態(tài)碼要背,是服務器對瀏覽器說的話
1xx 不常用
2xx 表示成功
3xx 表示滾吧
4xx 表示你丫錯了
5xx 表示好吧阳掐,我錯了
用 Chrome 查看響應
打開 Network
輸入網(wǎng)址
選中第一個響應
查看 Response Headers始衅,點擊「view source」,點擊「view source」缭保,點擊「view source」
你會看到響應的前兩部分
查看 Response 或者 Preview汛闸,你會看到響應的第 4 部分