URL,全稱(chēng)是UniformResourceLocator, 中文叫統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上用來(lái)標(biāo)識(shí)某一處資源的地址。以下面這個(gè)URL為例,介紹下普通URL的各部分組成:
網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)公司已向上1000家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷(xiāo)等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
http://www.example.com:8080/hello/world?boardID=5&ID=24618&page=1#name
一個(gè)完整的URL包括以下幾部分:
1.協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁(yè)使用的是HTTP協(xié)議。在Internet中可以使用多種協(xié)議,如HTTP,F(xiàn)TP等等本例中使用的是HTTP協(xié)議。在"HTTP"后面的“//”為分隔符
2.域名部分:該URL的域名部分為“www.example.com”。一個(gè)URL中,也可以使用IP地址作為域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個(gè)URL必須的部分,如果省略端口部分,將采用默認(rèn)端口,http默認(rèn)80, https默認(rèn)443
4.虛擬目錄部分:從域名后的第一個(gè)“/”開(kāi)始到最后一個(gè)“/”為止,是虛擬目錄部分。虛擬目錄也不是一個(gè)URL必須的部分。本例中的虛擬目錄是“/hello/”
5.文件名部分:從域名后的最后一個(gè)“/”開(kāi)始到“?”為止,是文件名部分,如果沒(méi)有“?”,則是從域名后的最后一個(gè)“/”開(kāi)始到“#”為止,是文件部分,如果沒(méi)有“?”和“#”,那么從域名后的最后一個(gè)“/”開(kāi)始到結(jié)束,都是文件名部分。本例中的文件名是“world"。文件名部分也不是一個(gè)URL必須的部分,如果省略該部分,則使用默認(rèn)的文件名
6.錨部分:從“#”開(kāi)始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個(gè)URL必須的部分
7.參數(shù)部分:從“?”開(kāi)始到“#”為止之間的部分為參數(shù)部分,又稱(chēng)搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個(gè)參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。
客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器的請(qǐng)求消息包括以下格式:
請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)四個(gè)部分組成。
下圖給出了請(qǐng)求報(bào)文的一般格式。
實(shí)例-----使用GET來(lái)傳遞數(shù)據(jù)
客戶端請(qǐng)求:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
服務(wù)端響應(yīng):
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
輸出結(jié)果:
Hello World! My payload includes a trailing CRLF.
HTTP請(qǐng)求方法
GET 請(qǐng)求指定的頁(yè)面信息,并返回實(shí)體主體。
HEAD 類(lèi)似于get請(qǐng)求,只不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容,用于獲取報(bào)頭
POST 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求體中。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改。
PUT 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。
DELETE 請(qǐng)求服務(wù)器刪除指定的頁(yè)面。
CONNECT HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
OPTIONS 允許客戶端查看服務(wù)器的性能。
TRACE 回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷。
HTTP 響應(yīng)頭信息
Allow 服務(wù)器支持哪些請(qǐng)求方法(如GET、POST等)。
Content-Encoding 文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類(lèi)型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時(shí)間。Servlet應(yīng)該通過(guò)查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經(jīng)gzip壓縮的HTML頁(yè)面,為其他瀏覽器返回普通頁(yè)面。
Content-Length 表示內(nèi)容長(zhǎng)度
Content-Type 表示后面的文檔屬于什么MIME類(lèi)型。
Date 當(dāng)前的GMT時(shí)間(零時(shí)區(qū)時(shí)間)
Expires 應(yīng)該在什么時(shí)候認(rèn)為文檔已經(jīng)過(guò)期,從而不再緩存它
Last-Modified 文檔的最后改動(dòng)時(shí)間??蛻艨梢酝ㄟ^(guò)If-Modified-Since請(qǐng)求頭提供一個(gè)日期,該請(qǐng)求將被視為一個(gè)條件GET,只有改動(dòng)時(shí)間遲于指定時(shí)間的文檔才會(huì)返回,否則返回一個(gè)304(Not Modified)狀態(tài)。
Location 表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n。Location通常不是直接設(shè)置的,而是通過(guò)HttpServletResponse的sendRedirect方法,該方法同時(shí)設(shè)置狀態(tài)代碼為302。
Server 服務(wù)器名字。Servlet一般不設(shè)置這個(gè)值,而是由Web服務(wù)器自己設(shè)置。
Set-Cookie 設(shè)置和頁(yè)面關(guān)聯(lián)的Cookie。
WWW-Authenticate 客戶應(yīng)該在Authorization頭中提供什么類(lèi)型的授權(quán)信息
Host 頭域指定請(qǐng)求資源的Intenet主機(jī)和端口號(hào),必須表示請(qǐng)求url的原始服務(wù)器或網(wǎng)關(guān)的位置
Referer 主要用來(lái)讓服務(wù)器判斷來(lái)源頁(yè)面, 即用戶是從哪個(gè)頁(yè)面來(lái)的
用來(lái)統(tǒng)計(jì)用戶來(lái)源,是從搜索頁(yè)面來(lái)的,還是從其他網(wǎng)站鏈接過(guò)來(lái),或是從書(shū)簽等訪問(wèn),以便網(wǎng)站合理定位.
用作防盜鏈, 即下載時(shí)判斷來(lái)源地址是不是在網(wǎng)站域名之內(nèi), 否則就不能下載或顯示.
對(duì)于某些惡意用戶,也可能偽造Referer來(lái)獲得某些權(quán)限,在設(shè)計(jì)網(wǎng)站時(shí)要考慮到這個(gè)問(wèn)題.
還可用做電子商務(wù)網(wǎng)站的安全,在提交信用卡等重要信息的頁(yè)面用referer來(lái)判斷上一頁(yè)是不是自己的網(wǎng)站,如果不是,可能是***用自己寫(xiě)的一個(gè)表單,來(lái)提交,為了能跳過(guò)你上一頁(yè)里的javascript的驗(yàn)證等目的。
但是注意不要把Rerferer用在身份驗(yàn)證或者其他非常重要的檢查上,因?yàn)镽erferer非常容易在客戶端被改變。
User-Agent 頭域的內(nèi)容包含發(fā)出請(qǐng)求的用戶信息。
Cache-Control 指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。
connection 是表示當(dāng)client和server通信時(shí)對(duì)于長(zhǎng)鏈接如何進(jìn)行處理。
在http1.1中,client和server都是默認(rèn)對(duì)方支持長(zhǎng)鏈接的, 如果client使用http1.1協(xié)議,但又不希望使用長(zhǎng)鏈接,則需要在header中指明connection的值為close;
如果server方也不想支持長(zhǎng)鏈接,則在response中也需要明確說(shuō)明connection的值為close。不論request還是response的header中包含了值為close的connection,都表明當(dāng)前正在使用的tcp鏈接在當(dāng)天請(qǐng)求處理完畢后會(huì)被斷掉。以后client再進(jìn)行新的請(qǐng)求時(shí)就必須創(chuàng)建新的tcp鏈接了。
常見(jiàn)的HTTP狀態(tài)碼:
200 - 請(qǐng)求成功
301 - 資源(網(wǎng)頁(yè)等)被永久轉(zhuǎn)移到其它URL
400 - Bad Request //客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解
401 - Unauthorized //請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 - Forbidden //服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
404 - 請(qǐng)求的資源(網(wǎng)頁(yè)等)不存在
500 - Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 - Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常
HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類(lèi)型,后兩個(gè)數(shù)字沒(méi)有分類(lèi)的作用。 HTTP狀態(tài)碼共分為5種類(lèi)型:
1 信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作
2成功,操作被成功接收并處理
3 重定向,需要進(jìn)一步的操作以完成請(qǐng)求
4客戶端錯(cuò)誤,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求
5** 服務(wù)器錯(cuò)誤,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤
更多狀態(tài)碼http://www.runoob.com/http/http-status-codes.html