一、什么是http
超文本傳輸協(xié)議( Hypertext Transfer Protocol ,HTTP)的請(qǐng)求和響應(yīng)消息中,協(xié)議頭部分的那些組件。用來準(zhǔn)確描述正在獲取的資源、服務(wù)器或者客戶端的行為,定義了HTTP事務(wù)中的具體操作參數(shù)。
二、什么是http消息頭
客戶端請(qǐng)求(Request)或服務(wù)器響應(yīng)(Response)時(shí)傳遞的,位請(qǐng)求或響應(yīng)的第一行,HTTP消息體(請(qǐng)求或響應(yīng)的內(nèi)容)是其后傳輸。HTTP消息頭,以明文的字符串格式傳送,是以冒號(hào)分隔的鍵/值對(duì),如:Accept-Charset: utf-8,每一個(gè)消息頭最后以回車符(CR)和換行符(LF)結(jié)尾。
三、常用的http請(qǐng)求頭
Accept: text/html? // 瀏覽器可以接受服務(wù)器回發(fā)的類型為 text/html。Accept: */* ? 代表瀏覽器可以處理所有類型,(一般瀏覽器發(fā)給服務(wù)器都是發(fā)這個(gè))。
Accept-Encoding: gzip, deflate // 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate)。
Accept-Language: zh-CN,zh;q=0.9 ?瀏覽器申明自己接收的語言。
Connection: keep-alive //?當(dāng)一個(gè)網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問這個(gè)服務(wù)器上的網(wǎng)頁,會(huì)繼續(xù)使用這一條已經(jīng)建立的連接。 Connection: close 代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉, 當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。
Content-Type: application/json? //?當(dāng)客戶端向服務(wù)端發(fā)起HTTP的POST請(qǐng)求時(shí),客戶端告訴服務(wù)端,我們發(fā)送的數(shù)據(jù)類型,方便服務(wù)端去解析數(shù)據(jù)。HTTP 中的 post 請(qǐng)求使用最多的Content-Type 類型是: application/json
Content-Type 的幾種常見類型有:
①. application/x-www-form-urlencoded? //?說明:最常見的 POST 提交數(shù)據(jù)的方式,原生Form表單,如果不設(shè)置 enctype 屬性,默認(rèn)為application/x-www-form-urlencoded 方式提交數(shù)據(jù)。
②. multipart/form-data? // 說明:一個(gè)常見的 POST 數(shù)據(jù)提交的方式, Form 表單的 enctype 設(shè)置為multipart/form-data,它會(huì)將表單的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開。
它既可以上傳鍵值對(duì),也可以上傳文件,甚至多個(gè)文件。
③. application/json? // 說明:用來告訴服務(wù)端消息主體是序列化后的 JSON 字符串,其中一個(gè)好處就是JSON 格式支持比鍵值對(duì)復(fù)雜得多的結(jié)構(gòu)化數(shù)據(jù)。
④. text/xml? // 說明:提供統(tǒng)一的方法來描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)
⑤. binary(application/octet-stream) // 說明:用來傳輸二進(jìn)制文件類型
請(qǐng)求頭設(shè)置方法如下:
// axios請(qǐng)求體中設(shè)置
axios({
? url: '/api/user',
? method: 'post',
? headers: {
? ? 'Content-Type': 'application/json'
? }
})
// 請(qǐng)求攔截器中設(shè)置
http.interceptors.request.use(
? config => {
?? ?config.headers['Content-Type'] = 'application/json'
? }
)
Host: www.baidu.com // 請(qǐng)求報(bào)頭域主要用于指定被請(qǐng)求資源的Internet主機(jī)和端口號(hào),它通常從HTTP URL中提取出來的。
Origin: http://47.104.200.167:8076? //? 組成:協(xié)議 + 域名 + 端口號(hào)
指示了請(qǐng)求來自于哪個(gè)站點(diǎn),該字段僅指示服務(wù)器名稱,不包含任何路徑信息,除了不包含路徑信息,該字段與 Referer 首部字段相似,瀏覽器自動(dòng)添加到http請(qǐng)求 Header 中,無需手動(dòng)設(shè)置。
Referer: https://www.baidu.com/?tn=62095104_8_oem_dg? // 當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候,一般會(huì)帶上Referer,告訴服務(wù)器我是從哪個(gè)頁面鏈接過來的,服務(wù)器籍此可以獲得一些信息用于處理。
User-AgentUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36? // 告訴HTTP服務(wù)器, 客戶端使用的操作系統(tǒng)和瀏覽器的名稱和版本。
Cache-ControlCache-Control: private? // 默認(rèn)為private 響應(yīng)只能夠作為私有的緩存,不能再用戶間共享。
Cache-Control: public // 響應(yīng)會(huì)被緩存,并且在多用戶間共享。正常情況, 如果要求HTTP認(rèn)證,響應(yīng)會(huì)自動(dòng)設(shè)置為 private。
Cache-Control: must-revalidate? // 響應(yīng)在特定條件下會(huì)被重用,以滿足接下來的請(qǐng)求,但是它必須到服務(wù)器端去驗(yàn)證它是不是仍然是最新的。Cache-Control:no-cache 響應(yīng)不會(huì)被緩存,而是實(shí)時(shí)向服務(wù)器端請(qǐng)求資源。
Cache-Control: max-age=10? // 設(shè)置緩存最大的有效時(shí)間,但是這個(gè)參數(shù)定義的是時(shí)間大?。ū热纾?0)而不是確定的時(shí)間點(diǎn)。單位是[秒 seconds]。
Cache-Control: no-store? // 在任何條件下,響應(yīng)都不會(huì)被緩存,并且不會(huì)被寫入到客戶端的磁盤里,這也是基于安全考慮的某些敏感的響應(yīng)才會(huì)使用這個(gè)。
Cookie: '123456abcefg' //?Cookie是用來存儲(chǔ)一些用戶信息以便讓服務(wù)器辨別用戶身份的(大多數(shù)需要登錄的網(wǎng)站上面會(huì)比較常見),比如cookie會(huì)存儲(chǔ)一些用戶的用戶名和密碼,當(dāng)用戶登錄后就會(huì)在客戶端產(chǎn)生一個(gè)cookie來存儲(chǔ)相關(guān)信息,這樣瀏覽器通過讀取cookie的信息去服務(wù)器上驗(yàn)證并通過后會(huì)判定你是合法用戶,從而允許查看相應(yīng)網(wǎng)頁。當(dāng)然cookie里面的數(shù)據(jù)不僅僅是上述范圍,還有很多信息可以存儲(chǔ)是cookie里面,比如sessionid等。
Range: bytes=0-5? // 指定第一個(gè)字節(jié)的位置和最后一個(gè)字節(jié)的位置。用于告訴服務(wù)器自己想取對(duì)象的哪部分。
四、常用的http響應(yīng)頭
Access-Control-Allow-Origin: *? ?// *號(hào)代表所有網(wǎng)站可以跨域資源共享,如果當(dāng)前字段為*那么Access-Control-Allow-Credentials就不能為trueAccess-Control-Allow-Origin: www.baidu.com 指定哪些網(wǎng)站可以跨域資源共享。
Access-Control-Allow-Methods:GET, POST, OPTIONS? // 允許哪些方法來訪問。
Access-Control-Allow-Credentials: true? // 是否允許發(fā)送cookie。默認(rèn)情況下,Cookie不包括在CORS請(qǐng)求之中。設(shè)為true,即表示服務(wù)器明確許可,Cookie可以包含在請(qǐng)求中,一起發(fā)給服務(wù)器。這個(gè)值也只能設(shè)為true,如果服務(wù)器不要瀏覽器發(fā)送Cookie,刪除該字段即可。如果access-control-allow-origin為*,當(dāng)前字段就不能為true。
Cache-Control: private? // 默認(rèn)為private ?響應(yīng)只能夠作為私有的緩存,不能再用戶間共享
Cache-Control: public? // 瀏覽器和緩存服務(wù)器都可以緩存頁面信息。
Cache-Control: must-revalidate? // 對(duì)于客戶機(jī)的每次請(qǐng)求,代理服務(wù)器必須想服務(wù)器驗(yàn)證緩存是否過時(shí)。
Cache-Control: no-cache? // 瀏覽器和緩存服務(wù)器都不應(yīng)該緩存頁面信息。
Cache-Control: max-age=10? // 是通知瀏覽器10秒之內(nèi)不要煩我,自己從緩沖區(qū)中刷新。
Cache-Control: no-store? // 請(qǐng)求和響應(yīng)的信息都不應(yīng)該被存儲(chǔ)在對(duì)方的磁盤系統(tǒng)中。
Content-Type:text/html;charset=UTF-8? // 告訴客戶端,資源文件的類型,還有字符編碼,客戶端通過utf-8對(duì)資源進(jìn)行解碼,然后對(duì)資源進(jìn)行html解析。通常我們會(huì)看到有些網(wǎng)站是亂碼的,往往就是服務(wù)器端沒有返回正確的編碼。
Content-Encoding: gzip? // 告訴客戶端,服務(wù)端發(fā)送的資源是采用gzip編碼的,客戶端看到這個(gè)信息后,應(yīng)該采用gzip對(duì)資源進(jìn)行解碼。
Date: Tue, 03 Apr 2018 03:52:28 GMT? // 這個(gè)是服務(wù)端發(fā)送資源時(shí)的服務(wù)器時(shí)間,GMT是格林尼治所在地的標(biāo)準(zhǔn)時(shí)間。http協(xié)議中發(fā)送的時(shí)間都是GMT的,這主要是解決在互聯(lián)網(wǎng)上,不同時(shí)區(qū)在相互請(qǐng)求資源的時(shí)候,時(shí)間混亂問題。
Server:Tengine/1.4.6? // 這個(gè)是服務(wù)器和相對(duì)應(yīng)的版本,只是告訴客戶端服務(wù)器信息。
Transfer-Encoding:chunked? // 這個(gè)響應(yīng)頭告訴客戶端,服務(wù)器發(fā)送的資源的方式是分塊發(fā)送的。一般分塊發(fā)送的資源都是服務(wù)器動(dòng)態(tài)生成的,在發(fā)送時(shí)還不知道發(fā)送資源的大小,所以采用分塊發(fā)送,每一塊都是獨(dú)立的,獨(dú)立的塊都能標(biāo)示自己的長(zhǎng)度,最后一塊是0長(zhǎng)度的,當(dāng)客戶端讀到這個(gè)0長(zhǎng)度的塊時(shí),就可以確定資源已經(jīng)傳輸完了。
Expires:Sun, 1 Jan 2000 01:00:00 GMT 這個(gè)響應(yīng)頭也是跟緩存有關(guān)的,告訴客戶端在這個(gè)時(shí)間前,可以直接訪問緩存副本,很顯然這個(gè)值會(huì)存在問題,因?yàn)榭蛻舳撕头?wù)器的時(shí)間不一定會(huì)都是相同的,如果時(shí)間不同就會(huì)導(dǎo)致問題。所以這個(gè)響應(yīng)頭是沒有Cache-Control:max-age=*這個(gè)響應(yīng)頭準(zhǔn)確的,因?yàn)閙ax-age=date中的date是個(gè)相對(duì)時(shí)間,不僅更好理解,也更準(zhǔn)確。
Connection:keep-alive? // 這個(gè)字段作為回應(yīng)客戶端的Connection:keep-alive,告訴客戶端服務(wù)器的tcp連接也是一個(gè)長(zhǎng)連接,客戶端可以繼續(xù)使用這個(gè)tcp連接發(fā)送http請(qǐng)求。
ETag: "737060cd8c284d8af7ad3082f209582d"? // 就是一個(gè)對(duì)象(比如URL)的標(biāo)志值,就一個(gè)對(duì)象而言,比如一個(gè)html文件,如果被修改了,其Etag也會(huì)別修改,所以,ETag的作用跟Last-Modified的作用差不多,主要供WEB服務(wù)器判斷一個(gè)對(duì)象是否改變了。比如前一次請(qǐng)求某個(gè)html文件時(shí),獲得了其 ETag,當(dāng)這次又請(qǐng)求這個(gè)文件時(shí),瀏覽器就會(huì)把先前獲得ETag值發(fā)送給WEB服務(wù)器,然后WEB服務(wù)器會(huì)把這個(gè)ETag跟該文件的當(dāng)前ETag進(jìn)行對(duì)比,然后就知道這個(gè)文件有沒有改變了。
Refresh: 5; url=http://baidu.com? ?// 用于重定向,或者當(dāng)一個(gè)新的資源被創(chuàng)建時(shí)。默認(rèn)會(huì)在5秒后刷新重定向。
http請(qǐng)求頭示例↓
http響應(yīng)頭示例↓文章來源:http://www.zghlxwxcb.cn/news/detail-721650.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-721650.html
到了這里,關(guān)于HTTP常用請(qǐng)求頭和響應(yīng)頭有哪些?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!