【HTTP全解】淺析 URL

內容提要:php

  1. URL 包含哪幾部分,每部分分別有什麼做用
  2. DNS 的做用是什麼,nslookup 命令怎麼用
  3. IP 的做用是什麼,ping 命令怎麼用
  4. 域名是什麼,分別哪幾類域名

URL(Uniform Resource Locator)的組成部分

傳輸協議+ 域名或IP+ 端口號 + 路徑+ 查詢字符串+ 錨點

eg.html

https://www.baidu.com/swd=hello&rsv_spt=1#5git

傳輸協議+ 域名或IP+ 端口號 +路徑+ 查詢字符串+ 錨點

eg.github

https://www.baidu.com/swd=hello&rsv_spt=1#5面試

  • 傳輸協議( scheme: [protocal] ):httphttpsftp
  • 域名( [//authority] Domain Name ):www.baidu.com
  • 端口( :Port ):一般省略,:80:443:8080等(http 大部分默認80, https默認443)
[//authority] = [userinfo@]host[:port]
  • 路徑( Path to the file):/s
  • 查詢參數([?query] Parameters ):wd=hello&rsv_spt=1或者?key1=value1&key2=value2
  • 錨點( [#fragment] Anchor ):#5

另外一個常見的 URL(URI) 的例子:segmentfault

https://zh.wikipedia.org/w/index.php?title=Special:隨機頁面#5後端

  • https:協議
  • zh.wikipedia.org:域名
  • /w/index.php:路徑(不一樣的頁面)
  • ?title=Special:隨機頁面:查詢參數(相同頁面,不一樣內容)
  • #5:錨點(相同頁面,相同內容,不一樣位置)

其中若不寫端口號,則表示使用 https 對應的默認端口號 443瀏覽器

localhost:8080服務器

DNS(Domain Name System):域名系統

做用:根據域名查出IP地址網絡

即:將域名解析爲IP 地址

nslookup可查詢IP(DNS)地址

直接使用能夠查詢到域名的 A 記錄

nslookup 命令用於查詢 DNS 的記錄,查看域名解析是否正常,在網絡故障的時候用來診斷網絡問題
# nslookup + 域名
nslookup domain [dns-server]
nslookup xmasuhai.xyz

IP的做用,ping 命令用法

  • 一是定位一臺設備
  • 二是封裝數據報文跟其餘設備交流

ping命令是經常使用的網絡命令,它一般用來測試與目標主機的連通性。

即:

  • 標識主機,具體地說,標識其網絡接口,而且提供主機在網絡中的位置,就此提供建立到達該主機的路徑的能力。
  • 每一個 IP 數據包的標頭包含了發送主機的 IP 地址和目的主機的 IP 地址。
# ping [參數][主機名或ip地址]
ping baidu.com

域名(Domain Name)

是互聯網的一項服務,主要用於域名與 IP 地址的相互轉換

若是要訪問一個地址(使用域名),都要先經過DNS查詢域名對應的IP地址,才能進行訪問

域名分類

域名分頂級域名,二級域名和三級域名

好比對於www.baidu.com

  1. 頂級域名:com
  2. 二級域名:baidu.com
  3. 三級域名:www.baidu.com
域名的第一級是頂級域,它包括通用頂級域, 例如.com、.net 和.org

以及國家和地區頂級域,例如.us、.cn和.tk

完整域名的全部字符加起來不得超過 253 個 ASCII 字符的總長度。

當每一級都使用單個字符時,限制爲 127 個級別:127 個字符加上 126 個點的總長度爲 253。

但實際上,某些域名可能具備其餘限制;也沒有隻有一個字符的域名後綴。


內容提要卐,後面是視頻記錄流水帳


問:hosts 文件在哪?

答: 在 Windows 系統中,hosts 位於C:\Windows\System32\drivers\etc\hosts

在 macOS / Linux系統中,hosts 位於/etc/hosts

網絡和 IP

李爵士的發明

WWW=URL+HTTP+HTML

HyperText Transfer Protocol協議

IP:Internet Protocol

IP(Internet Protocol)主要約定

1.如何定位一臺設備 2.如何封裝數據報文(用來和其餘設備交流)

互聯網(not WWW),至少一個獨特的IP

IP份內網和外網

設備 路由器 電信DNS服務器 其餘用戶

獲取外網IP 買 | 蹭

  • 首先,你須要租用寬帶(電信或者聯通)
  • 其次,你須要購買一個路由器(有時候也被叫作「網關」)
  • 當路由器鏈接上電信或者聯通的服務器後,路由器就會得到一個外網的IP,全部經過路由器鏈接的設備,他們的外網IP都是一致的。
  • 注意:若是當你重啓路由器以後,可能會被分配一個新的外網IP,也就是說,路由器是沒有一個固定的外網IP,除非高價買,企業級須要

內網IP

  • 路由器建立內網,內網中的設備使用內網IP,格式192.168.xxx.xxx192.168.1.1
  • 路由再給每個內網中的設備(PC、手機)分配一個不一樣的內網IP
  • 內網的全部設備都有一個相同的外網IP
  • 路由器會爲每個內網中的設備分配一個不一樣的內網IP

內網IP固定

查看IP

ping xxx.com
ipconfig

查看ip38.com

路由器的功能

  1. 路由器有兩個IP,內外各一
  2. 內網中的設備可互相訪問,但不可直接訪問外網
  3. 內網設備經過路由器中轉,訪問外網
  4. 外網設備沒法訪問你的內網,無論直接間接
  5. 外網把內容推送到內網,必須經過路由
  6. 內外隔絕,路由是惟一聯通點,即網關

幾個特殊的IP

  1. 127.0.0.1表示本身
  2. localhost經過hosts指定爲本身
  3. 0.0.0.0不表示任何設備,後端用

端口

一臺機子可提供不少服務,每一個服務一個號碼,即端口號 port

不一樣的服務

  1. 提供HTTP服務,最好使用80端口
  2. 提供HTTPS服務,最好443端口
  3. 一共有65535個端口,FTP是21端口
  4. 該用什麼端口:端口對應的服務列表wiki

其餘使用規則

  1. 0到1023(2的10次方減1,計1024個)號端口,留給系統使用,本身使用須取得管理權限
  2. http-server默認使用8080端口
  3. 一個端口被佔用時,只能換另外一個
總之,IP和端口缺一不可

域名、路徑、查詢參數、錨點

qq.comt.tt

域名:對IP的別稱

ping baidu.com

#將獲得四個回覆(win),mac 需ctrl+c中斷
baidu.com對應 ping baidu.comqq.com對應 ping qq.com

知識點

  • 一個域名能夠對應不一樣IP,即均衡負載,分流,防止一臺機子扛不住,或者惡意的D-Dos攻擊,網站優化策略
  • 一個IP可對應不一樣域名,即窮開發者的共享主機

域名和IP,怎麼對應起來?

  • 經過DNS

當你輸入xiedaimala.com

Chrome開發者工具中,Network面板,xiedaimala.com點擊,Headers裏,請求根目錄https://xiedaimala.com/

獲得響應Response 一串HTML代碼,請求CSS,請求圖片,請求js等

過程

客戶端向DNS服務器(DNS服務器有本身的IP地址)發送域名查詢請求

DNS服務器告知客戶機Web服務器的IP地址

  • 提供DNS的服務器的服務商:電信或聯通等
  • 瀏覽器向提供DNS的服務器詢問xiedaimala.com對應什麼IP
  • 服務器回答一個IP(具體過程三次握手、四次握手,面試必問)
  • 請求內容是查看這個網址的網頁

eg.xiedaimala.com的首頁index.html

why80443端口

  • 服務器默認用80提供http服務
  • 服務器默認用443提供https服務
  • 在開發者工具查看具體端口
  • 不須要寫在地址欄裏,寫了也幫你消掉

nslookup

nslookup -qt=[type] domain [dns-server]

type能夠是:

  • A 地址記錄
  • AAAA 地址記錄(IPv6)
  • CNAME 別名記錄
  • HINFO 硬件配置記錄,包括 CPU、操做系統信息 等

詢問域名,域名ns,尋找lookup

nslookup baidu.com

默認自動設置 電信DNS114.114.114.114備用114.114.115.115

題外話

www

  • A:www.xiedaimala.com和B:xiedaimala.com不是同一個域名
  • com(沒有點)是頂級域名
  • xiedaimala.com是二級域名(俗稱一級域名)
  • www.xiedaimala.com是三級域名(俗稱二級)
  • 祖父子關係
  • github.io把子域名xxx.github.io免費給你使用
  • A和B能夠不是同一家公司
  • www是多餘的,歷史殘留,脫x子放*

如何請求不一樣的頁面

用路徑
工具

使用Chrome開發者工具Network面板查看區別

同一個頁面,不一樣內容

用查詢參數:https://xxx.com/s?wd=hello

同一個內容(頁面),不一樣位置

用錨點
錨點就是文檔內部的定位

注意:

  • 錨點看起來有中文,實際不支持中文
  • #參考書會變成#%E5%8F%82%E8%80%83%E4%B9%A6
  • 錨點不會傳給服務器,因此是沒法在Network面板裏看到的

URL

統一資源定位符(Uniform Resource Locator),簡稱URL,是因特網上標準的資源的地址(Address)

Every HTTPURLconforms to the syntax of a genericURI.

每一個有效的 URI 都指向一個獨特的資源。這個資源能夠是一個 HTML 頁面,一個 CSS 文檔,一幅圖像、視頻、郵件、PDF等

The URI generic syntax consists of a hierarchical sequence of five components

  • URI = scheme:[//authority]path[?query][#fragment]
  • -authority = [userinfo@]host[:port]

wiki:URL

組成

傳輸協議+ 域名或IP+ 端口號 + 路徑+ 查詢字符串+_錨點_

eg.

https://www.baidu.com/swd=hello&rsv_spt=1#5

**www.baidu.com**是域名。 代表正在請求哪一個 Web 服務器。或者,能夠直接使用 IP address, 但由於不便,因此不常使用。

就算沒寫,也應知道端口,HTTPS默認端口443,一般省略

/path/to/index.html是網絡服務器上資源的路徑,路徑表示訪問哪一個網頁

ftp://是文件傳輸協議,不屬於www,本地或局域網

wd=hello&rsv_spt=1?key1=value1&key2=value2是提供給網絡服務器的額外參數。 這些參數是用 & 符號分隔的鍵/值對列表。

wd=hello&rsv_spt=1查詢字符串表示頁面的展現內容,第幾部分,第幾章,第幾頁,或者查詢關鍵詞

在返回資源以前,Web服務器可使用這些參數來執行額外的操做。

#Anchor#SomewhereInTheDocument是資源自己的另外一部分的錨點。

錨點表示資源中的一種「書籤」,給瀏覽器顯示位於該「加書籤」位置的內容的方向。 例如, 在 HTML 文檔上,瀏覽器將滾動到定義錨點的位置

在視頻或音頻文檔上,瀏覽器將嘗試轉到錨表明的時間

#後面的部分(也稱爲片斷標識符)[fragment]歷來沒有發送到請求的服務器

錨點會被瀏覽器‘吃掉’,錨點只和瀏覽器有關,不必發送給服務器

服務器沒法接收#以後的內容,參數,不想被扣年終bonus的記住

HTTP協議

基於TCPIP兩個協議:也稱TCP/IP

curl 命令

curl能夠發HTTP請求

  • curl https://xiedaimala.com
  • curl -v http://baidu.com
  • curl -v -- http://baidu.com
-v:verbose 囉嗦模式

理解如下概念

  • url會被curl工具重寫,先請求DNS得到IP
  • 先進行TCP鏈接,TCP鏈接成功後,開始發送HTTP請求
  • 請求內容看一眼
  • 相應內容看一眼
  • 響應結束後,關閉TCP鏈接(看不出來)
  • 真正結束
規定請求的格式是什麼,響應式格式是什麼

·未完待續·


參考文章

相關文章


相關文章
相關標籤/搜索