本文向大家分享http協(xié)議相關(guān)基礎(chǔ)知識(shí),了解http的請(qǐng)求方法,相關(guān)http狀態(tài)碼,及http報(bào)文的介紹,希望對(duì)大家在工作上能有所幫助。
一.HTTP協(xié)議介紹
HTTP協(xié)議,全稱HyperText Transfer Protocol,中文名為超文本傳輸協(xié)議,是互聯(lián)網(wǎng)中最常用的一種網(wǎng)絡(luò)協(xié)議。HTTP的重要應(yīng)用之一是WWW服務(wù)。設(shè)計(jì)HTTP協(xié)議最初的目的就是提供一種發(fā)布和接收HTML(一種頁(yè)面標(biāo)記語(yǔ)言)頁(yè)面的方法。
HTTP協(xié)議是互聯(lián)網(wǎng)上常用的通信協(xié)議之一。它有很多的應(yīng)用,但最流行的就是用于Web瀏覽器和Web服務(wù)器之間的通信,即WWW應(yīng)用或稱Web應(yīng)用。
www,全稱World Wide Web,常稱為Web,中文譯為“萬(wàn)維網(wǎng)”。它是目前互聯(lián)網(wǎng)上最受用戶歡迎的信息服務(wù)形式。HTTP協(xié)議的WWW服務(wù)應(yīng)用的默認(rèn)端口為80,另外一個(gè)加密的WWW服務(wù)應(yīng)用https的默認(rèn)端口為443,主要用于網(wǎng)銀、支付等和錢(qián)相關(guān)的業(yè)務(wù)。當(dāng)今,HTTP服務(wù)、WWW服務(wù)、Web服務(wù)三者的概念已經(jīng)混淆了,在本書(shū)中也是為相同,都是指當(dāng)下最常見(jiàn)的網(wǎng)站服務(wù)應(yīng)用。
二.HTTP協(xié)議版本
HTTP協(xié)議從誕生之初到現(xiàn)在已經(jīng)經(jīng)歷了若干個(gè)版本,其中最主要的版本為HTTP/1.0、HTTP/1.1。HTTP/1.0是第一個(gè)得到廣泛使用的版本,而HTTP/1.1為當(dāng)前使用的主流版本。
1. HTTP/1.0簡(jiǎn)介
HTTP/1.0是第一個(gè)的得到廣泛使用的HTTP版本。HTTP/1.0在HTTP/0.9的基礎(chǔ)上增加了HTTP請(qǐng)求頭,可支持更多的請(qǐng)求方法,并且能對(duì)多媒體對(duì)象進(jìn)行處理。HTTP/1.0使得包含生動(dòng)圖片的web頁(yè)面和交互式表格成為可能,而正是這些頁(yè)面和表格促使互聯(lián)網(wǎng)為人們廣泛地接受。HTTP/1.0規(guī)定瀏覽器與服務(wù)器只保持短暫的連接,瀏覽器的每次請(qǐng)求都需要與服務(wù)器建立一個(gè)TCP連接,服務(wù)器完成請(qǐng)求處理后即斷開(kāi)TCP連接,服務(wù)器不跟蹤每個(gè)客戶,也不記錄過(guò)去的請(qǐng)求。
2. HTTP/1.1簡(jiǎn)介
HTTP/1.1的重點(diǎn)是修復(fù)HTTP設(shè)計(jì)中的缺陷,從擴(kuò)展性,緩存處理,帶寬優(yōu)化,持久連接,host頭,錯(cuò)誤通知,消息傳遞,內(nèi)容協(xié)商等多個(gè)方面做了相關(guān)改進(jìn)。HTTP/1.1是當(dāng)前互聯(lián)網(wǎng)主流的HTTP版本。
在連接方面,HTTP/1.1支持持久連接,在一個(gè)TCP連接上可以傳送多個(gè)HTTP請(qǐng)求和響應(yīng),減少了建立和關(guān)閉連接的消耗和時(shí)間延遲。
在請(qǐng)求頭方面,HTTP/1.1增加了更多的請(qǐng)求頭和響應(yīng)頭信息,用以增強(qiáng)HTTP功能。例如:host主機(jī)頭功能,可以讓W(xué)eb瀏覽器使用主機(jī)頭名來(lái)明確表示要訪問(wèn)服務(wù)器上的哪個(gè)WEB站點(diǎn),這樣就可以使用Web服務(wù)器在同一個(gè)IP地址和端口號(hào)上配置多個(gè)虛擬Web站點(diǎn)。
HTTP/1.1的持續(xù)連接,也需要增加新的請(qǐng)求頭來(lái)幫助實(shí)現(xiàn),例如,Connection請(qǐng)求頭的值為Keep-Alive時(shí),表示客戶端通知服務(wù)器返回本次請(qǐng)求結(jié)果后保持連接;Connection請(qǐng)求頭的值為close時(shí),表示客戶端通知服務(wù)器返回本次請(qǐng)求結(jié)果后關(guān)閉連接。HTTP/1.1還提供了與身份認(rèn)證,狀態(tài)管理和Cache緩存等機(jī)制相關(guān)的請(qǐng)求頭和響應(yīng)頭等。
2.1 HTTP請(qǐng)求方法
在HTTP通信中,每個(gè)HTTP請(qǐng)求報(bào)文都包含一個(gè)方法。用以告訴Web服務(wù)器端需要執(zhí)行哪些具體的動(dòng)作,這些動(dòng)作包括:獲取指定Web頁(yè)面、提交內(nèi)容到服務(wù)器、刪除服務(wù)器上資源文件等,這些HTTP請(qǐng)求報(bào)文中包含的方法被稱為HTTP請(qǐng)求方法。
常用的HTTP請(qǐng)求方法
HTTP方法 |
作用描述 |
GET |
客戶端請(qǐng)求指定資源信息,服務(wù)器返回指定資源 |
HEAD |
只請(qǐng)求響應(yīng)報(bào)文中的HTTP首部 |
POST |
將客戶端的數(shù)據(jù)提交到服務(wù)器,例:注冊(cè)表單 |
PUT |
用從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔內(nèi)容。 |
DELETE |
請(qǐng)求服務(wù)器刪除Request-URI所表示的資源。 |
MOVE |
請(qǐng)求服務(wù)器將指定的頁(yè)面移至另一個(gè)網(wǎng)絡(luò)地址。 |
2.2 HTTP狀態(tài)碼
1. HTTP狀態(tài)碼介紹
HTTP狀態(tài)碼(HTTP Status Code)是用來(lái)表示W(wǎng)eb服務(wù)器響應(yīng)HTTP請(qǐng)求狀態(tài)的數(shù)字代碼。每當(dāng)Web客戶端向Web服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求時(shí),Web服務(wù)器都會(huì)返回一個(gè)狀態(tài)響應(yīng)代碼。這個(gè)狀態(tài)碼是一個(gè)三位數(shù)字代碼,作用是告知Web客戶端此次請(qǐng)求是否成功,或者是否要采取其他的動(dòng)作方式。
HTTP協(xié)議1.1版本中的狀態(tài)碼可以分為五大類。
不同范圍的狀態(tài)碼及其對(duì)應(yīng)的作用
狀態(tài)碼范圍 |
作用描述 |
100 - 199 |
用于指定客戶端相應(yīng)的某些動(dòng)作 |
200 - 299 |
用于表示請(qǐng)求成功 |
300 - 399 |
用于已經(jīng)移動(dòng)的文件,并且常被包含在定位頭信息中指定新的地址信息 |
400 - 499 |
用于指出客戶端的錯(cuò)誤 |
500 - 599 |
用于指出服務(wù)端的錯(cuò)誤 |
HTTP響應(yīng)的狀態(tài)碼種類很多,但是在實(shí)際工作場(chǎng)景中,經(jīng)常遇到的狀態(tài)碼卻不多,生產(chǎn)場(chǎng)景下常見(jiàn)的重要狀態(tài)碼及對(duì)應(yīng)的作用
生產(chǎn)場(chǎng)景常見(jiàn)的狀態(tài)碼及其對(duì)應(yīng)的作用
狀態(tài)代碼 |
詳細(xì)描述說(shuō)明 |
200 - OK |
服務(wù)器成功返回網(wǎng)頁(yè),這是成功的HTTP請(qǐng)求返回的標(biāo)準(zhǔn)狀態(tài)碼 |
301 - Moved Permanently |
永久跳轉(zhuǎn),所請(qǐng)求的網(wǎng)頁(yè)將永久跳轉(zhuǎn)到被設(shè)定的新位置, |
401 - Forbidden |
禁止訪問(wèn),雖然這個(gè)請(qǐng)求是合法的,但是服務(wù)器端因?yàn)槠ヅ淞祟A(yù)先設(shè)置的規(guī)則而拒絕響應(yīng)客戶端的請(qǐng)求,此類問(wèn)題一般為服務(wù)器或服務(wù)權(quán)限配置不當(dāng)所致。 |
404 - Not Found |
服務(wù)器找不到客戶端請(qǐng)求的指定頁(yè)面,可能是客戶端請(qǐng)求了服務(wù)器上不存在的資源所致。 |
500 - Internal Server Error |
內(nèi)部服務(wù)器錯(cuò)誤,服務(wù)器遇到了意料不到的情況,不能完成客戶的請(qǐng)求。 這是一個(gè)較為籠統(tǒng)的報(bào)錯(cuò),一般為服務(wù)器的設(shè)置或內(nèi)部程序問(wèn)題導(dǎo)致。 例如:SELinux開(kāi)啟,而又沒(méi)有為HTTP設(shè)置規(guī)則許可,客戶端訪問(wèn)就是500 |
502 - Bad Gateway(重點(diǎn)) |
壞的網(wǎng)關(guān),一般是代理服務(wù)器請(qǐng)求后端服務(wù)時(shí),后端服務(wù)不可用或沒(méi)有完成響應(yīng)網(wǎng)關(guān)服務(wù)器。這通常為反向代理服務(wù)器下面的節(jié)點(diǎn)出問(wèn)題所致。 反向代理服務(wù)器無(wú)法與后面的web服務(wù)節(jié)點(diǎn)服務(wù)器建立聯(lián)系 |
503 - Service Unavailable |
服務(wù)當(dāng)前不可用,可能是服務(wù)器超載或停機(jī)維護(hù)導(dǎo)致的,或者是反向代理服務(wù)器后面沒(méi)有可以提供服務(wù)的節(jié)點(diǎn) |
504 - Gateway Timeout |
網(wǎng)關(guān)超時(shí),一般是網(wǎng)關(guān)代理服務(wù)器請(qǐng)求后端服務(wù)時(shí),后端服務(wù)沒(méi)有在特定的時(shí)間內(nèi)完成處理請(qǐng)求。數(shù)是服務(wù)器過(guò)載導(dǎo)致沒(méi)有在指定的時(shí)間內(nèi)返回?cái)?shù)據(jù)給前端代理服務(wù)器。 |
2. HTTP狀態(tài)碼的命令行查看
可以通過(guò)curl命令(附帶相關(guān)參數(shù))在Linux命令行查看HTTP相應(yīng)的數(shù)字狀態(tài)碼命令如下:
[root@localhost ~]# curl -I www.baidu.com HTTP/1.1 200 OK <- 200即為狀態(tài)碼 Server: openresty/1.13.6.1 Date: Thu, 22 Dec 2022 06:37:17 GMT Content-Type: text/html;charset=utf-8 Content-Length: 5537 Connection: keep-alive Cache-Control: private Content-Encoding: gzip X-AspNet-Version: 4.0.30319 X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 1;mode=block X-Powered-By: ASP.NET [root@localhost ~]# curl -I -s -w "%{http_code}\n"-o /dev/null www.baidu.com 200 <- 200即為狀態(tài)碼
2.2.1 HTTP報(bào)文
HTTP報(bào)文中有很多行內(nèi)容,這些含的字段都是由一些ASCII碼串組成,但各個(gè)字段的長(zhǎng)度是不同的。HTTP報(bào)文可分為兩種,一種是從Web客戶端發(fā)往Web服務(wù)器的HTTP報(bào)文,稱為請(qǐng)求報(bào)文(Request Message)。另外一種是從Web服務(wù)器發(fā)往Web客戶端的報(bào)文,稱為響應(yīng)報(bào)文(Response Message),HTTP的請(qǐng)求和響應(yīng)報(bào)文的格式類似。
1. HTTP請(qǐng)求報(bào)文(Request Message)介紹
HTTP請(qǐng)求報(bào)文由請(qǐng)求行、請(qǐng)求頭部(header)、空行和請(qǐng)求報(bào)文主體幾個(gè)部分組成。
HTTP請(qǐng)求報(bào)文格式說(shuō)明
報(bào)文格式 |
報(bào)文信息 |
請(qǐng)求行 |
請(qǐng)求方法URL協(xié)議版本 |
請(qǐng)求頭 |
字段名1:值1 字段名2:值2 ...... 例如: Accept:image/gif,image/jpeg Accept-Language:zh-cn ...... |
空行 |
空白無(wú)內(nèi)容 |
請(qǐng)求報(bào)文主體 |
GET方法沒(méi)有請(qǐng)求報(bào)文主體,POST方法才有 |
下面對(duì)HTTP請(qǐng)求報(bào)文的每個(gè)部分逐一闡述:
1) 請(qǐng)求行
請(qǐng)求行請(qǐng)求報(bào)文的第一行,用來(lái)說(shuō)明客戶端想要做什么。內(nèi)容有請(qǐng)求方法字段、URL字段和HTTP協(xié)議版本字段組成,它們之間用空格分隔。下面以GET/index.html HTTP/1.1為例來(lái)說(shuō)明請(qǐng)求報(bào)文的起始請(qǐng)求行信息詳情
請(qǐng)求報(bào)文的起始請(qǐng)求行信息
請(qǐng)求方法字段示例 |
URL字段示例 |
HTTP協(xié)議版本 |
GET |
/index.html |
HTTP/1.1 |
2) 請(qǐng)求頭部
請(qǐng)求頭部由關(guān)鍵字/值對(duì)組成,每行一對(duì),關(guān)鍵字和值用英文冒號(hào)“:”分隔。請(qǐng)求頭部的作用是通過(guò)客戶端把請(qǐng)求的相關(guān)信息告訴給服務(wù)器。
常見(jiàn)的請(qǐng)求頭部信息
請(qǐng)求頭信息 |
說(shuō) 明 |
Accept:image/gif,image/jpeg |
媒體類型 |
Accept-Language:zh-cn |
語(yǔ)言類型 |
Accept-Encoding:gzip,deflate |
支持壓縮 |
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT;...) |
客戶端類型 |
Host:www.baidu.com |
主機(jī)名 |
與請(qǐng)求報(bào)文相關(guān)的最常用的請(qǐng)求頭是Content-Type和Content-Length。
3) 空行
最后一個(gè)請(qǐng)求頭部信息之后是一個(gè)空行,通過(guò)發(fā)送回車符和換行符,通知Web服務(wù)器空行以下不會(huì)有請(qǐng)求頭部的信息了。
4) 請(qǐng)求報(bào)文主體
請(qǐng)求報(bào)文主體包含了要發(fā)送給Web服務(wù)器的數(shù)據(jù)信息。請(qǐng)求報(bào)文主體不會(huì)應(yīng)用于HTTP的GET命令方法,而是應(yīng)用與POST方法。POST方法適用于需要客戶填寫(xiě)表單的場(chǎng)合。請(qǐng)求報(bào)文的主體信息此處就不再舉例了。
2. HTTP響應(yīng)報(bào)文(Response Message)介紹
HTTP響應(yīng)報(bào)文由起始行、響應(yīng)頭部(header)、空行和相應(yīng)報(bào)文主體這幾個(gè)部分組成,和HTTP請(qǐng)求報(bào)文格式類似。
HTTP響應(yīng)報(bào)文的一般格式
報(bào)文格式 |
報(bào)文信息 |
起始行 |
協(xié)議及版本號(hào)、數(shù)字狀態(tài)碼、狀態(tài)信息 |
響應(yīng)頭部 |
字段名1:值1 字段名2:值2 ...... 例如: Content-Type:text/html,charset=utf-8 Content-Language:78 ...... |
空行 |
空白無(wú)內(nèi)容 |
響應(yīng)報(bào)文主體 |
<html> <head><title>test</title></head> <body> 123 </body> </html> |
下面對(duì)響應(yīng)報(bào)文的每個(gè)部分逐一闡述。
1) 起始行
相應(yīng)報(bào)文的起始行也叫狀態(tài)行,用來(lái)說(shuō)明服務(wù)器響應(yīng)客戶端請(qǐng)求的狀況。一般為協(xié)議及版本號(hào)、數(shù)字狀態(tài)碼、狀態(tài)情況。例如:HTTP/1.1 200 OK。
2) 響應(yīng)頭部
和請(qǐng)求報(bào)文類似,起始行的后面一般有若干個(gè)頭部字段。每個(gè)頭部字段都包含一個(gè)名字和一個(gè)值,兩者之間用冒號(hào)分隔。頭部結(jié)尾也是一個(gè)空行結(jié)束的。常見(jiàn)的頭部信息有:
Content-Type:text/html,charset=utf-8 Content-Language:78 ......
3) 空行
最后一個(gè)響應(yīng)頭部信息之后是一個(gè)空行,通過(guò)發(fā)送回車符和換行符,通知客戶端空行下文無(wú)頭部信息了。
4) 響應(yīng)報(bào)文主體
響應(yīng)報(bào)文主體中裝載了要返回給客戶端的數(shù)據(jù)。這些數(shù)據(jù)可以是文本,也可以是二進(jìn)制的(如圖片、視頻)
2.2.2 HTTP協(xié)議原理及重點(diǎn)分析
HTTP協(xié)議屬于OSI模型中的第七層應(yīng)用層協(xié)議,HTTP協(xié)議的重要應(yīng)用就是WWW服務(wù)應(yīng)用,下面就以WWW服務(wù)應(yīng)用為例介紹HTTP協(xié)議的通信原理。以HTTP協(xié)議進(jìn)行通信時(shí),需要有客戶端(即終端用戶)和服務(wù)器端(即Web服務(wù)器),在Web客戶端向Web服務(wù)器發(fā)送請(qǐng)求報(bào)文之前,先要通過(guò)TCP/IP協(xié)議在Web客戶端和服務(wù)端之間建立一個(gè)TCP/IP連接,整個(gè)HTTP協(xié)議請(qǐng)求的工作流程如下:
1) 終端客戶在Web瀏覽器地址欄輸入訪問(wèn)地址http://www.baidu.com
2) Web瀏覽器請(qǐng)求DNS服務(wù)器把域名www.baidu.com轉(zhuǎn)換為Web服務(wù)器的IP地址,此處的解析過(guò)程就是DNS解析的原理流程
3) Web瀏覽器將端口號(hào)(默認(rèn)80)從訪問(wèn)地址(URL)中解析出來(lái);
4) Web瀏覽器通過(guò)解析后的IP地址及端口號(hào)與Web服務(wù)器之間建立一條TCP連接;
5) 建立TCP連接后,Web瀏覽器向Web服務(wù)器發(fā)送一條HTTP請(qǐng)求報(bào)文
6) Web服務(wù)器響應(yīng)并讀取瀏覽器的請(qǐng)求信息,然后返回一條HTTP響應(yīng)報(bào)文文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-499237.html
7) Web服務(wù)器關(guān)閉HTTP連接,關(guān)閉TCP連接,Web瀏覽器顯示訪問(wèn)的網(wǎng)站內(nèi)容到屏幕上。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-499237.html
到了這里,關(guān)于了解HTTP協(xié)議,讓你的網(wǎng)站速度更快的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!