Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 久久久久一区二区三区,夜夜夜夜曰天天天天拍国产,日本一区二区视频

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          HTTP協(xié)議

          HTTP協(xié)議

          TTP協(xié)議的介紹

          • HTTP協(xié)議就是超文本傳輸協(xié)議。
          • 超文本是超級文本的縮寫,是指超越文本限制或者超鏈接,比如:圖片、音樂、視頻、超鏈接等等,都屬于超文本。
          • HTTP協(xié)議的制作者是蒂姆·伯納斯-李,1991年設(shè)計出來的,HTTP協(xié)議設(shè)計之前目的是傳輸網(wǎng)頁數(shù)據(jù),現(xiàn)在允許傳輸任意類型的數(shù)據(jù)。
          • 傳輸HTTP協(xié)議格式的數(shù)據(jù)是基于TCP傳輸協(xié)議的,發(fā)送數(shù)據(jù)之前需要先建立連接。

          HTTP協(xié)議的作用

          規(guī)定了瀏覽器和Web服務(wù)器通信數(shù)據(jù)的格式,也就是說瀏覽器和Web服務(wù)器通信需要使用http協(xié)議。

          瀏覽器訪問web服務(wù)器的通信過程

          URL

          URL表達的意思是統(tǒng)一資源定位符,通俗理解就是網(wǎng)絡(luò)資源地址,也就是我們常說的網(wǎng)址。

          URL的組成

          https://news.163.com/18/1122/10/E131233H.html

          URL的組成部分:

          1. 協(xié)議部分:https://、http://、ftp://
          2. 域名部分:news.163.com
          3. 資源路徑部分:/18/1122/10/E131233H.html

          域名:

          域名就是IP地址的別名,它是用點進行分割使用英文字母和數(shù)字組成的名字,使用域名目的就是方便的記住某臺主機IP地址。

          URL的擴展:

          https://news.163.com/hello.html?page=1&count=10

          • 查詢參數(shù)部分:?page=1&count=10

          參數(shù)說明:

          • ?后面的page表示第一個參數(shù),后面的參數(shù)都使用&進行連接


          HTTP請求報文

          HTTP最常見的請求報文有兩種:

          • GET方式的請求報文
          • POST方式的請求報文

          說明:

          • GET:獲取web服務(wù)器數(shù)據(jù)
          • POST:向web服務(wù)器提交數(shù)據(jù)

          HTTP GET 請求分析

          ---請求行---
          GET / HTTP/1.1=> 請求方式 請求的資源路徑 http協(xié)議的版本
          
          ---請求頭---
          Host: www.baidu.com=> 服務(wù)器的主機ip地址和端口號,如果看不到端口號,https默認是443
          Connection: keep-alive=> 和服務(wù)端程序保持長連接,當(dāng)客戶端和服務(wù)端有一段時間沒有通信,那么服務(wù)端程序會主動向客戶端斷開連接
          Accept: text/plain, */*; q=0.01=> 告訴服務(wù)端程序,可以接受的數(shù)據(jù)類型
          X-Requested-With: XMLHttpRequest
          User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400 QQBrowser/10.6.4209.400=> 用戶代理,客戶端程序的名稱,爬蟲使用,可以根據(jù)是否有User-Agent進行反爬
          Referer: https://www.baidu.com/?tn=98010089_dg&ch=14
          Accept-Encoding: gzip, deflate, br=> 告訴服務(wù)端程序支持的壓縮算法
          Accept-Language: zh-CN,zh;q=0.9=> 告訴服務(wù)端程序支持的語言
          Cookie: BIDUPSID=2AD97C5F09037008B8B7479292AF46DD; PSTM=1587562369; BD_UPN=1a314753; sug=3; sugstore=0; ORIGIN=0; bdime=0; BAIDUID=2AD97C5F09037008B8B7479292AF46DD:SL=0:NR=10:FG=1; BDUSS=HpCOFp1RWlobThxanZ3Ym0zNWtoUUhzUENxRHZUUTNOWktoR3A3QmFhMzdXdFplRVFBQUFBJCQAAAAAAAAAAAEAAACeAR82uqOyvMDvtcS2rLy-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPvNrl77za5eR; BDUSS_BFESS=HpCOFp1RWlobThxanZ3Ym0zNWtoUUhzUENxRHZUUTNOWktoR3A3QmFhMzdXdFplRVFBQUFBJCQAAAAAAAAAAAEAAACeAR82uqOyvMDvtcS2rLy-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPvNrl77za5eR; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BDRCVFR[S_ukKV6dOkf]=mk3SLVN4HKm; BD_HOME=1; delPer=0; BD_CK_SAM=1; PSINO=7; BDRCVFR[EaNsStaiD7m]=mk3SLVN4HKm; COOKIE_SESSION=515_6_9_9_11_17_0_0_9_7_0_4_86791_0_0_0_1601816163_1601569596_1601816640%7C9%235901_223_1601569591%7C9; H_PS_PSSID=32755_32617_1448_32735_7544_32706_32230_7517_7605=> Cookie客戶端用戶身份的標(biāo)識
          
          ---空行---
          \r\n

          總結(jié)

          • 一個HTTP請求報文可以由請求行請求頭空行請求體4個部分組成
          • 請求行是由三部分組成:請求方式、請求資源路徑、HTTP協(xié)議版本
          • GET方式的請求報文沒有請求體,只有請求行、請求頭、空行組成
          • POST方式的請求報文可以有請求行、請求頭、空行、請求體四部分組成,注意:POST方式可以允許沒有請求體,但是這種格式很少見

          HTTP響應(yīng)報文

          ---響應(yīng)行---
          HTTP/1.1 200 OK=> http協(xié)議版本 狀態(tài)碼 狀態(tài)描述
          
          Bdpagetype: 2
          Bdqid: 0x97a8872b0007466a
          Cache-Control: private
          Connection: keep-alive=> 和客戶端保持長連接
          Content-Encoding: gzip
          Content-Type: text/html;charset=utf-8=> 服務(wù)器發(fā)送給瀏覽器的內(nèi)容類型及編碼格式
          Date: Mon, 05 Oct 2020 05:20:48 GMT=> 服務(wù)器的時間,格林威治時間
          Expires: Mon, 05 Oct 2020 05:20:47 GMT
          P3p: CP=" OTI DSP COR IVA OUR IND COM "
          Server: BWS/1.1=> 服務(wù)器的名稱
          Set-Cookie: BDRCVFR[EaNsStaiD7m]=aeXf-1x8UdYcs; path=/; domain=.baidu.com
          Set-Cookie: BDSVRTM=515; path=/
          Set-Cookie: BD_HOME=1; path=/
          Set-Cookie: H_PS_PSSID=32755_32617_1448_32735_7544_32706_32230_7517_7605; path=/; domain=.baidu.com
          Strict-Transport-Security: max-age=172800
          Traceid: 1601875248028832205810928133114568328810
          X-Ua-Compatible: IE=Edge,chrome=1
          Transfer-Encoding: chunked=> 服務(wù)器發(fā)送給客戶端程序(瀏覽器)的數(shù)據(jù)不確定數(shù)據(jù)長度,數(shù)據(jù)發(fā)送結(jié)束的接收標(biāo)識:0\r\n,Content-Length:200(字節(jié)),服務(wù)端發(fā)送給客戶端的數(shù)據(jù)確定長度。內(nèi)容長度這兩個選項只能二選一

          HTTP狀態(tài)碼介紹

          HTTP狀態(tài)碼是用于表示web服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼

          狀態(tài)碼

          說明

          200

          請求成功

          307

          重定向

          400

          錯誤的請求,請求地址或者參數(shù)有誤

          404

          請求資源在服務(wù)器不存在

          500

          服務(wù)器內(nèi)部源代碼出錯

          篇主要為為了實現(xiàn)WEB服務(wù)器,其中包含了HTTP協(xié)議的理解,以及TCP的三次握手、四次揮手等方面相關(guān)知識,同時還包含了關(guān)于web瀏覽器與服務(wù)器之間的通信過程。

          一、web瀏覽器

          通常在我們上網(wǎng)時會在瀏覽器的地址欄輸入網(wǎng)址,

          ①、瀏覽器首先要對URL進行解析,

          ②、隨后通過HTTP協(xié)議定義消息內(nèi)容和步驟,即規(guī)定發(fā)送請求的格式;

          ③、根據(jù)服務(wù)器的域名通過操作系統(tǒng)下的解析器(DNS客戶端)向最近的DNS服務(wù)器發(fā)送請求獲取目標(biāo)服務(wù)器的IP地址并存儲在指定的內(nèi)存空間內(nèi),,通過操作系統(tǒng)下的協(xié)議棧以及socket庫將消息發(fā)送出去,

          ④、當(dāng)服務(wù)器接收到請求消息會返回響應(yīng)消息(該響應(yīng)消息也是根據(jù)HTTP協(xié)議定義消息內(nèi)容的格式)最后經(jīng)過類似的過程返回給web瀏覽器。

          接下來我們根據(jù)這幾個步驟進行解析:

          1.瀏覽器怎么對URL進行解析?

          通常常用的訪問數(shù)據(jù)的機制有以下幾種:

          HTTP協(xié)議:即 Hypertxt Transfer Protocal 超文本傳送協(xié)議)訪問Web服務(wù)器,例如:http://www.baidu.com/dir/file1.html

          FTP協(xié)議:File Transfer Protocol,文件傳輸協(xié)議,主要用于文件的上傳和下載,例如:ftp://ftp.glasscom.com/dir/file1.html

          File協(xié)議:本地文件傳輸協(xié)議,例如:file://localhost/c:path/file1.zip。

          maito協(xié)議:該協(xié)議可以創(chuàng)建一個指向電子郵件地址的超級鏈接,通過該鏈接可以在Internet中發(fā)送電子郵件。例如:maito.tone@glasscom.com等等

          2、根據(jù)HTTP協(xié)議生成怎樣格式的請求消息和接收的響應(yīng)消息?

          需要我們需要知道的是:

          HTTP協(xié)議:

          我們知道服務(wù)端和客戶端之間進行通信過程便是:首先客戶端根據(jù)HTTP協(xié)議給服務(wù)端發(fā)送請求消息,隨后服務(wù)器給客戶端發(fā)送響應(yīng)消息。那么請求消息和響應(yīng)消息具體是什么樣的呢?

          請求消息:

          1 以下便是瀏覽器給服務(wù)器發(fā)送的請求消息

          2 GET / HTTP/1.1

          3 Host: www.baidu.com

          4 Connection: keep-alive

          5 Cache-Control: max-age=0

          6 Upgrade-Insecure-Requests: 1

          7 User-Agent: Mozilla/5.0 (Windows NT 10.0;Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99Safari/537.36

          8Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

          9 Accept-Encoding: gzip, deflate, br

          10 Accept-Language: zh-CN,zh;q=0.9

          接下來對這些信息進行解析:

          第一部分:請求頭行,包含請求類型、URI、HTTP協(xié)議版本;

          請求信息類型通常有:get、post、put等等;

          第二部分:即緊跟第一行之后的,請求頭部,包含服務(wù)器所使用的說明信息;接下來解釋一下這些說明信息的意思:

          1、host:請求web服務(wù)器的域名地址;

          2、Connection: 表示是否持久連接;即keep-alive表示持久連接;

          3、Cache-Control:指定請求和響應(yīng)的緩存機制;no-cache(不能緩存)、no-store(在請求消息中發(fā)送將使得請求和響應(yīng)消息都不使用緩存)、max-age(客戶機可以接收生存期不大于指定時間(以秒為單位)的響應(yīng))、max-stale(客戶機可以接收超出超時期間的響應(yīng)消息)、min-fresh(客戶機可以接收響應(yīng)時間小于當(dāng)前時間加上指定時間的響應(yīng))、only-if-cached等等;

          4、User-Agent: HTTP協(xié)議運行的瀏覽器類型的詳細信息;比如:谷歌/67.0.3396.99

          5、Accept: 指瀏覽器可以接收的內(nèi)容類型;

          6、Accept-Encoding: 客戶端瀏覽器可以支持的web服務(wù)器返回內(nèi)容壓縮編碼類型;

          7、Accept-Language:瀏覽器支持的語言類型,

          8、Cookie: 某些網(wǎng)站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密);例如當(dāng)我們上網(wǎng)時,某些網(wǎng)站能準(zhǔn)確的推送我們想要的信息。

          第三部分:"\r\n" --> 分割header和body部分的分界線

          響應(yīng)消息:

          1 HTTP/1.1 200 OK

          2 Bdpagetype: 1

          3 Bdqid: 0x8bda58760001baca

          4 Cache-Control: private

          5 Connection: Keep-Alive

          6 Content-Encoding: gzip

          7 Content-Type: text/html

          8 Cxy_all:baidu+10412ee70bbb9e9eec33f3dbcb3e2df7

          9 Date: Wed, 18 Jul 2018 03:26:13GMT

          10 Expires: Wed, 18 Jul 2018 03:25:42 GMT

          11 Server: BWS/1.1

          12 Set-Cookie: BDSVRTM=0; path=/

          13 Set-Cookie: BD_HOME=0; path=/

          14 Set-Cookie: H_PS_PSSID=1435_21118_20929; path=/; domain=.baidu.com

          15 Strict-Transport-Security: max-age=172800

          16 Vary:Accept-Encoding

          17 X-Ua-Compatible: IE=Edge,chrome=1

          18 Transfer-Encoding: chunked

          響應(yīng)消息的解析:

          第一部分:響應(yīng)頭,包含:HTTP協(xié)議版本、狀態(tài)碼(1XX-告知請求處理進度和情況,2XX-成功,3XX-表示需要進一步操作,4XX-客戶端錯誤;5XX-服務(wù)器錯誤;)

          第二部分:響應(yīng)頭部,包含服務(wù)器發(fā)送的附加信息;這里針對幾個重要的進行解析說明:https://www.cnblogs.com/mylanguage/p/5689879.html-->有詳細說明。

          第三部分:"\r\n" --分割header和body的分割線

          第四部分:包含服務(wù)器向客戶端發(fā)送的數(shù)據(jù)。

          以上就請求消息和響應(yīng)消息的內(nèi)容格式,由瀏覽器或者客戶端將信息根據(jù)HTTP協(xié)議轉(zhuǎn)換而來。

          3、怎么根據(jù)域名獲取服務(wù)器的IP地址?

          首先web瀏覽器會調(diào)用操作系統(tǒng)下的解析器即DNS客戶端,隨后由解析器發(fā)送請求給最近的DNS服務(wù)器(發(fā)送過程與C/S架構(gòu)模型一樣),若所需域名不在最近的DNS服務(wù)器,則由該服務(wù)器向域的DNS服務(wù)器發(fā)送詢查消息,若該域名不在根域DNS服務(wù)器上,則讓最近DNS服務(wù)器向其下級域發(fā)送詢查消息,以此遞歸便能查找到該域名所在域的DNS服務(wù)器,最后由請求的DNS服務(wù)器發(fā)送響應(yīng)消息到最近的DNS服務(wù)器,得到該域名的IP地址;

          同時DNS服務(wù)器有一個緩存功能,可以記住之前查詢過的域名,如果所查詢的域名和相關(guān)信息已經(jīng)在緩存中,那么久可以直接返回響應(yīng)。

          二、TCP的三次握手和四次揮手

          首先我們需要知道在客戶端與服務(wù)器基于TCP協(xié)議建立聯(lián)系時需要經(jīng)過三次握手,而在斷開連接時需經(jīng)歷四次揮手的過程,那么我們來看一下該過程是怎樣的?

          三次握手:

          解析:

          首先服務(wù)器通常是處于監(jiān)聽的狀態(tài),而客戶端通常是主動建立連接的一方,即

          1、TCP服務(wù)器進程先創(chuàng)建傳輸控制塊TCB,時刻準(zhǔn)備接受客戶進程的連接請求,此時服務(wù)器就進入了LISTEN(監(jiān)聽)狀態(tài);

          2、TCP客戶進程也是先創(chuàng)建傳輸控制塊TCB,然后向服務(wù)器發(fā)出連接請求報文,這是報文首部中的同部位SYN=1,同時選擇一個初始序列號 seq=x ,此時,TCP客戶端進程進入了 SYN-SENT(同步已發(fā)送狀態(tài))狀態(tài)。TCP規(guī)定,SYN報文段(SYN=1的報文段)不能攜帶數(shù)據(jù),但需要消耗掉一個序號。

          3、TCP服務(wù)器收到請求報文后,如果同意連接,則發(fā)出確認報文。確認報文中應(yīng)該 ACK=1,SYN=1,確認號是ack=x+1,同時也要為自己初始化一個序列號 seq=y,此時,TCP服務(wù)器進程進入了SYN-RCVD(同步收到)狀態(tài)。這個報文也不能攜帶數(shù)據(jù),但是同樣要消耗一個序號。

          4、TCP客戶進程收到確認后,還要向服務(wù)器給出確認。確認報文的ACK=1,ack=y+1,自己的序列號seq=x+1,此時,TCP連接建立,客戶端進入ESTABLISHED(已建立連接)狀態(tài)。TCP規(guī)定,ACK報文段可以攜帶數(shù)據(jù),但是如果不攜帶數(shù)據(jù)則不消耗序號。

          5、當(dāng)服務(wù)器收到客戶端的確認后也進入ESTABLISHED狀態(tài),此后雙方就可以開始通信了。

          四次揮手:

          同時我們需要知道的是:通常服務(wù)器不會主動斷開連接,而是客戶端主動斷開連接。

          1、客戶端進程發(fā)出連接釋放報文,并且停止發(fā)送數(shù)據(jù)。釋放數(shù)據(jù)報文首部,F(xiàn)IN=1,其序列號為seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個字節(jié)的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態(tài)。 TCP規(guī)定,F(xiàn)IN報文段即使不攜帶數(shù)據(jù),也要消耗一個序號。

          2、服務(wù)器收到連接釋放報文,發(fā)出確認報文,ACK=1,ack=u+1,并且?guī)献约旱男蛄刑杝eq=v,此時,服務(wù)端就進入了CLOSE-WAIT(關(guān)閉等待)狀態(tài)。TCP服務(wù)器通知高層的應(yīng)用進程,客戶端向服務(wù)器的方向就釋放了,這時候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是服務(wù)器若發(fā)送數(shù)據(jù),客戶端依然要接受。這個狀態(tài)還要持續(xù)一段時間,也就是整個CLOSE-WAIT狀態(tài)持續(xù)的時間。

          3、客戶端收到服務(wù)器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態(tài),等待服務(wù)器發(fā)送連接釋放報文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù))。

          4、服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后,就向客戶端發(fā)送連接釋放報文,F(xiàn)IN=1,ack=u+1,由于在半關(guān)閉狀態(tài),服務(wù)器很可能又發(fā)送了一些數(shù)據(jù),假定此時的序列號為seq=w,此時,服務(wù)器就進入了LAST-ACK(最后確認)狀態(tài),等待客戶端的確認。

          5、客戶端收到服務(wù)器的連接釋放報文后,必須發(fā)出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態(tài)。注意此時TCP連接還沒有釋放,必須經(jīng)過2?

          6、服務(wù)器只要收到了客戶端發(fā)出的確認,立即進入CLOSED狀態(tài)。同樣,撤銷TCB后,就結(jié)束了這次的TCP連接。可以看到,服務(wù)器結(jié)束TCP連接的時間要比客戶端早一些。

          三、實現(xiàn)web靜態(tài)服務(wù)器

          直接看示例:

          import socket

          import re

          def server_client(server_client_socket):

          T+技術(shù)學(xué)習(xí)視頻資源,500+技術(shù)電子書,大量高效工具及網(wǎng)站,私信回復(fù)【資源】即可免費獲取


          HTTP 報文是在應(yīng)用程序之間發(fā)送的數(shù)據(jù)塊,這些數(shù)據(jù)塊將通過以文本形式的元信息開頭,用于 HTTP 協(xié)議交互。請求端(客戶端)的 HTTP 報文叫做請求報文,響應(yīng)端(服務(wù)器端)的叫做響應(yīng)報文。 HTTP 報文本身是由多行(用 CR+LF 作換行符)數(shù)據(jù)構(gòu)成的字符串文本。

          請求報文

          HTTP 請求報文由請求行請求頭空行請求包體(body)組成。如下圖所示:

          真實示例:

          GET / HTTP/1.1     
          Host: www.baidu.com
          Connection: keep-alive
          Cache-Control: max-age=0
          sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
          sec-ch-ua-mobile: ?0
          sec-ch-ua-platform: "macOS"
          Upgrade-Insecure-Requests: 1
          User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
          Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,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
          Cookie: BIDUPSID=8B0207CE0B6364E5934651E84F17999B; PSTM=1619707475; 

          1.請求行

          主要描述了客戶端想要如何操作服務(wù)端的資源;請求行由三部分構(gòu)成:

          • 請求方法:表示對資源期望進行何種操作,常用的如 GET、POST
          • 請求目標(biāo):通常是一個 URL ,表明了要操作的資源。
          • 版本號:表示報文使用的 HTTP 協(xié)議版本。

          這三個部分通常使用空格(space)來分隔,最后要用 CRLF 換行表示結(jié)束。

          GET / HTTP/1.1  

          這個請求行,結(jié)合之前的描述,意思就是“服務(wù)端妹子你好,我是客戶端蛋蛋,現(xiàn)在我想獲取網(wǎng)站根目錄的默認信息,我這邊用的協(xié)議版本是 1.1,麻煩你也要用這個版本回復(fù)我哦”

          2.請求頭

          HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務(wù)端據(jù)此獲取客戶端的信息。與緩存相關(guān)的規(guī)則信息,均包含在header中,請求頭可大致分為四種類型:通用首部字段、請求首部字段、響應(yīng)首部字段、實體首部字段。這里先簡單羅列,稍后做具體解釋。

          3.請求體

          請求體就是 HTTP 要傳輸?shù)膬?nèi)容,HTTP 可以承載很多類型的數(shù)字數(shù)據(jù):圖片、音頻、視頻、HTML 文檔等。

          • 介紹響應(yīng)報文
          • 首部字段
          • 介紹功能

          響應(yīng)報文

          HTTP 響應(yīng)報文由狀態(tài)行響應(yīng)頭部空行響應(yīng)包體(body)組成。如下圖所示:

          以請求 www.baidu.com為例:

          HTTP/1.1 200 OK
          Bdpagetype: 1
          Bdqid: 0xfb0d743100040ad2
          Cache-Control: private
          Connection: keep-alive
          Content-Encoding: gzip
          Content-Type: text/html;charset=utf-8
          Date: Fri, 24 Dec 2021 08:20:44 GMT
          Expires: Fri, 24 Dec 2021 08:20:44 GMT
          Server: BWS/1.1
          Set-Cookie: BDSVRTM=17; path=/
          Set-Cookie: BD_HOME=1; path=/
          Set-Cookie: H_PS_PSSID=35635_34439_35104_35628_35488_35436_35456_34584_35491_35584_35586_34873_35317_26350_35610_35562; path=/; domain=.baidu.com
          Strict-Transport-Security: max-age=172800
          Traceid: 1640334044050133761018090243032019634898
          X-Frame-Options: sameorigin
          X-Ua-Compatible: IE=Edge,chrome=1
          Transfer-Encoding: chunked

          1.狀態(tài)行

          狀態(tài)行包含了 協(xié)議版本狀態(tài)碼以及狀態(tài)描述

          • 協(xié)議版本:指明了報文使用的 HTTP 協(xié)議版本
          • 狀態(tài)碼:狀態(tài)碼是一個三位數(shù)字,用來表示處理的結(jié)果,下面列出了狀態(tài)碼的類別:
          • 狀態(tài)描述:這個是作為狀態(tài)碼的補充,是一段更詳細的文字,幫助人們理解原因。

          2.響應(yīng)頭部

          和請求報文的請求頭類似,響應(yīng)頭也由鍵值對組成,每行一對,鍵和值用英文冒號 : 分隔。響應(yīng)頭域允許服務(wù)器傳遞不能放在狀態(tài)行的附加信息,這些域主要描述服務(wù)器的信息和Request-URI進一步的信息

          3.響應(yīng)包體

          服務(wù)器返回給瀏覽器的響應(yīng)信息,響應(yīng)數(shù)據(jù)的格式是根據(jù)服務(wù)器來的,常見的響應(yīng)數(shù)據(jù)格式有:text/html、application/json等。

          常見的響應(yīng)格式:

          HTTP 首部字段

          在 HTTP 的請求頭和響應(yīng)頭中都是由首部字段來表示的,首部內(nèi)容可以為客戶端和服務(wù)器分別處理請求和響應(yīng)提供所需要的信息。

          首部字段可以分為通用首部字段請求首部字段響應(yīng)首部字段實體首部字段

          通用首部字段

          通用首部字段是指請求報文和響應(yīng)報文都會使用到的首部字段。

          先來看下都有哪些字段:

          Cache-Control

          通過指定 Cache-Control 的指令,就能操作緩存的工作機制。

          一般在客戶端和服務(wù)端之間還存在一個緩存服務(wù)器,如果請求的資源在緩存服務(wù)器中有,就不會再請求源服務(wù)器,提高了請求響應(yīng)的效率。

          指令的參數(shù)可以多選,通過“,”分隔。

          Cache-Control: private, max-age=0, no-cache

          public 指令

          Cache-Control: public

          當(dāng)使用 public 指令時,明確表明其他用戶也可以利用緩存。

          private 指令

          Cache-Control: private

          當(dāng)指定 private 指令后,響應(yīng)只以特定的用戶作為對象,這與 public 指令的行為相反。

          緩存服務(wù)器會對該特定用戶提供資源緩存的服務(wù),對于其他用戶發(fā)送過來的請求,代理服務(wù)器則不會返回緩存。

          no-cache 指令

          Cache-Control: no-cache

          使用 no-cache 指令可以防止從緩存中拿過期的數(shù)據(jù)。

          在請求中如果包含該指令,則客戶端將不會接收緩存過的響應(yīng),中間的緩存服務(wù)器會把請求轉(zhuǎn)發(fā)給源服務(wù)器。

          如果響應(yīng)中包含該指令,緩存服務(wù)器會向源服務(wù)器進行資源有效期的確認,如果是過期的資源則不緩存。

          no-store 指令

          Cache-Control: no-store

          該指令規(guī)定緩存不能在本地存儲請求或響應(yīng)的任一部分。這里我們要和上面那個 no-cache 指令要區(qū)分開,no-store才是真正不進行緩存,no-cache 只是不對過期的資源進行緩存。

          Connection

          Connection 有兩個作用:控制不再轉(zhuǎn)發(fā)給代理的首部字段、管理持久連接。

          • 控制不再轉(zhuǎn)發(fā)給代理的首部字段Connection: 不再轉(zhuǎn)發(fā)的首部字段名
          • 管理持久連接
          Connection: close

          當(dāng)服務(wù)器端想明確斷開連接時,則指定 Connection 首部字段的值為 Close。

          Date

          首部字段 Date 表明創(chuàng)建 HTTP 報文的日期和時間。

          Trailer

          首部字段 Trailer 會事先說明在報文主體后記錄了哪些首部字段。該首部字段可應(yīng)用在 HTTP/1.1 版本分塊傳輸編碼時。

          Transfer-Encoding

          該字段規(guī)定了傳輸報文主體時采用的編碼方式。 HTTP/1.1 的傳輸編碼方式僅對分塊傳輸編碼有效。

          請求首部字段

          請求首部字段是從客戶端往服務(wù)器端發(fā)送請求報文中所使用的字段,用于補充請求的附加信息、客戶端信息、對響應(yīng)內(nèi)容相關(guān)的優(yōu)先級等內(nèi)容。

          常用字段具體說明

          Accept

          Accept: text/html,application/xhtml+xml,application/xml;q=0.3

          該字段可以通知服務(wù)器 客戶端能夠接收處理的媒體類型及優(yōu)先級。

          比如,如果瀏覽器不支持 PNG 圖片的顯示,那 Accept 就不指定 image/png ,而指定可處理的 image/gif 和 image/jpeg 等圖片類型。 若想要給顯示的媒體類型增加優(yōu)先級,則使用 q=來額外表示權(quán)重值。用分號(;)進行分隔。權(quán)重值 q 的范圍是 0~1(可精確到小數(shù)點 后 3 位),且 1 為最大值。不指定權(quán)重 q 值時,默認權(quán)重為 q=1.0。

          Accept-Charset

          Accept-Charset: iso-8859-5, unicode-1-1;q=0.8

          通知服務(wù)器 客戶端支持的字符集及字符集的相對優(yōu)先順序。

          Accept-Encoding

          Accept-Encoding: gzip, deflate

          首部字段用來告知服務(wù)器 客戶端支持的內(nèi)容編碼及內(nèi)容編碼的優(yōu)先級順序。可一次性指定多種內(nèi)容編碼。

          Accept-Language

          Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3

          用來告知服務(wù)器 客戶端能夠處理的自然 語言集(指中文或英文等),以及自然語言集的相對優(yōu)先級。可一次 指定多種自然語言集。

          Authorization

          Authorization: Basic dWVub3NlbjpwYXNzd29yZA==

          首部字段 Authorization 是用來告知服務(wù)器,客戶端的認證信息(證書值)。

          User-Agent

          User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0)

          首部字段 User-Agent 會將創(chuàng)建請求的瀏覽器和用戶代理名稱等信息傳 達給服務(wù)器。

          由網(wǎng)絡(luò)爬蟲發(fā)起請求時,有可能會在字段內(nèi)添加爬蟲作者的電子郵件地址。此外,如果請求經(jīng)過代理,那么中間也很可能被添加上代理服務(wù)器的名稱。

          響應(yīng)首部字段

          響應(yīng)首部字段是由服務(wù)器端向客戶端返回響應(yīng)報文中所使用的字段,用于補充響應(yīng)的附加信息、服務(wù)器信息,以及對客戶端的附加要求等信息。

          Accept-Ranges

          Accept-Ranges: bytes    當(dāng)不能處理范圍請求時,Accept-Ranges: none

          用來告知客戶端服務(wù)器是否能處理范圍請 求,以指定獲取服務(wù)器端某個部分的資源。

          Age

          Age: 600

          Age 能告知客戶端,源服務(wù)器在多久前創(chuàng)建了響應(yīng)。字段值的單位為秒。

          Location

          Location: http://www.usagidesign.jp/sample.html

          該字段可以將響應(yīng)接收方引導(dǎo)至某個與請求 URI 位置 不同的資源。

          基本上,該字段會配合 3xx :Redirection 的響應(yīng),提供重定向的 URI。

          Retry-After

          Retry-After: 120

          告知客戶端應(yīng)該在多久之后再次發(fā)送請求。主要 配合狀態(tài)碼 503 Service Unavailable 響應(yīng),或 3xx Redirect 響應(yīng)一起使 用。

          Server

          Server: Apache/2.2.17 (Unix)

          告知客戶端當(dāng)前服務(wù)器上安裝的 HTTP 服務(wù)器應(yīng)用程序的信息。

          實體首部字段

          實體首部字段是包含在請求報文和響應(yīng)報文中的實體部分所使用的首部,用于補充內(nèi)容的更新時間等與實體相關(guān)的信息。

          Allow

          Allow: GET, HEAD

          用于通知客戶端能夠支持 Request-URI 指定資源的所有 HTTP 方法。

          Content-Encoding

          Content-Encoding: gzip

          會告知客戶端服務(wù)器對實體的主體部分選用的內(nèi)容編碼方式。

          Content-Language

          Content-Language: zh-CN

          首部字段 Content-Language 會告知客戶端,實體主體使用的自然語言。

          Content-Length

          Content-Length: 15000

          表明了實體主體部分的大小(單位是字 節(jié))。

          Content-Type

          Content-Type: text/html; charset=UTF-8

          說明了實體主體內(nèi)對象的媒體類型。


          主站蜘蛛池模板: 无码人妻久久一区二区三区免费| asmr国产一区在线| 国产福利视频一区二区| 男插女高潮一区二区| 国产AV一区二区精品凹凸| 精品国产福利在线观看一区| 亚洲一区二区在线免费观看| 国产一区二区三区在线视頻| 日韩一区二区在线免费观看| 久久一区二区三区精华液使用方法| 国产精品主播一区二区| 无码精品人妻一区二区三区免费| 日本精品啪啪一区二区三区| 亚洲高清一区二区三区电影| 一区国产传媒国产精品| 一本久久精品一区二区| 麻豆国产在线不卡一区二区| 精品国产一区二区三区久久影院| 日韩免费视频一区| 国产在线一区二区三区av| 午夜精品一区二区三区在线观看| 日本美女一区二区三区| 久久人妻无码一区二区| 在线视频一区二区三区四区| 精品无码综合一区| 中文无码一区二区不卡αv | 亚洲sm另类一区二区三区| 国产AV天堂无码一区二区三区 | 在线观看精品一区| 国产精品美女一区二区三区 | 国产精品无码一区二区三区电影| 亚洲一区无码精品色| 亚洲一区二区三区丝袜| 国产高清一区二区三区四区| 久久久无码一区二区三区| 精品成人一区二区三区四区| 国产精品亚洲专区一区| 久久青青草原一区二区| 精品爆乳一区二区三区无码av| 亚洲福利精品一区二区三区| 中文字幕一区二区视频|