WWW的發明
1989年-1992年, Tim Berners-Lee(李爵士), 發明了WWW(World Wide Web), 一種適用於全世界的網路, 其次還發明瞭第一個伺服器, 第一個瀏覽器, 第一個網頁, 發明了網際網路的雛形
主要包含以下三個概念:
- URL, 俗稱網址(還有URI, URN)
- HTTP, 兩個電腦直接傳輸內容的協議
- HTML, 超級文字, 用來做頁面跳轉
URL的作用是能讓你訪問一個頁面, HTTP的作用是讓你能下載這個頁面, HTML的作用是讓你能看懂這個頁面
URL
一個URL通常由以下幾部分組成, 其實還有個埠,只是瀏覽器給隱藏掉了,預設是80埠
baidu.com 和 www.baidu.com 不是同一個域名, 但是都有同一個二級域名
.com 是頂級域名, baidu 是二級域名, www 是三級域名
DNS
Domain(域) Name(名) System(系統)
- 輸入域名
訪問域名: 我問路由, 然後路由去問電信該域名的ip是多少, ip是會變的, 因為百度的伺服器有幾萬臺.
- 輸出IP
電信會幫你解析該域名的ip, 幫你解析的伺服器就是DNS伺服器
DNS伺服器會儲存資源, 例如主機記錄, 別名記錄, IP主機記錄等
請求與響應
- Server : 伺服器,也就是你的電腦。
- Client :客戶端,也就是你的瀏覽器。
- HTTP :伺服器和瀏覽器之間通訊的協議,指導如何進行溝通。
- 瀏覽器負責發起請求
- 伺服器在80埠接收請求
- 伺服器負責返回內容(響應)
- 瀏覽器負責下載響應內容
curl請求的使用
curl是 一個利用URL規則在命令列下工作的檔案傳輸工具。它支援檔案的上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱url為下載工具。
列舉幾種常用的帶引數的curl命令
curl "http://example.com" -o filename # 將下載的內容寫到檔案中 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 用於列印更多資訊,包括髮送的請求資訊,這在除錯指令碼是特別有用;
# -H 自定義header頭資訊傳遞給伺服器, 新增響應頭
# GET 請求
curl -d 'name=yjjtt' "http://example.com/filename" # -d data,POST請求傳遞資料
curl -X POST -d 'name=yjjtt' "http://example.com/filename" # -X 指定POST request, -d data
# 其他的自行google linux curl就好了
複製程式碼
curl 請求
- 請求最多包含四部分, 最少包含三部分, 第四部分可以為空, 第四部分是要上傳的資料
- 第三部分永遠是一個回車
- 第一部分的路徑不包含錨點, 如果沒有寫路徑預設為/
- 第二部分的Content-Type標註了第四部分的格式
具體參照下面的例子來分析:
GET
命令列輸入該命令,curl -s -v -H "yjjtt: xxx" -- "https://www.baidu.com"
上圖就是curl請求的內容
- GET / HTTP/1.1 :
GET
代表動詞(GET, POST, PUT,DELETE , PATCH, HEAD, OPTIONS);/
代表路徑,當網址後面加上絕對路徑時會顯示,不加則顯示/
;HTTP/1.1
代表協議/版本 - 第二部分是圖中所有的key:value, 2-5行都是
- 第三部分是回車
- 第四部分為空
POST
命令列輸入該命令,curl -X POST -s -v -H "yjjtt: xxx" -- "https://www.baidu.com"
- GET和POST的請求格式一樣
請求的格式
1 動詞 路徑 協議/版本
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 要上傳的資料
curl響應
- 響應包含四部分, 第四部分為要下載的內容, 可以很長很長
- 狀態碼要背, 是伺服器對瀏覽器說的話
200 普通成功 204 建立成功 301 滾 永久不存在 location會告訴新地址 302 臨時不存在 404 頁面不存在, 瀏覽器錯誤 502 伺服器錯誤 server taskcenter start/stop
- 第二部分的Content-Type 標註了第四部分的格式
- 第 2 部分中的 Content-Type 遵循 MIME 規範
GET
上圖就是GET請求的響應內容
- 第一部分:
HTTP/1.1
協議/版本,200
狀態碼,OK
狀態解釋 - 第二部分: key:value
- 第三部分: 回車
- 第四部分: 要下載的內容,百度首頁的HTML, 由第二部分的Content-Type決定, 如果將第二部分Content-Type的value改成
text/htlm
,將會報錯
POST
上圖出現302 狀態碼, 是因為百度首頁不支援POST, 所以第五部分會返回很抱歉,您要訪問的頁面不存在!
- GET和POST請求對應的響應可以一樣,也可以不一樣
- 響應的第四部分很長很長
響應的格式
1 協議/版本 狀態碼 狀態解釋
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 要下載的內容
使用Chrome發GET請求
以www.baidu.com為例
- Chrome瀏覽器輸入www.baidu.com訪問
- 右鍵檢查,選擇NetWork,重新整理頁面
- 選中第一個響應
- 檢視Headers中的Request Headers, 點選view source
-
如上圖可以看到請求的三部分
-
如果有請求的第四部分,那麼在 FormData 或 Payload 裡面可以看到
使用Chrome檢視GET請求的響應
同樣以www.baidu.com為例
- Chrome瀏覽器輸入www.baidu.com訪問
- 右鍵檢查,選擇NetWork,重新整理頁面
- 選中第一個響應
- 檢視Headers中的Response Headers, 點選view source
- 如上圖可以看到響應的三部分
使用Chrome發POST請求
同樣以www.baidu.com為例, 需要先退出百度賬號的登入,然後進行登入, 因為登入是POST的請求
- 登入之前先選中NetWork的Preserve log, 防止頁面更新,看不到POST請求
- 登入, 選中?login的響應
- 檢視對應的請求和響應