HTTP入門

HTTP 請求包括哪些部分,如何用Chrome開發(fā)者工具查看 HTTP 請求內(nèi)容
HTTP 響應(yīng)包括哪些部分,如何用Chrome開發(fā)者工具查看 HTTP 響應(yīng)內(nèi)容
如何使用 curl 命令

訪問過程

超文本傳輸協(xié)議(Hypertext Transfer Protocol 縮寫:HTTP)是一種用于分布式。協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。HTTP是萬維網(wǎng)的數(shù)據(jù)通信基礎(chǔ)。設(shè)計HTTP最初目的是為了提供一種發(fā)布和接收HTML頁面的方法。通過HTTP或者HTTPS協(xié)議請求的資源由統(tǒng)一資源標(biāo)識符(Uniform Resource Identifiers URI)來標(biāo)識。

1.HTTP協(xié)議概述

HTTP是一個客服端和服務(wù)端之間請求和應(yīng)答的標(biāo)準(zhǔn),通常使用tcp協(xié)議通過使用網(wǎng)頁瀏覽器、網(wǎng)絡(luò)爬蟲或者其它的工具,客戶端發(fā)起一個HTTP請求到服務(wù)器上指定端口(默認(rèn)端口為80)。我們稱這個客戶端為用戶代理程序(user agent)。應(yīng)答的服務(wù)器上存儲著一些資源,比如HTML文件和圖像。我們稱這個應(yīng)答服務(wù)器為源服務(wù)器(origin server)。在用戶代理和源服務(wù)器中間可能存在多個“中間層”,比如代理服務(wù)器、網(wǎng)關(guān)或者隧道(tunnel)。

盡管TCP/IP協(xié)議是互聯(lián)網(wǎng)上最流行的應(yīng)用,但是在HTTP協(xié)議中并沒有規(guī)定必須使用它或它支持的層。事實(shí)上HTTP可以在任何互聯(lián)網(wǎng)協(xié)議或其他網(wǎng)絡(luò)上實(shí)現(xiàn)。HTTP假定其下層協(xié)議提供可靠的傳輸。因此,任何能夠提供這種保證的協(xié)議都可以被其使用,所以其在TCP/IP協(xié)議族使用TCP作為其傳輸層。

通常,由HTTP客戶端發(fā)起一個請求,創(chuàng)建一個到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接。HTTP服務(wù)器則在那個端口監(jiān)聽客戶端的請求。一旦收到請求,服務(wù)器會向客戶端返回一個狀態(tài),比如"HTTP/1.1 200 OK",以及返回的內(nèi)容,如請求的文件、錯誤消息、或者其它信息。

2.HTTP請求包括哪些部分,如何使用Chrome開發(fā)者工具查看HTTP請求部分。

HTTP的作用就是指導(dǎo)瀏覽器和服務(wù)器如何進(jìn)行溝通。

  • 瀏覽器負(fù)責(zé)發(fā)起請求
  • 服務(wù)器在80端口接受請求
  • 服務(wù)器負(fù)責(zé)返回內(nèi)容(響應(yīng))
  • 瀏覽器負(fù)責(zé)下載響應(yīng)內(nèi)容

2.1請求示例

curl -s -v -H "xxx: yyy" -- "https://www.baidu.com"
請求的內(nèi)容為
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: /
xxx: yyy

curl -X POST -s -v -H "xxx: yyy" -- "https://www.baidu.com"
請求的內(nèi)容為
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: /
xxx: yyy

curl -X POST -d "1234567890" -s -v -H "xxx: yyy" -- "https://www.baidu.com"
請求的內(nèi)容為
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: /
Frank: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded
空格
1234567890

2.2請求的格式

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
4 要上傳的數(shù)據(jù)

請求最多包含四部分,最少包含三部分。(也就是說第四部分可以為空)

  1. 第三部分永遠(yuǎn)都是一個回車
  2. 動詞有
  • GET 向制定的資源發(fā)出“顯示”請求。使用GET方法應(yīng)該只用在讀取數(shù)據(jù),
  • POST 上傳提交,向指定資源提交數(shù)據(jù),請求服務(wù)器處理(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求文本中,這個請求可能會創(chuàng)建或修改現(xiàn)有資源,或者二者皆有。
  • PUT 整體更新,向指定資源位置上傳其最新內(nèi)容。
  • PATCH 部分更新,用于局部修改應(yīng)用到資源。
  • DELETE 刪除,請求服務(wù)器刪除Request-URI所標(biāo)識的資源。
  • HEAD 獲取頭部信息,與GET方法一樣,都是向服務(wù)器發(fā)出指定資源的請求。只不過服務(wù)器將不傳回資源的本文部分。它的好處在于,使用這個方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲取其中“關(guān)于該資源的信息”(元信息或稱元數(shù)據(jù))。
    -OPTIONS 這個方法可使服務(wù)器傳回該資源所支持的所有HTTP請求方法。用'*'來代替資源名稱,向Web服務(wù)器發(fā)送OPTIONS請求,可以測試服務(wù)器功能是否正常運(yùn)作。
  1. 這里的路徑包括「查詢參數(shù)」,但不包括「錨點(diǎn)」
  2. 如果你沒有寫路徑,那么路徑默認(rèn)為 /
  3. 第 2 部分中的 Content-Type 標(biāo)注了第 4 部分的格式

2.3用Chrome查看請求

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

3.HTTP 響應(yīng)包括哪些部分,如何用Chrome開發(fā)者工具查看 HTTP 響應(yīng)內(nèi)容

請求了之后,應(yīng)該都能得到一個響應(yīng),除非斷網(wǎng)了,或者服務(wù)器宕機(jī)了。

3.1響應(yīng)示例

上面三個請求示例,前面兩個對應(yīng)的響應(yīng)分別為。

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, 10 Oct 2017 09:14:05 GMT
Etag: "5886041d-98b"
Last-Modified: Mon, 23 Jan 2017 13:24:45 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, 10 Oct 2017 09:19:47 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請求對應(yīng)的響應(yīng)可以一樣,也可以不一樣

  1. 響應(yīng)的第四部分可以很長很長

3.2響應(yīng)的格式

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

1.狀態(tài)碼是服務(wù)器對瀏覽器說的話

  • 1xx不常用
  • 2xx 表示成功
    • 200 普通成功get,求已成功,請求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回。實(shí)際的響應(yīng)將取決于所使用的請求方法。在GET請求中,響應(yīng)將包含與請求的資源相對應(yīng)的實(shí)體。在POST請求中,響應(yīng)將包含描述或操作結(jié)果的實(shí)體。
    • 204 創(chuàng)建成功post,服務(wù)器成功處理了請求,沒有返回任何內(nèi)容。
  • 3xx 表示滾吧,重定向 這類狀態(tài)碼代表需要客戶端采取進(jìn)一步的操作才能完成請求。通常,這些狀態(tài)碼用來重定向,后續(xù)的請求地址(重定向目標(biāo))在本次響應(yīng)的Location域中指明。
    • 301 永久的搬走了給個location,被請求的資源已永久移動到新位置,并且將來任何對此資源的引用都應(yīng)該使用本響應(yīng)返回的若干個URI之一。如果可能,擁有鏈接編輯功能的客戶端應(yīng)當(dāng)自動把請求的地址修改為從服務(wù)器反饋回來的地址。
    • 302 外出了過幾天才會回來,臨時不存在,要求客戶端執(zhí)行臨時重定向(原始描述短語為“Moved Temporarily”)。
    • 304 這次的內(nèi)容和上次的內(nèi)容是一樣的,用上一次下載內(nèi)容
  • 4xx 表示你丫錯了,客戶端錯誤,這類的狀態(tài)碼代表了客戶端看起來可能發(fā)生了錯誤,妨礙了服務(wù)器的處理。
    • 404 請求失敗,請求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn),但允許用戶的后續(xù)請求
  • 5xx 表示我錯了,服務(wù)器錯誤,表示服務(wù)器無法完成明顯有效的請求。這類狀態(tài)碼代表了服務(wù)器在處理請求的過程中有錯誤或者異常狀態(tài)發(fā)生,也有可能是服務(wù)器意識到以當(dāng)前的軟硬件資源無法完成對請求的處理。

3.3 用Chrome查看響應(yīng)

  1. 打開 Network
  2. 輸入網(wǎng)址
  3. 選中第一個響應(yīng)
  4. 查看 Response Headers,點(diǎn)擊「view source」
  5. 你會看到響應(yīng)的前兩部分
  6. 查看 Response 或者 Preview,你會看到響應(yīng)的第 4 部分

4.如何使用curl命令

curl命令(transfer a URL)是一個利用URL規(guī)則在命令行下工作的文件傳輸工具。它支持文件的上傳和下載,所以是綜合傳輸工具,但按傳統(tǒng),習(xí)慣稱curl為下載工具。作為一款強(qiáng)力工具,curl支持包括HTTP、HTTPS、ftp等眾多協(xié)議,還支持POST、cookies、認(rèn)證、從指定偏移處下載部分文件、用戶代理字符串、限速、文件大小、進(jìn)度條等特征。做網(wǎng)頁處理流程和數(shù)據(jù)檢索自動化,curl可以祝一臂之力。
在web后臺程序開發(fā)測試中,常常會需要發(fā)送URL測試,使用curl可以方便地模擬出符合需求的URL命令

語法

curl(選項)(參數(shù))

可參考curl命令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容