6.入門:HTTP入門

什么是HTTP?

在Web應用中,服務器把網(wǎng)頁傳給瀏覽器,實際上就是把網(wǎng)頁的HTML代碼發(fā)送給瀏覽器,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協(xié)議是HTTP,所以:

  • HTML是超文本標記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用于創(chuàng)建網(wǎng)頁的標準標記語言,會HTML,就可以編寫網(wǎng)頁;
  • HTTP是在網(wǎng)絡上傳輸HTML的協(xié)議,所以叫做超文本傳輸協(xié)議,用于瀏覽器和服務器的通信。

請求與響應

服務器與瀏覽器的交互
  • 瀏覽器負責發(fā)起請求
  • 服務器在 80 端口接收請求
  • 服務器負責返回內容(響應)
  • 瀏覽器負責下載響應內容
    HTTP 的作用就是指導瀏覽器和服務器如何進行溝通。

curl 命令

curl是一種命令行工具,作用是發(fā)出網(wǎng)絡請求,然后得到和提取數(shù)據(jù),顯示在"標準輸出"(stdout)上面。

  • 語法
    $ curl [option] [url]
  • 常見參數(shù)
  1. 如果要把這個網(wǎng)頁保存下來,可以使用-o參數(shù),這就相當于使用wget命令了。
    $ curl -o [文件名] [url]
  2. 有的網(wǎng)址是自動跳轉的。使用-L參數(shù),curl就會跳轉到新的網(wǎng)址。
    $ curl -L [url]
  3. -i參數(shù)可以顯示http response的頭信息,連同網(wǎng)頁代碼一起。
    $ curl -i [url]
  4. -v參數(shù)可以顯示一次http通信的整個過程,包括端口連接和http request頭信息。
    $ curl -v [url]
  5. curl默認的HTTP動詞是GET,使用-X參數(shù)可以支持其他動詞。
    $ curl -X POST [url]
    $ curl -X DELETE [url]
  6. 發(fā)送表單信息
    -發(fā)送表單信息有GET和POST兩種方法。GET方法相對簡單,只要把數(shù)據(jù)附在網(wǎng)址后面就行。
    $ curl example.com/form.cgi?data=xxx
    -POST方法必須把數(shù)據(jù)和網(wǎng)址分開,curl就要用到--data參數(shù)。
    $ curl -X POST --data "data=xxx" example.com/form.cgi

請求示例

curl -s -v -H "Agmaps: xxx" -- "https://www.baidu.com"

用 curl 創(chuàng)造一個請求,并得到響應

  • 請求的內容為
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.59.0
Accept: */*
Agmaps: xxx

curl -X POST -s -v -H "Agmaps: xxx" -- "Agmaps://www.baidu.com"

  • 請求的內容為
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.59.0
Accept: */*
Agmaps: xxx

curl -X POST -d "Agmaps" -s -v -H "Agmaps: xxx" -- "https://www.baidu.com"

  • 請求的內容為
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.59.0
Accept: */*
Agmaps: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded

Agmaps

請求格式

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.59.0
3 
4 要上傳的數(shù)據(jù)
  1. 請求最多包含四部分,最少包含三部分。(也就是說第四部分可以為空)
  2. 第三部分永遠都是一個回車(\n)
  3. 動詞有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
  4. 這里的路徑包括「查詢參數(shù)」,但不包括「錨點」
  5. 如果你沒有寫路徑,那么路徑默認為 /
  6. 第 2 部分中的 Content-Type 標注了第 4 部分的格式

用 Chrome 發(fā)請求

  1. 打開 Network
  2. 地址欄輸入網(wǎng)址
  3. 在 Network 點擊,查看 request,點擊「view source」
  4. 點擊「view source」
  5. 點擊「view source」
  6. 點擊「view source」
  7. 點了?可以看到請求的前三部分了
  8. 如果有請求的第四部分,那么在 FormData 或 Payload 里面可以看到

響應示例

上面三個請求示例,前兩個請求對應的響應分別為

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: Tue, 22 May 2018 12:31:38 GMT
Etag: "588603ec-98b"
Last-Modified: Mon, 23 Jan 2017 13:23:56 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

<!DOCTYPE html>
<!--STATUS OK--><html> <head> 后面太長,省略了……
HTTP/1.1 302 Found
Connection: Keep-Alive
Content-Length: 17931
Content-Type: text/html
Date: Tue, 22 May 2018 12:31:38 GMT
Etag: "54d9749e-460b"
Server: bfe/1.0.8.18

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> 后面太長,省略了……
  1. GET 請求和 POST 請求對應的響應可以一樣,也可以不一樣
  2. 響應的第四部分可以很長很長很長

響應格式

1 協(xié)議/版本號 狀態(tài)碼 狀態(tài)解釋
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下載的內容

  • 狀態(tài)碼詳見HTTP狀態(tài)碼-維基百科,是服務器對瀏覽器說的話
  • 第 2 部分中的 Content-Type 標注了第 4 部分的格式
  • 第 2 部分中的 Content-Type 遵循 MIME 規(guī)范

用 Chrome 查看響應

  1. 打開 Network
  2. 輸入網(wǎng)址
  3. 選中第一個響應
  4. 查看 Response Headers,點擊「view source」,點擊「view source」,點擊「view source」
  5. 你會看到響應的前兩部分
  6. 查看 Response 或者 Preview,你會看到響應的第 4 部分
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容