它規定了瀏覽器和Web服務器通信數據的格式,也就是說瀏覽器和Web服務器通信需要使用http協議。
URL表達的意思是統一資源定位符,通俗理解就是網絡資源地址,也就是我們常說的網址。
https://news.163.com/18/1122/10/E131233H.html
URL的組成部分:
域名:
域名就是IP地址的別名,它是用點進行分割使用英文字母和數字組成的名字,使用域名目的就是方便的記住某臺主機IP地址。
URL的擴展:
https://news.163.com/hello.html?page=1&count=10
參數說明:
HTTP最常見的請求報文有兩種:
說明:
---請求行---
GET / HTTP/1.1=> 請求方式 請求的資源路徑 http協議的版本
---請求頭---
Host: www.baidu.com=> 服務器的主機ip地址和端口號,如果看不到端口號,https默認是443
Connection: keep-alive=> 和服務端程序保持長連接,當客戶端和服務端有一段時間沒有通信,那么服務端程序會主動向客戶端斷開連接
Accept: text/plain, */*; q=0.01=> 告訴服務端程序,可以接受的數據類型
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=> 用戶代理,客戶端程序的名稱,爬蟲使用,可以根據是否有User-Agent進行反爬
Referer: https://www.baidu.com/?tn=98010089_dg&ch=14
Accept-Encoding: gzip, deflate, br=> 告訴服務端程序支持的壓縮算法
Accept-Language: zh-CN,zh;q=0.9=> 告訴服務端程序支持的語言
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客戶端用戶身份的標識
---空行---
\r\n
---響應行---
HTTP/1.1 200 OK=> http協議版本 狀態碼 狀態描述
Bdpagetype: 2
Bdqid: 0x97a8872b0007466a
Cache-Control: private
Connection: keep-alive=> 和客戶端保持長連接
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8=> 服務器發送給瀏覽器的內容類型及編碼格式
Date: Mon, 05 Oct 2020 05:20:48 GMT=> 服務器的時間,格林威治時間
Expires: Mon, 05 Oct 2020 05:20:47 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Server: BWS/1.1=> 服務器的名稱
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=> 服務器發送給客戶端程序(瀏覽器)的數據不確定數據長度,數據發送結束的接收標識:0\r\n,Content-Length:200(字節),服務端發送給客戶端的數據確定長度。內容長度這兩個選項只能二選一
HTTP狀態碼是用于表示web服務器響應狀態的3位數字代碼
狀態碼 | 說明 |
200 | 請求成功 |
307 | 重定向 |
400 | 錯誤的請求,請求地址或者參數有誤 |
404 | 請求資源在服務器不存在 |
500 | 服務器內部源代碼出錯 |
篇主要為為了實現WEB服務器,其中包含了HTTP協議的理解,以及TCP的三次握手、四次揮手等方面相關知識,同時還包含了關于web瀏覽器與服務器之間的通信過程。
一、web瀏覽器
通常在我們上網時會在瀏覽器的地址欄輸入網址,
①、瀏覽器首先要對URL進行解析,
②、隨后通過HTTP協議定義消息內容和步驟,即規定發送請求的格式;
③、根據服務器的域名通過操作系統下的解析器(DNS客戶端)向最近的DNS服務器發送請求獲取目標服務器的IP地址并存儲在指定的內存空間內,,通過操作系統下的協議棧以及socket庫將消息發送出去,
④、當服務器接收到請求消息會返回響應消息(該響應消息也是根據HTTP協議定義消息內容的格式)最后經過類似的過程返回給web瀏覽器。
接下來我們根據這幾個步驟進行解析:
1.瀏覽器怎么對URL進行解析?
通常常用的訪問數據的機制有以下幾種:
HTTP協議:即 Hypertxt Transfer Protocal 超文本傳送協議)訪問Web服務器,例如:http://www.baidu.com/dir/file1.html
FTP協議:File Transfer Protocol,文件傳輸協議,主要用于文件的上傳和下載,例如:ftp://ftp.glasscom.com/dir/file1.html
File協議:本地文件傳輸協議,例如:file://localhost/c:path/file1.zip。
maito協議:該協議可以創建一個指向電子郵件地址的超級鏈接,通過該鏈接可以在Internet中發送電子郵件。例如:maito.tone@glasscom.com等等
2、根據HTTP協議生成怎樣格式的請求消息和接收的響應消息?
需要我們需要知道的是:
HTTP協議:
我們知道服務端和客戶端之間進行通信過程便是:首先客戶端根據HTTP協議給服務端發送請求消息,隨后服務器給客戶端發送響應消息。那么請求消息和響應消息具體是什么樣的呢?
請求消息:
1 以下便是瀏覽器給服務器發送的請求消息
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協議版本;
請求信息類型通常有:get、post、put等等;
第二部分:即緊跟第一行之后的,請求頭部,包含服務器所使用的說明信息;接下來解釋一下這些說明信息的意思:
1、host:請求web服務器的域名地址;
2、Connection: 表示是否持久連接;即keep-alive表示持久連接;
3、Cache-Control:指定請求和響應的緩存機制;no-cache(不能緩存)、no-store(在請求消息中發送將使得請求和響應消息都不使用緩存)、max-age(客戶機可以接收生存期不大于指定時間(以秒為單位)的響應)、max-stale(客戶機可以接收超出超時期間的響應消息)、min-fresh(客戶機可以接收響應時間小于當前時間加上指定時間的響應)、only-if-cached等等;
4、User-Agent: HTTP協議運行的瀏覽器類型的詳細信息;比如:谷歌/67.0.3396.99
5、Accept: 指瀏覽器可以接收的內容類型;
6、Accept-Encoding: 客戶端瀏覽器可以支持的web服務器返回內容壓縮編碼類型;
7、Accept-Language:瀏覽器支持的語言類型,
8、Cookie: 某些網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密);例如當我們上網時,某些網站能準確的推送我們想要的信息。
第三部分:"\r\n" --> 分割header和body部分的分界線
響應消息:
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
響應消息的解析:
第一部分:響應頭,包含:HTTP協議版本、狀態碼(1XX-告知請求處理進度和情況,2XX-成功,3XX-表示需要進一步操作,4XX-客戶端錯誤;5XX-服務器錯誤;)
第二部分:響應頭部,包含服務器發送的附加信息;這里針對幾個重要的進行解析說明:https://www.cnblogs.com/mylanguage/p/5689879.html-->有詳細說明。
第三部分:"\r\n" --分割header和body的分割線
第四部分:包含服務器向客戶端發送的數據。
以上就請求消息和響應消息的內容格式,由瀏覽器或者客戶端將信息根據HTTP協議轉換而來。
3、怎么根據域名獲取服務器的IP地址?
首先web瀏覽器會調用操作系統下的解析器即DNS客戶端,隨后由解析器發送請求給最近的DNS服務器(發送過程與C/S架構模型一樣),若所需域名不在最近的DNS服務器,則由該服務器向域的DNS服務器發送詢查消息,若該域名不在根域DNS服務器上,則讓最近DNS服務器向其下級域發送詢查消息,以此遞歸便能查找到該域名所在域的DNS服務器,最后由請求的DNS服務器發送響應消息到最近的DNS服務器,得到該域名的IP地址;
同時DNS服務器有一個緩存功能,可以記住之前查詢過的域名,如果所查詢的域名和相關信息已經在緩存中,那么久可以直接返回響應。
二、TCP的三次握手和四次揮手
首先我們需要知道在客戶端與服務器基于TCP協議建立聯系時需要經過三次握手,而在斷開連接時需經歷四次揮手的過程,那么我們來看一下該過程是怎樣的?
三次握手:
解析:
首先服務器通常是處于監聽的狀態,而客戶端通常是主動建立連接的一方,即
1、TCP服務器進程先創建傳輸控制塊TCB,時刻準備接受客戶進程的連接請求,此時服務器就進入了LISTEN(監聽)狀態;
2、TCP客戶進程也是先創建傳輸控制塊TCB,然后向服務器發出連接請求報文,這是報文首部中的同部位SYN=1,同時選擇一個初始序列號 seq=x ,此時,TCP客戶端進程進入了 SYN-SENT(同步已發送狀態)狀態。TCP規定,SYN報文段(SYN=1的報文段)不能攜帶數據,但需要消耗掉一個序號。
3、TCP服務器收到請求報文后,如果同意連接,則發出確認報文。確認報文中應該 ACK=1,SYN=1,確認號是ack=x+1,同時也要為自己初始化一個序列號 seq=y,此時,TCP服務器進程進入了SYN-RCVD(同步收到)狀態。這個報文也不能攜帶數據,但是同樣要消耗一個序號。
4、TCP客戶進程收到確認后,還要向服務器給出確認。確認報文的ACK=1,ack=y+1,自己的序列號seq=x+1,此時,TCP連接建立,客戶端進入ESTABLISHED(已建立連接)狀態。TCP規定,ACK報文段可以攜帶數據,但是如果不攜帶數據則不消耗序號。
5、當服務器收到客戶端的確認后也進入ESTABLISHED狀態,此后雙方就可以開始通信了。
四次揮手:
同時我們需要知道的是:通常服務器不會主動斷開連接,而是客戶端主動斷開連接。
1、客戶端進程發出連接釋放報文,并且停止發送數據。釋放數據報文首部,FIN=1,其序列號為seq=u(等于前面已經傳送過來的數據的最后一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
2、服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,并且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處于半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
3、客戶端收到服務器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。
4、服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由于在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認。
5、客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2?
6、服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB后,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。
三、實現web靜態服務器
直接看示例:
import socket
import re
def server_client(server_client_socket):
T+技術學習視頻資源,500+技術電子書,大量高效工具及網站,私信回復【資源】即可免費獲取
HTTP 報文是在應用程序之間發送的數據塊,這些數據塊將通過以文本形式的元信息開頭,用于 HTTP 協議交互。請求端(客戶端)的 HTTP 報文叫做請求報文,響應端(服務器端)的叫做響應報文。 HTTP 報文本身是由多行(用 CR+LF 作換行符)數據構成的字符串文本。
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;
主要描述了客戶端想要如何操作服務端的資源;請求行由三部分構成:
這三個部分通常使用空格(space)來分隔,最后要用 CRLF 換行表示結束。
GET / HTTP/1.1
這個請求行,結合之前的描述,意思就是“服務端妹子你好,我是客戶端蛋蛋,現在我想獲取網站根目錄的默認信息,我這邊用的協議版本是 1.1,麻煩你也要用這個版本回復我哦”
HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務端據此獲取客戶端的信息。與緩存相關的規則信息,均包含在header中,請求頭可大致分為四種類型:通用首部字段、請求首部字段、響應首部字段、實體首部字段。這里先簡單羅列,稍后做具體解釋。
請求體就是 HTTP 要傳輸的內容,HTTP 可以承載很多類型的數字數據:圖片、音頻、視頻、HTML 文檔等。
HTTP 響應報文由狀態行、響應頭部、空行和響應包體(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
狀態行包含了 協議版本、狀態碼以及狀態描述。
和請求報文的請求頭類似,響應頭也由鍵值對組成,每行一對,鍵和值用英文冒號 : 分隔。響應頭域允許服務器傳遞不能放在狀態行的附加信息,這些域主要描述服務器的信息和Request-URI進一步的信息
服務器返回給瀏覽器的響應信息,響應數據的格式是根據服務器來的,常見的響應數據格式有:text/html、application/json等。
常見的響應格式:
在 HTTP 的請求頭和響應頭中都是由首部字段來表示的,首部內容可以為客戶端和服務器分別處理請求和響應提供所需要的信息。
首部字段可以分為通用首部字段、請求首部字段、響應首部字段、實體首部字段。
通用首部字段是指請求報文和響應報文都會使用到的首部字段。
先來看下都有哪些字段:
通過指定 Cache-Control 的指令,就能操作緩存的工作機制。
一般在客戶端和服務端之間還存在一個緩存服務器,如果請求的資源在緩存服務器中有,就不會再請求源服務器,提高了請求響應的效率。
指令的參數可以多選,通過“,”分隔。
Cache-Control: private, max-age=0, no-cache
public 指令
Cache-Control: public
當使用 public 指令時,明確表明其他用戶也可以利用緩存。
private 指令
Cache-Control: private
當指定 private 指令后,響應只以特定的用戶作為對象,這與 public 指令的行為相反。
緩存服務器會對該特定用戶提供資源緩存的服務,對于其他用戶發送過來的請求,代理服務器則不會返回緩存。
no-cache 指令
Cache-Control: no-cache
使用 no-cache 指令可以防止從緩存中拿過期的數據。
在請求中如果包含該指令,則客戶端將不會接收緩存過的響應,中間的緩存服務器會把請求轉發給源服務器。
如果響應中包含該指令,緩存服務器會向源服務器進行資源有效期的確認,如果是過期的資源則不緩存。
no-store 指令
Cache-Control: no-store
該指令規定緩存不能在本地存儲請求或響應的任一部分。這里我們要和上面那個 no-cache 指令要區分開,no-store才是真正不進行緩存,no-cache 只是不對過期的資源進行緩存。
Connection 有兩個作用:控制不再轉發給代理的首部字段、管理持久連接。
Connection: close
當服務器端想明確斷開連接時,則指定 Connection 首部字段的值為 Close。
首部字段 Date 表明創建 HTTP 報文的日期和時間。
首部字段 Trailer 會事先說明在報文主體后記錄了哪些首部字段。該首部字段可應用在 HTTP/1.1 版本分塊傳輸編碼時。
該字段規定了傳輸報文主體時采用的編碼方式。 HTTP/1.1 的傳輸編碼方式僅對分塊傳輸編碼有效。
請求首部字段是從客戶端往服務器端發送請求報文中所使用的字段,用于補充請求的附加信息、客戶端信息、對響應內容相關的優先級等內容。
常用字段具體說明
Accept: text/html,application/xhtml+xml,application/xml;q=0.3
該字段可以通知服務器 客戶端能夠接收處理的媒體類型及優先級。
比如,如果瀏覽器不支持 PNG 圖片的顯示,那 Accept 就不指定 image/png ,而指定可處理的 image/gif 和 image/jpeg 等圖片類型。 若想要給顯示的媒體類型增加優先級,則使用 q=來額外表示權重值。用分號(;)進行分隔。權重值 q 的范圍是 0~1(可精確到小數點 后 3 位),且 1 為最大值。不指定權重 q 值時,默認權重為 q=1.0。
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
通知服務器 客戶端支持的字符集及字符集的相對優先順序。
Accept-Encoding: gzip, deflate
首部字段用來告知服務器 客戶端支持的內容編碼及內容編碼的優先級順序。可一次性指定多種內容編碼。
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
用來告知服務器 客戶端能夠處理的自然 語言集(指中文或英文等),以及自然語言集的相對優先級。可一次 指定多種自然語言集。
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
首部字段 Authorization 是用來告知服務器,客戶端的認證信息(證書值)。
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0)
首部字段 User-Agent 會將創建請求的瀏覽器和用戶代理名稱等信息傳 達給服務器。
由網絡爬蟲發起請求時,有可能會在字段內添加爬蟲作者的電子郵件地址。此外,如果請求經過代理,那么中間也很可能被添加上代理服務器的名稱。
響應首部字段是由服務器端向客戶端返回響應報文中所使用的字段,用于補充響應的附加信息、服務器信息,以及對客戶端的附加要求等信息。
Accept-Ranges: bytes 當不能處理范圍請求時,Accept-Ranges: none
用來告知客戶端服務器是否能處理范圍請 求,以指定獲取服務器端某個部分的資源。
Age: 600
Age 能告知客戶端,源服務器在多久前創建了響應。字段值的單位為秒。
Location: http://www.usagidesign.jp/sample.html
該字段可以將響應接收方引導至某個與請求 URI 位置 不同的資源。
基本上,該字段會配合 3xx :Redirection 的響應,提供重定向的 URI。
Retry-After: 120
告知客戶端應該在多久之后再次發送請求。主要 配合狀態碼 503 Service Unavailable 響應,或 3xx Redirect 響應一起使 用。
Server: Apache/2.2.17 (Unix)
告知客戶端當前服務器上安裝的 HTTP 服務器應用程序的信息。
實體首部字段是包含在請求報文和響應報文中的實體部分所使用的首部,用于補充內容的更新時間等與實體相關的信息。
Allow: GET, HEAD
用于通知客戶端能夠支持 Request-URI 指定資源的所有 HTTP 方法。
Content-Encoding: gzip
會告知客戶端服務器對實體的主體部分選用的內容編碼方式。
Content-Language: zh-CN
首部字段 Content-Language 會告知客戶端,實體主體使用的自然語言。
Content-Length: 15000
表明了實體主體部分的大小(單位是字 節)。
Content-Type: text/html; charset=UTF-8
說明了實體主體內對象的媒體類型。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。