做網(wǎng)站時(shí)用插件需要注明嗎百度seo關(guān)鍵詞優(yōu)化排行
- 一、HTTP介紹
- 二、HTTP工作原理
- HTTP三點(diǎn)注意事項(xiàng)
- 三、HTTP消息結(jié)構(gòu)
- 四、客戶端請(qǐng)求消息
- 五、服務(wù)器響應(yīng)消息
- HTTP請(qǐng)求方法
- 七、HTTP響應(yīng)頭信息
- 八、HTTP狀態(tài)碼(HTTP Status Code)
- 下面是常見的HTTP狀態(tài)碼:
- HTTP狀態(tài)碼分類
- HTTP狀態(tài)碼列表
一、HTTP介紹
HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于萬維網(wǎng)(www.world wide web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議
HTTP 是基于TCP/IP(三次握手,四次揮手)通信協(xié)議來傳輸數(shù)據(jù)(HTML文件,圖片文件,查詢結(jié)果等)
TCP:可靠的,丟包重傳
UTP:不可靠的,直播,視頻 ,VNC
二、HTTP工作原理
HTTP協(xié)議工作于客戶端-服務(wù)器(c/s)架構(gòu)上,瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)端發(fā)送所有請(qǐng)求 Web服務(wù)器有:Apache服務(wù)器,Nginx,IIS服務(wù)器(window)等
Web服務(wù)器收到請(qǐng)求后,向客戶端發(fā)送響應(yīng)信息
HTTP默認(rèn)端口為80,但是也可以修改為其他端口
HTTP三點(diǎn)注意事項(xiàng)
- HTTP是無連接的: 無連接的含義是每次連接只處理一個(gè)請(qǐng)求,服務(wù)器處理完客戶的請(qǐng)求后,及斷開連接,采用這種方式可以節(jié)省傳輸時(shí)間
- HTTP是媒體獨(dú)立的: 這意味著只要客戶端和服務(wù)器知道如何處理數(shù)據(jù)內(nèi)容,任何類型的數(shù)據(jù)都可以通過HTTP發(fā)送,客戶端以及服務(wù)器指定使用合適的MIME -type內(nèi)容類型
- HTTP是無狀態(tài)的: HTTP協(xié)議是無狀態(tài)協(xié)議,無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力,缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,必須重傳,這樣可能導(dǎo)致每次傳輸數(shù)計(jì)量增加,另一方面,在服務(wù)器不需要先前信息時(shí)他的應(yīng)答就比較快
三、HTTP消息結(jié)構(gòu)
HTTP是基于客戶端、服務(wù)器(c/s)的架構(gòu)模型 ,通過一個(gè)可靠的鏈接來交換信息,是一個(gè)無轉(zhuǎn)態(tài)的請(qǐng)求/響應(yīng)協(xié)議
一個(gè)HTTP"客戶端"是一個(gè)應(yīng)用程序 (web瀏覽器或其他任何客戶端),通過連接到服務(wù)器達(dá)到向服務(wù)器發(fā)送一個(gè)或者多個(gè)HTTP的請(qǐng)求的目的。
一個(gè)HTTP"服務(wù)器"同樣也是一個(gè)應(yīng)用程序(通常是一個(gè)web服務(wù),如apache,web服務(wù)器),通過接收客戶端的請(qǐng)求并向客戶端發(fā)送HTTP響應(yīng)數(shù)據(jù)。
HTTP使用統(tǒng)一資源標(biāo)識(shí)符 來傳輸數(shù)據(jù)和建立連接。
一旦建立連接后,數(shù)據(jù)消息就通過類似internet郵件所使用的格式和多用途internet郵件擴(kuò)展來傳送。
四、客戶端請(qǐng)求消息
客戶端 發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器的請(qǐng)求消息包括以下的格式:請(qǐng)求行(requestline),請(qǐng)求頭部(header),空行和請(qǐng)求數(shù)據(jù)四個(gè)部分,下圖給出了請(qǐng)求報(bào)文的一般格式
五、服務(wù)器響應(yīng)消息
HTTP響應(yīng)也由四個(gè)部分組成,分別是:狀態(tài)行,消息報(bào)頭,空行和響應(yīng)正文
HTTP請(qǐng)求方法
根據(jù)HTTP標(biāo)準(zhǔn),HTTP請(qǐng)求可以使用多種請(qǐng)求方法
HTTP1.0 定義了三種請(qǐng)求方法:GET,POST,HEAD方法
HTTP1.1增加了五種請(qǐng)求方法:OPTIONS,PUT,DELETE,TRACE,CONNECT方法
重點(diǎn)方法:
GET:單純獲取數(shù)據(jù)(獲取一個(gè)index.html頁面)
POST:上傳/創(chuàng)建文件(會(huì)產(chǎn)生新的數(shù)據(jù))
PUT:保存數(shù)據(jù)(覆蓋 、更新文件圖片等,不會(huì)產(chǎn)生新的數(shù)據(jù))
DELECT:刪除
七、HTTP響應(yīng)頭信息
HTTP請(qǐng)求頭提供了關(guān)于請(qǐng)求,響應(yīng)或者其他發(fā)送實(shí)體的信息
應(yīng)答頭 | 說明 |
---|---|
Allow | 服務(wù)器支持哪些請(qǐng)求方法(如GET、POST等)。 |
Content-Encoding | 文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時(shí)間。Java的GZIPOutputStream可以很方便地進(jìn)行g(shù)zip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet應(yīng)該通過查看Accept-Encoding頭(即request.getHeader(“Accept-Encoding”))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經(jīng)gzip壓縮的HTML頁面,為其他瀏覽器返回普通頁面。 |
Content-Length | 表示內(nèi)容長(zhǎng)度。只有當(dāng)瀏覽器使用持久HTTP連接時(shí)才需要這個(gè)數(shù)據(jù)。如果你想要利用持久連接的優(yōu)勢(shì),可以把輸出文檔寫入 ByteArrayOutputStream,完成后查看其大小,然后把該值放入Content-Length頭,最后通過byteArrayStream.writeTo(response.getOutputStream()發(fā)送內(nèi)容。 |
Content-Type | 表示后面的文檔屬于什么MIME類型。Servlet默認(rèn)為text/plain,但通常需要顯式地指定為text/html。由于經(jīng)常要設(shè)置Content-Type,因此HttpServletResponse提供了一個(gè)專用的方法setContentType。 |
Date | 當(dāng)前的GMT時(shí)間。你可以用setDateHeader來設(shè)置這個(gè)頭以避免轉(zhuǎn)換時(shí)間格式的麻煩。 |
Expires | 應(yīng)該在什么時(shí)候認(rèn)為文檔已經(jīng)過期,從而不再緩存它? |
Last-Modified | 文檔的最后改動(dòng)時(shí)間??蛻艨梢酝ㄟ^If-Modified-Since請(qǐng)求頭提供一個(gè)日期,該請(qǐng)求將被視為一個(gè)條件GET,只有改動(dòng)時(shí)間遲于指定時(shí)間的文檔才會(huì)返回,否則返回一個(gè)304(Not Modified)狀態(tài)。Last-Modified也可用setDateHeader方法來設(shè)置。 |
Location | 表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n。Location通常不是直接設(shè)置的,而是通過HttpServletResponse的sendRedirect方法,該方法同時(shí)設(shè)置狀態(tài)代碼為302。 |
Refresh | 表示瀏覽器應(yīng)該在多少時(shí)間之后刷新文檔,以秒計(jì)。除了刷新當(dāng)前文檔之外,你還可以通過setHeader(“Refresh”, “5; URL=http://host/path”)讓瀏覽器讀取指定的頁面。 注意這種功能通常是通過設(shè)置HTML頁面HEAD區(qū)的<META HTTP-EQUIV=“Refresh” CONTENT=“5;URL=http://host/path">實(shí)現(xiàn),這是因?yàn)?#xff0c;自動(dòng)刷新或重定向?qū)τ谀切┎荒苁褂肅GI或Servlet的HTML編寫者十分重要。但是,對(duì)于Servlet來說,直接設(shè)置Refresh頭更加方便。 注意Refresh的意義是"N秒之后刷新本頁面或訪問指定頁面”,而不是"每隔N秒刷新本頁面或訪問指定頁面"。因此,連續(xù)刷新要求每次都發(fā)送一個(gè)Refresh頭,而發(fā)送204狀態(tài)代碼則可以阻止瀏覽器繼續(xù)刷新,不管是使用Refresh頭還是<META HTTP-EQUIV=“Refresh” …>。 注意Refresh頭不屬于HTTP 1.1正式規(guī)范的一部分,而是一個(gè)擴(kuò)展,但Netscape和IE都支持它。 |
Server | 服務(wù)器名字。Servlet一般不設(shè)置這個(gè)值,而是由Web服務(wù)器自己設(shè)置。 |
Set-Cookie | 設(shè)置和頁面關(guān)聯(lián)的Cookie。Servlet不應(yīng)使用response.setHeader(“Set-Cookie”, …),而是應(yīng)使用HttpServletResponse提供的專用方法addCookie。參見下文有關(guān)Cookie設(shè)置的討論。 |
WWW-Authenticate | 客戶應(yīng)該在Authorization頭中提供什么類型的授權(quán)信息?在包含401(Unauthorized)狀態(tài)行的應(yīng)答中這個(gè)頭是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\“executives\””)。 注意Servlet一般不進(jìn)行這方面的處理,而是讓W(xué)eb服務(wù)器的專門機(jī)制來控制受密碼保護(hù)頁面的訪問(例如.htaccess)。 |
八、HTTP狀態(tài)碼(HTTP Status Code)
當(dāng)瀏覽器訪問一個(gè)頁面,瀏覽者的瀏覽器會(huì)向頁面的服務(wù)器發(fā)出請(qǐng)求,當(dāng)瀏覽器接收并顯示網(wǎng)頁前,此頁面所在的服務(wù)器會(huì)返回一個(gè)包含HTTP狀態(tài)碼信息頭(server header)用以響應(yīng)瀏覽器的請(qǐng)求
下面是常見的HTTP狀態(tài)碼:
- 200 請(qǐng)求成功
- 301 資源(頁面)等被永久轉(zhuǎn)移到其他URL
- 302 資源(頁面)等被臨時(shí)轉(zhuǎn)移到其他URL
- 403 服務(wù)器理解客戶端的請(qǐng)求,但是拒絕執(zhí)行此請(qǐng)求(權(quán)限)
- 404 請(qǐng)求的資源(頁面)不存在
- 500 內(nèi)部服務(wù)器錯(cuò)誤
HTTP狀態(tài)碼分類
HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制是定義了狀態(tài)碼的類型,后面兩個(gè)數(shù)字沒有分類作用,HTTP狀態(tài)碼總共分為5種類型
HTTP狀態(tài)碼列表
狀態(tài)碼 | 狀態(tài)碼英文名稱 | 中文描述 |
---|---|---|
100 | Continue | 繼續(xù)??蛻舳藨?yīng)繼續(xù)其請(qǐng)求 |
101 | Switching Protocols | 切換協(xié)議。服務(wù)器根據(jù)客戶端的請(qǐng)求切換協(xié)議。只能切換到更高級(jí)的協(xié)議,例如,切換到HTTP的新版本協(xié)議 |
200 | OK | 請(qǐng)求成功。一般用于GET與POST請(qǐng)求 |
201 | Created | 已創(chuàng)建。成功請(qǐng)求并創(chuàng)建了新的資源 |
202 | Accepted | 已接受。已經(jīng)接受請(qǐng)求,但未處理完成 |
203 | Non-Authoritative Information | 非授權(quán)信息。請(qǐng)求成功。但返回的meta信息不在原始的服務(wù)器,而是一個(gè)副本 |
204 | No Content | 無內(nèi)容。服務(wù)器成功處理,但未返回內(nèi)容。在未更新網(wǎng)頁的情況下,可確保瀏覽器繼續(xù)顯示當(dāng)前文檔 |
205 | Reset Content | 重置內(nèi)容。服務(wù)器處理成功,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖。可通過此返回碼清除瀏覽器的表單域 |
206 | Partial Content | 部分內(nèi)容。服務(wù)器成功處理了部分GET請(qǐng)求 |
300 | Multiple Choices | 多種選擇。請(qǐng)求的資源可包括多個(gè)位置,相應(yīng)可返回一個(gè)資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇 |
301 | Moved Permanently | 永久移動(dòng)。請(qǐng)求的資源已被永久的移動(dòng)到新URI,返回信息會(huì)包括新的URI,瀏覽器會(huì)自動(dòng)定向到新URI。今后任何新的請(qǐng)求都應(yīng)使用新的URI代替 |
302 | Found | 臨時(shí)移動(dòng)。與301類似。但資源只是臨時(shí)被移動(dòng)??蛻舳藨?yīng)繼續(xù)使用原有URI |
303 | See Other | 查看其它地址。與301類似。使用GET和POST請(qǐng)求查看 |
304 | Not Modified | 未修改。所請(qǐng)求的資源未修改,服務(wù)器返回此狀態(tài)碼時(shí),不會(huì)返回任何資源??蛻舳送ǔ?huì)緩存訪問過的資源,通過提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源 |
305 | Use Proxy | 使用代理。所請(qǐng)求的資源必須通過代理訪問 |
306 | Unused | 已經(jīng)被廢棄的HTTP狀態(tài)碼 |
307 | Temporary Redirect | 臨時(shí)重定向。與302類似。使用GET請(qǐng)求重定向 |
400 | Bad Request | 客戶端請(qǐng)求的語法錯(cuò)誤,服務(wù)器無法理解 |
401 | Unauthorized | 請(qǐng)求要求用戶的身份認(rèn)證 |
402 | Payment Required | 保留,將來使用 |
403 | Forbidden | 服務(wù)器理解請(qǐng)求客戶端的請(qǐng)求,但是拒絕執(zhí)行此請(qǐng)求 |
404 | Not Found | 服務(wù)器無法根據(jù)客戶端的請(qǐng)求找到資源(網(wǎng)頁)。通過此代碼,網(wǎng)站設(shè)計(jì)人員可設(shè)置"您所請(qǐng)求的資源無法找到"的個(gè)性頁面 |
405 | Method Not Allowed | 客戶端請(qǐng)求中的方法被禁止 |
406 | Not Acceptable | 服務(wù)器無法根據(jù)客戶端請(qǐng)求的內(nèi)容特性完成請(qǐng)求 |
407 | Proxy Authentication Required | 請(qǐng)求要求代理的身份認(rèn)證,與401類似,但請(qǐng)求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán) |
408 | Request Time-out | 服務(wù)器等待客戶端發(fā)送的請(qǐng)求時(shí)間過長(zhǎng),超時(shí) |
409 | Conflict | 服務(wù)器完成客戶端的PUT請(qǐng)求是可能返回此代碼,服務(wù)器處理請(qǐng)求時(shí)發(fā)生了沖突 |
410 | Gone | 客戶端請(qǐng)求的資源已經(jīng)不存在。410不同于404,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設(shè)計(jì)人員可通過301代碼指定資源的新位置 |
411 | Length Required | 服務(wù)器無法處理客戶端發(fā)送的不帶Content-Length的請(qǐng)求信息 |
412 | Precondition Failed | 客戶端請(qǐng)求信息的先決條件錯(cuò)誤 |
413 | Request Entity Too Large | 由于請(qǐng)求的實(shí)體過大,服務(wù)器無法處理,因此拒絕請(qǐng)求。為防止客戶端的連續(xù)請(qǐng)求,服務(wù)器可能會(huì)關(guān)閉連接。如果只是服務(wù)器暫時(shí)無法處理,則會(huì)包含一個(gè)Retry-After的響應(yīng)信息 |
414 | Request-URI Too Large | 請(qǐng)求的URI過長(zhǎng)(URI通常為網(wǎng)址),服務(wù)器無法處理 |
415 | Unsupported Media Type | 服務(wù)器無法處理請(qǐng)求附帶的媒體格式 |
416 | Requested range not satisfiable | 客戶端請(qǐng)求的范圍無效 |
417 | Expectation Failed | 服務(wù)器無法滿足Expect的請(qǐng)求頭信息 |
500 | Internal Server Error | 服務(wù)器內(nèi)部錯(cuò)誤,無法完成請(qǐng)求 |
501 | Not Implemented | 服務(wù)器不支持請(qǐng)求的功能,無法完成請(qǐng)求 |
502 | Bad Gateway | 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從遠(yuǎn)程服務(wù)器接收到了一個(gè)無效的響應(yīng) |
503 | Service Unavailable | 由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)的無法處理客戶端的請(qǐng)求。延時(shí)的長(zhǎng)度可包含在服務(wù)器的Retry-After頭信息中 |
504 | Gateway Time-out | 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請(qǐng)求 |
505 | HTTP Version not supported | 服務(wù)器不支持請(qǐng)求的HTTP協(xié)議的版本,無法完成處理 |