請求和響應

Yjjtt發表於2018-12-11

WWW的發明

1989年-1992年, Tim Berners-Lee(李爵士), 發明了WWW(World Wide Web), 一種適用於全世界的網路, 其次還發明瞭第一個伺服器, 第一個瀏覽器, 第一個網頁, 發明了網際網路的雛形

主要包含以下三個概念:

  1. URL, 俗稱網址(還有URI, URN)
  2. HTTP, 兩個電腦直接傳輸內容的協議
  3. HTML, 超級文字, 用來做頁面跳轉

URL的作用是能讓你訪問一個頁面, HTTP的作用是讓你能下載這個頁面, HTML的作用是讓你能看懂這個頁面

URL

一個URL通常由以下幾部分組成, 其實還有個埠,只是瀏覽器給隱藏掉了,預設是80埠

請求和響應

baidu.comwww.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請求的內容

  1. GET / HTTP/1.1 : GET代表動詞(GET, POST, PUT,DELETE , PATCH, HEAD, OPTIONS); /代表路徑,當網址後面加上絕對路徑時會顯示,不加則顯示/;HTTP/1.1代表協議/版本
  2. 第二部分是圖中所有的key:value, 2-5行都是
  3. 第三部分是回車
  4. 第四部分為空

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請求的響應內容

  1. 第一部分: HTTP/1.1 協議/版本, 200狀態碼, OK狀態解釋
  2. 第二部分: key:value
  3. 第三部分: 回車
  4. 第四部分: 要下載的內容,百度首頁的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為例

  1. Chrome瀏覽器輸入www.baidu.com訪問
  2. 右鍵檢查,選擇NetWork,重新整理頁面
  3. 選中第一個響應
  4. 檢視Headers中的Request Headers, 點選view source

請求和響應

  1. 如上圖可以看到請求的三部分

  2. 如果有請求的第四部分,那麼在 FormData 或 Payload 裡面可以看到

使用Chrome檢視GET請求的響應

同樣以www.baidu.com為例

  1. Chrome瀏覽器輸入www.baidu.com訪問
  2. 右鍵檢查,選擇NetWork,重新整理頁面
  3. 選中第一個響應
  4. 檢視Headers中的Response Headers, 點選view source

請求和響應

  1. 如上圖可以看到響應的三部分

使用Chrome發POST請求

同樣以www.baidu.com為例, 需要先退出百度賬號的登入,然後進行登入, 因為登入是POST的請求

  1. 登入之前先選中NetWork的Preserve log, 防止頁面更新,看不到POST請求

請求和響應

  1. 登入, 選中?login的響應
  2. 檢視對應的請求和響應

請求和響應

相關文章