WWW的發(fā)明
1989年-1992年, Tim Berners-Lee(李爵士), 發(fā)明了WWW(World Wide Web), 一種適用于全世界的網(wǎng)絡(luò), 其次還發(fā)明了第一個服務(wù)器, 第一個瀏覽器, 第一個網(wǎng)頁, 發(fā)明了互聯(lián)網(wǎng)的雛形
主要包含以下三個概念:
- URL, 俗稱網(wǎng)址(還有URI, URN)
- HTTP, 兩個電腦直接傳輸內(nèi)容的協(xié)議
- HTML, 超級文本, 用來做頁面跳轉(zhuǎn)
URL的作用是能讓你訪問一個頁面, HTTP的作用是讓你能下載這個頁面, HTML的作用是讓你能看懂這個頁面
URL
一個URL通常由以下幾部分組成, 其實還有個端口,只是瀏覽器給隱藏掉了,默認是80端口
baidu.com 和 www.baidu.com 不是同一個域名, 但是都有同一個二級域名
.com 是頂級域名, baidu 是二級域名, www 是三級域名
DNS
Domain(域) Name(名) System(系統(tǒng))
- 輸入域名
訪問域名: 我問路由, 然后路由去問電信該域名的ip是多少, ip是會變的, 因為百度的服務(wù)器有幾萬臺.
- 輸出IP
電信會幫你解析該域名的ip, 幫你解析的服務(wù)器就是DNS服務(wù)器
DNS服務(wù)器會存儲資源, 例如主機記錄, 別名記錄, IP主機記錄等
請求與響應(yīng)
- Server : 服務(wù)器,也就是你的電腦鞋喇。
- Client :客戶端河劝,也就是你的瀏覽器。
- HTTP :服務(wù)器和瀏覽器之間通信的協(xié)議,指導(dǎo)如何進行溝通凌唬。
- 瀏覽器負責(zé)發(fā)起請求
- 服務(wù)器在80端口接收請求
- 服務(wù)器負責(zé)返回內(nèi)容(響應(yīng))
- 瀏覽器負責(zé)下載響應(yīng)內(nèi)容
curl請求的使用
curl是 一個利用URL規(guī)則在命令行下工作的文件傳輸工具缠劝。它支持文件的上傳和下載,所以是綜合傳輸工具平挑,但按傳統(tǒng)游添,習(xí)慣稱url為下載工具。
列舉幾種常用的帶參數(shù)的curl命令
curl "http://example.com" -o filename # 將下載的內(nèi)容寫到文件中 output
curl "http://example.com" > filename # 同上
curl -O "http://example.com/filename" # 下載文件(.jpg, .png等)通熄,并保留遠程文件名 remote-name
curl -L "http://example.com/filename" # Location redirects 重定向
curl -s -v -H -- "http://example.com/filename"
# -s 靜音模式唆涝,不顯示下載進度等其他的東西;
# -v verbose 用于打印更多信息唇辨,包括發(fā)送的請求信息廊酣,這在調(diào)試腳本是特別有用;
# -H 自定義header頭信息傳遞給服務(wù)器, 添加響應(yīng)頭
# GET 請求
curl -d 'name=yjjtt' "http://example.com/filename" # -d data赏枚,POST請求傳遞數(shù)據(jù)
curl -X POST -d 'name=yjjtt' "http://example.com/filename" # -X 指定POST request亡驰, -d data
# 其他的自行g(shù)oogle linux curl就好了
curl 請求
- 請求最多包含四部分, 最少包含三部分, 第四部分可以為空, 第四部分是要上傳的數(shù)據(jù)
- 第三部分永遠是一個回車
- 第一部分的路徑不包含錨點, 如果沒有寫路徑默認為/
- 第二部分的Content-Type標(biāo)注了第四部分的格式
具體參照下面的例子來分析:
GET
命令行輸入該命令,curl -s -v -H "yjjtt: xxx" -- "https://www.baidu.com"
上圖就是curl請求的內(nèi)容
- GET / HTTP/1.1 :
GET
代表動詞(GET, POST, PUT,DELETE , PATCH, HEAD, OPTIONS)饿幅;/
代表路徑凡辱,當(dāng)網(wǎng)址后面加上絕對路徑時會顯示,不加則顯示/
;HTTP/1.1
代表協(xié)議/版本 - 第二部分是圖中所有的key:value, 2-5行都是
- 第三部分是回車
- 第四部分為空
POST
命令行輸入該命令栗恩,curl -X POST -s -v -H "yjjtt: xxx" -- "https://www.baidu.com"
- GET和POST的請求格式一樣
請求的格式
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 /n回車
4 要上傳的數(shù)據(jù)
curl響應(yīng)
- 響應(yīng)包含四部分, 第四部分為要下載的內(nèi)容, 可以很長很長
- 狀態(tài)碼要背, 是服務(wù)器對瀏覽器說的話
200 普通成功 204 創(chuàng)建成功
301 滾 永久不存在 location會告訴新地址
302 臨時不存在
404 頁面不存在, 瀏覽器錯誤
502 服務(wù)器錯誤 server taskcenter start/stop
- 第二部分的Content-Type 標(biāo)注了第四部分的格式
- 第 2 部分中的 Content-Type 遵循 MIME 規(guī)范
GET
上圖就是GET請求的響應(yīng)內(nèi)容
- 第一部分:
HTTP/1.1
協(xié)議/版本,200
狀態(tài)碼,OK
狀態(tài)解釋 - 第二部分: key:value
- 第三部分: 回車
- 第四部分: 要下載的內(nèi)容,百度首頁的HTML, 由第二部分的Content-Type決定, 如果將第二部分Content-Type的value改成
text/htlm
,將會報錯
POST
上圖出現(xiàn)302 狀態(tài)碼, 是因為百度首頁不支持POST, 所以第五部分會返回很抱歉透乾,您要訪問的頁面不存在!
- GET和POST請求對應(yīng)的響應(yīng)可以一樣,也可以不一樣
- 響應(yīng)的第四部分很長很長
響應(yīng)的格式
1 協(xié)議/版本 狀態(tài)碼 狀態(tài)解釋
2 key1: value1
2 key2: value2
2 key3: value3
2 Content-type: text/html
2 Host: www.baidu.com
2 Content-Length: 17931
3 /n回車
4 要下載的內(nèi)容
使用Chrome發(fā)GET請求
- Chrome瀏覽器輸入www.baidu.com訪問
- 右鍵檢查,選擇NetWork,刷新頁面
- 選中第一個響應(yīng)
- 查看Headers中的Request Headers, 點擊view source
如上圖可以看到請求的三部分
如果有請求的第四部分磕秤,那么在 FormData 或 Payload 里面可以看到
使用Chrome查看GET請求的響應(yīng)
同樣以www.baidu.com為例
- Chrome瀏覽器輸入www.baidu.com訪問
- 右鍵檢查,選擇NetWork,刷新頁面
- 選中第一個響應(yīng)
- 查看Headers中的Response Headers, 點擊view source
- 如上圖可以看到響應(yīng)的三部分
使用Chrome發(fā)POST請求
同樣以www.baidu.com為例, 需要先退出百度賬號的登錄,然后進行登錄, 因為登錄是POST的請求
- 登錄之前先選中NetWork的Preserve log, 防止頁面更新,看不到POST請求
- 登錄, 選中?login的響應(yīng)
- 查看對應(yīng)的請求和響應(yīng)