Http協(xié)議
HTTP 超文本傳輸協(xié)議,是一個(gè)基于請求與響應(yīng)模式的、無狀態(tài)的、應(yīng)用層協(xié)議。
Http報(bào)文介紹
Http請求報(bào)文?由請求行(request line
)、請求頭部(header
)和請求數(shù)據(jù)組成,下圖給出了請求報(bào)文的一般格式。
-
1、請求行
由3部分組成,分別為:請求方法
、URL
以及協(xié)議版本
,之間由空格分隔
請求方法包括GET
、HEAD
、PUT
、POST
、TRACE
、OPTIONS
、DELETE以及擴(kuò)展方法,當(dāng)然并不是所有的服務(wù)器都實(shí)現(xiàn)了所有的方法,部分方法即便支持,處于安全性的考慮也是不可用的
協(xié)議版本的格式為:HTTP/主版本號.次版本號,常用的有HTTP/1.0和HTTP/1.1
HTTP1.0定義了三種請求方法:GET
,POST
和HEAD
方法。
HTTP1.1新增了五種請求方法:OPTIONS
,PUT
,DELETE
,TRACE
和CONNECT
方法。
-
2,請求頭部
請求頭部為請求報(bào)文添加了一些附加信息,由“名/值”對組成,每行一對,名和值之間使用冒號分隔
常見請求頭:
請求頭部的最后會有一個(gè)空行,表示請求頭部結(jié)束,對于請求報(bào)文的組成有另一種說法:請求報(bào)文由請求行
、請求頭
、空行
和請求體
四個(gè)部分組成。
-
3、請求正文
可選部分,比如GET請求就沒有請求正文
GET請求示例:
POST請求示例:
Http響應(yīng)報(bào)文
Http響應(yīng)報(bào)文由狀態(tài)行、響應(yīng)頭部、響應(yīng)正文3部分組成
1、狀態(tài)行
由3部分組成,分別為:協(xié)議版本,狀態(tài)碼,狀態(tài)碼描述,之間由空格分隔
狀態(tài)代碼為3位數(shù)字,200299的狀態(tài)碼表示成功,300399的狀態(tài)碼指資源重定向,400499的狀態(tài)碼指客戶端請求出錯,500599的狀態(tài)碼指服務(wù)端出錯(HTTP/1.1向協(xié)議中引入了信息性狀態(tài)碼,范圍100~199)
狀態(tài)碼可參考HTTP狀態(tài)碼響應(yīng)頭部
常見響應(yīng)頭部:
響應(yīng)頭 | ?說明 |
---|---|
Allow | 服務(wù)器支持哪些請求方法(如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)容長度。只有當(dāng)瀏覽器使用持久HTTP連接時(shí)才需要這個(gè)數(shù)據(jù)。如果你想要利用持久連接的優(yōu)勢,可以把輸出文檔寫入 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。 |
Server | 服務(wù)器應(yīng)用程序軟件的名稱和版本 |
Content-Charset | 響應(yīng)正文使用的編碼 |
Content-Language | 響應(yīng)正文使用的語言 |
響應(yīng)示例:
Content-Type
Content-Type,http內(nèi)容類型,一般是指網(wǎng)頁中存在Content-Type。用于定義網(wǎng)絡(luò)文件的類型和網(wǎng)頁編碼,決定文件接收方以什么樣的形式,什么編碼讀取這個(gè)文件。
Content-Type默認(rèn)類型是“text/html”。
Content-type類型有很多種,具體可參考HTTP content-type 對照表。
URL
URL全名為Uniform Resource Locator(統(tǒng)一資源定位),通過描述資源的位置來標(biāo)識資源
-
URI、URL和URN之間的區(qū)別
URI全名為Uniform Resource Indentifier(統(tǒng)一資源標(biāo)識),用來唯一的標(biāo)識一個(gè)資源,是一個(gè)通用的概。URI由兩個(gè)主要的子集URL和URN組成。
URL全名為Uniform Resource Locator(統(tǒng)一資源定位),通過描述資源的位置來標(biāo)識資源
URN全名為Uniform Resource Name(統(tǒng)一資源命名),通過資源的名字來標(biāo)識資源,與其所處的位置無關(guān),這樣即使資源的位置發(fā)生變動,其URN也不會變化
HTTP規(guī)范將更通用的概念URI作為其資源標(biāo)識符,但是實(shí)際上,HTTP應(yīng)用程序處理的只是URI的URL子集