URL,全稱是UniformResourceLocator, 中文叫統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上用來標識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)伊吾,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575http://www.example.com:8080/hello/world?boardID=5&ID=24618&page=1#name
一個完整的URL包括以下幾部分:
1.協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁使用的是HTTP協(xié)議。在Internet中可以使用多種協(xié)議,如HTTP,F(xiàn)TP等等本例中使用的是HTTP協(xié)議。在"HTTP"后面的“//”為分隔符
2.域名部分:該URL的域名部分為“www.example.com”。一個URL中,也可以使用IP地址作為域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認端口,http默認80, https默認443
4.虛擬目錄部分:從域名后的第一個“/”開始到最后一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/hello/”
5.文件名部分:從域名后的最后一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個“/”開始到結(jié)束,都是文件名部分。本例中的文件名是“world"。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名
6.錨部分:從“#”開始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分
7.參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。
客戶端發(fā)送一個HTTP請求到服務(wù)器的請求消息包括以下格式:
請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)四個部分組成。
下圖給出了請求報文的一般格式。
實例-----使用GET來傳遞數(shù)據(jù)
客戶端請求:
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請求方法
GET 請求指定的頁面信息,并返回實體主體。
HEAD 類似于get請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報頭
POST 向指定資源提交數(shù)據(jù)進行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。
PUT 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。
DELETE 請求服務(wù)器刪除指定的頁面。
CONNECT HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
OPTIONS 允許客戶端查看服務(wù)器的性能。
TRACE 回顯服務(wù)器收到的請求,主要用于測試或診斷。
HTTP 響應(yīng)頭信息
Allow 服務(wù)器支持哪些請求方法(如GET、POST等)。
Content-Encoding 文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時間。Servlet應(yīng)該通過查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經(jīng)gzip壓縮的HTML頁面,為其他瀏覽器返回普通頁面。
Content-Length 表示內(nèi)容長度
Content-Type 表示后面的文檔屬于什么MIME類型。
Date 當前的GMT時間(零時區(qū)時間)
Expires 應(yīng)該在什么時候認為文檔已經(jīng)過期,從而不再緩存它
Last-Modified 文檔的最后改動時間??蛻艨梢酝ㄟ^If-Modified-Since請求頭提供一個日期,該請求將被視為一個條件GET,只有改動時間遲于指定時間的文檔才會返回,否則返回一個304(Not Modified)狀態(tài)。
Location 表示客戶應(yīng)當?shù)侥睦锶ヌ崛∥臋n。Location通常不是直接設(shè)置的,而是通過HttpServletResponse的sendRedirect方法,該方法同時設(shè)置狀態(tài)代碼為302。
Server 服務(wù)器名字。Servlet一般不設(shè)置這個值,而是由Web服務(wù)器自己設(shè)置。
Set-Cookie 設(shè)置和頁面關(guān)聯(lián)的Cookie。
WWW-Authenticate 客戶應(yīng)該在Authorization頭中提供什么類型的授權(quán)信息
Host 頭域指定請求資源的Intenet主機和端口號,必須表示請求url的原始服務(wù)器或網(wǎng)關(guān)的位置
Referer 主要用來讓服務(wù)器判斷來源頁面, 即用戶是從哪個頁面來的
用來統(tǒng)計用戶來源,是從搜索頁面來的,還是從其他網(wǎng)站鏈接過來,或是從書簽等訪問,以便網(wǎng)站合理定位.
用作防盜鏈, 即下載時判斷來源地址是不是在網(wǎng)站域名之內(nèi), 否則就不能下載或顯示.
對于某些惡意用戶,也可能偽造Referer來獲得某些權(quán)限,在設(shè)計網(wǎng)站時要考慮到這個問題.
還可用做電子商務(wù)網(wǎng)站的安全,在提交信用卡等重要信息的頁面用referer來判斷上一頁是不是自己的網(wǎng)站,如果不是,可能是***用自己寫的一個表單,來提交,為了能跳過你上一頁里的javascript的驗證等目的。
但是注意不要把Rerferer用在身份驗證或者其他非常重要的檢查上,因為Rerferer非常容易在客戶端被改變。
User-Agent 頭域的內(nèi)容包含發(fā)出請求的用戶信息。
Cache-Control 指定請求和響應(yīng)遵循的緩存機制。
connection 是表示當client和server通信時對于長鏈接如何進行處理。
在http1.1中,client和server都是默認對方支持長鏈接的, 如果client使用http1.1協(xié)議,但又不希望使用長鏈接,則需要在header中指明connection的值為close;
如果server方也不想支持長鏈接,則在response中也需要明確說明connection的值為close。不論request還是response的header中包含了值為close的connection,都表明當前正在使用的tcp鏈接在當天請求處理完畢后會被斷掉。以后client再進行新的請求時就必須創(chuàng)建新的tcp鏈接了。
常見的HTTP狀態(tài)碼:
200 - 請求成功
301 - 資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL
400 - Bad Request //客戶端請求有語法錯誤,不能被服務(wù)器所理解
401 - Unauthorized //請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
403 - Forbidden //服務(wù)器收到請求,但是拒絕提供服務(wù)
404 - 請求的資源(網(wǎng)頁等)不存在
500 - Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯誤
503 - Server Unavailable //服務(wù)器當前不能處理客戶端的請求,一段時間后可能恢復(fù)正常
HTTP狀態(tài)碼由三個十進制數(shù)字組成,第一個十進制數(shù)字定義了狀態(tài)碼的類型,后兩個數(shù)字沒有分類的作用。 HTTP狀態(tài)碼共分為5種類型:
1 信息,服務(wù)器收到請求,需要請求者繼續(xù)執(zhí)行操作
2 成功,操作被成功接收并處理
3 重定向,需要進一步的操作以完成請求
4 客戶端錯誤,請求包含語法錯誤或無法完成請求
5** 服務(wù)器錯誤,服務(wù)器在處理請求的過程中發(fā)生了錯誤
更多狀態(tài)碼http://www.runoob.com/http/http-status-codes.html
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。