日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3-3:HTTP协议之request和respond及常见请求方法和常见状态码

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3-3:HTTP协议之request和respond及常见请求方法和常见状态码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一:request
    • (1)請求報文基本構成
    • (2)請求方法
  • 二:respond
    • (1)響應報文基本構成
    • (2)HTTP常見狀態碼
  • 三:HTTP常見Header(字段)

注意下面需要分析請求報頭和響應報頭的構成,需要使用到抓包工具,推薦使用fillder

一:request

(1)請求報文基本構成


在瀏覽器中輸入百度的網址,選中相應數據,右側顯示中上半部分為請求報頭,下半部分顯示為相應報頭,點擊raw(原始數據)查看


信息具體如下

GET https://www.baidu.com/ HTTP/1.1 #請求行 Host: www.baidu.com #請求的主機 Connection: keep-alive #長連接 HTTP可以選擇不斷開TCP,從而連接持久化 sec-ch-ua: " Not;A Brand";v="99", "Microsoft Edge";v="91", "Chromium";v="91" sec-ch-ua-mobile: ?0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)#瀏覽器,操作系統信息 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 Cookie: BIDUPSID=9F74B621908F780204441F86DCCE03A5; PSTM=1598331815; BAIDUID=9F74B621908F7802E2D41BCA0AE628E1:FG=1; BAIDUID_BFESS=9F74B621908F7802E2D41BCA0AE628E1:FG=1; BD_UPN=12314753; COOKIE_SESSION=0_1_1_1_0_0_0_0_1_0_0_0_0_0_0_1_0_1624878202_1624878201%7C1%230_1_1624878201%7C1; BDUSS=kFjVE4wOVphT2l-Ym82YnE5RHdJUlZTRW10MU5qM1lqS1p4eVUxaVNHR2pPUUZoRVFBQUFBJCQAAAAAAAAAAAEAAADjDoXG1-7Lp77NysfO0jYyMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOs2WCjrNlgR; BDUSS_BFESS=kFjVE4wOVphT2l-Ym82YnE5RHdJUlZTRW10MU5qM1lqS1p4eVUxaVNHR2pPUUZoRVFBQUFBJCQAAAAAAAAAAAEAAADjDoXG1-7Lp77NysfO0jYyMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOs2WCjrNlgR; BD_HOME=1; H_PS_PSSID=34099_34225_31253_34226_33848_34133_33607_34134_26350; sugstore=0; BA_HECTOR=ah85al8g252h0l05ui1gdoqqk0r #緩存信息 # 此行為空行

(2)請求方法

HTTP請求方法如下

1:GET方法
GET方法用來請求已經被URI識別的資源,指定的資源經過服務器解析后返回響應內容。比如請求的資源是文本,那么就會保持原樣返回

使用GET方法請求的例子

2:POST方法
雖然用GET方法也可以傳輸實體的主體,但是一般不用GET方法進行傳輸,而是采用POST。雖然說POST的功能與GET很相似,但是POST的主要目的并不是獲取響應的主體內容

使用POST方法請求的例子

GET和POST的區別
你現在打開我的這篇文文章閱讀,瀏覽器就會發送GET請求給服務器,服務器則會返回相應的數據

而如果你在我的文章下面評論,點擊提交后,瀏覽器就會執行一次POST請求,把你的評論放進請求報文里,然后拼接好POST請求頭,再通過TCP協議發送服務器

3:PUT方法
PUT方法用來傳輸文件,比如QQ郵箱發送郵件添加附件,上傳百度云盤文件都可以近似理解為PUT方法。為什么說近似呢,因為實際上PUT方法是不安全的,一旦對服務器進行寫操作都是不安全的,而且在HTTP1.1中PUT方法自身又不帶驗證機制,因此任何人都可以上傳文件,存在極大的安全隱患。所以一般的web網站是不會使用這樣的方法的。

4:HEAD方法
HEAD方法只請求報文首部,而不獲得報文正文

如下

5:DELETE方法
DELETE方法用于刪除文件,和PUT相反。當然DELETE肯定也是不安全的,所以一般不會開放

二:respond

(1)響應報文基本構成


抓包信息如下

HTTP/1.1 200 OK #響應行 Bdpagetype: 2 Bdqid: 0x8231b40200113aab Cache-Control: private Connection: keep-alive # 長連接 Content-Encoding: gzip Content-Type: text/html;charset=utf-8 # 返回的文件類型 Date: Wed, 30 Jun 2021 13:08:55 GMT Expires: Wed, 30 Jun 2021 13:08:55 GMT Server: BWS/1.1 Set-Cookie: BDSVRTM=271; path=/ # 服務器給客戶端設置cookie Set-Cookie: BD_HOME=1; path=/ Set-Cookie: H_PS_PSSID=34099_34225_31253_34226_33848_34133_33607_34134_26350; path=/; domain=.baidu.com Strict-Transport-Security: max-age=172800 Traceid: 162505853526142891629381477419473517227 X-Ua-Compatible: IE=Edge,chrome=1 Transfer-Encoding: chunked # 此行為空行,下面是正文 dabk k u V ?@ E?C4? #Gd ()! -* @ NIv I$[ S \N * D +J , ǘ3 > /d= Y q t ; 4 } > ' ? w*** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***

可以看到響應報頭正文部分均為亂碼,其實這是HTTPS請求,已經被加密了

這里我們使用Linux中telnet工具嘗試抓包
在命令行中輸入telent www.baidu.com 80,請求百度的80端口

接著我們手動進行請求,請求方法是GET,請求URL如果輸入/表示請求首頁,版本為1.1

請求正文略過,直接輸入換行,此時會發現百度服務器會將百度的首頁,也就是一個HTML文件返回過來,這就是響應正文

其中content-length就是標識響應正文的長度的

(2)HTTP常見狀態碼

當客戶端向服務器端發送請求時,會返回狀態,借助它,用戶可以知道服務器到底是正常了請求,還是出了問題,如果處理問題,到底是出了怎樣的問題

HTTP狀態碼常見的共有五大類,不同數字具有不同的含義

2XX-成功

  • 204-No Content服務器已經成功處理了請求,但在返回的響應報文中不含實體的主體部分(另外,也不會允許返回任何實體的主體)。舉例,如果你從瀏覽器發出的請求處理后,若返回204,那么瀏覽器顯示的頁面則不會發生更新。使用場景主要集中在只需要從客戶端向服務器發信息,而對客戶端不需要發送新信息內容的情況下使用

  • 206-Partial Content表示客戶端發起了范圍請求,同時服務器成功執行了此次請求。響應報文中的“Content-Range”指定范圍的實體內容

3XX-重定向
該狀態碼表示瀏覽器需要執行某些特殊的操作才能正確處理請求
以302為例,你在沒有淘寶網時,點擊上面的購物車選項

本應該跳轉到購物車頁面,但是由于沒有登錄,所以服務器強制讓你重定向到登錄頁面,可以發現次登錄頁面狀態碼是302

  • 301-Moved Permanently意思是永久重定向,表示請求的資源已經分配了新的URL,意思可以理解為人家網址已經變了,你的快捷方式(收藏)還指向以前的URL

  • 302-Found:意思是臨時重定向,表示請求的資源已經分配了新的URL,希望用戶可以新的URL訪問,但是這一次先放過你,雖然訪問錯了,但是服務器幫你跳轉過來。

  • 303-See Other該狀態碼表示由于請求的圓存在著另一個URL,應使用GET(這一點和302有所區別)獲取資源

  • 304-Not Modified不具有跳轉的含義,表示資源未修改,重定向已存在的緩沖文件,也稱緩存定定向,用于緩存控制

4xx-客戶端錯誤

  • 400-Bad Request表示客戶端的請求報文有錯誤,是一個很籠統的錯誤。

  • 403-Forbidden意思是服務器拒絕訪問,并不是客戶端的請求出錯

  • 404-Not Found表示請求的資源在服務器上找不到,無法提供客戶端

    5xx-服務器錯誤

  • 500-Internal Server Error和400一樣,是一個籠統性的錯誤,只是表明服務器出現了錯誤

  • 501-Not Implemented表示客戶端請求的功能還不?持,類似“即將開業,敬請期待”的意思

  • 502 Bad Gateway通常是服務器作為網關或代理時返回的錯誤碼,表示服務器自身工作正常,訪問后端服務器發生了錯誤

  • 503-Service Unavailable表示服務器當前很忙,暫時無法響應服務器,類似“網絡服務正忙,請稍后再試”的意思。

三:HTTP常見Header(字段)

可以看到不管是request還是response都有請求行這一部分

Host字段:客戶端告知服務器, 所請求的資源是在哪個主機的哪個端口上


Content-Length:服務器在返回數據時,會有 Content-Length 字段,表明本次回應的數據長度。

Connection字段:常用于客戶端要求服務器使用 TCP 持久連接,以便其他請求復用。

  • HTTP/1.1 版本的默認連接都是持久連接,但為了兼容?版本的 HTTP,需要指定 Connection 首部字段的值為Keep-Alive 。

Content-Type 字段:用于服務器回應時,告訴客戶端,本次數據是什么格式

  • Content-Type: text/html; charset=utf-8表示發送的是網頁及其編碼格式
  • 客戶端請求的時候,可以使用 Accept 字段聲明自己可以接受哪些數據格式。Accept: */*表示可以接受任意格式

Content-Encoding 字段:段說明數據的壓縮?法。表示服務器返回的數據使?了什么壓縮格式

User-Agent: 聲明用戶的操作系統和瀏覽器版本信息,這東西在爬蟲中涉及較多
referer: 當前頁面是從哪個頁面跳轉過來的
location: 搭配3xx狀態碼使用, 告訴客戶端接下來要去哪里訪問
Cookie: 用于在客戶端存儲少量信息. 通常用于實現會話(session)的功能

總結

以上是生活随笔為你收集整理的3-3:HTTP协议之request和respond及常见请求方法和常见状态码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。