標籤:變數 基礎知識 oss 記錄 複雜 put apach 開啟 ascii
HTTP之URL
HTTP使用統一資源識別項(Uniform Resource Identifiers, URI)來傳輸資料和建立串連。URL是一種特殊類型的URI,包含了用於尋找某個資源的足夠的資訊
URL,全稱是UniformResourceLocator, 中文叫統一資源定位器,是互連網上用來標識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出,一個完整的URL包括以下幾部分:
1.協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的“//”為分隔字元
2.網域名稱部分:該URL的網域名稱部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為網域名稱使用
3.連接埠部分:跟在網域名稱後面的是連接埠,網域名稱和連接埠之間使用“:”作為分隔字元。連接埠不是一個URL必須的部分,如果省略連接埠部分,將採用預設連接埠
4.虛擬目錄部分:從網域名稱後的第一個“/”開始到最後一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”
5.檔案名稱部分:從網域名稱後的最後一個“/”開始到“?”為止,是檔案名稱部分,如果沒有“?”,則是從網域名稱後的最後一個“/”開始到“#”為止,是檔案部分,如果沒有“?”和“#”,那麼從網域名稱後的最後一個“/”開始到結束,都是檔案名稱部分。本例中的檔案名稱是“index.asp”。檔案名稱部分也不是一個URL必須的部分,如果省略該部分,則使用預設的檔案名稱
6.錨部分:從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分
7.參數部分:從“?”開始到“#”為止之間的部分為參數部分,又稱搜尋部分、查詢部分。本例中的參數部分為“boardID=5&ID=24618&page=1”。參數可以允許有多個參數,參數與參數之間用“&”作為分隔字元。
(原文:http://blog.csdn.net/ergouge/article/details/8185219 )
URI和URL的區別 URI,是uniform resource identifier,統一資源識別項,用來唯一的標識一個資源。
Web上可用的每種資源如HTML文檔、映像、視頻片段、程式等都是一個來URI來定位的
URI一般由三部組成:
①訪問資源的命名機制
②存放資源的主機名稱
③資源自身的名稱,由路徑表示,著重強調於資源。
URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明了如何locate這個資源。
URL是Internet上用來描述資訊資源的字串,主要用在各種WWW客戶程式和伺服器程式上,特別是著名的Mosaic。
採用URL可以用一種統一的格式來描述各種資訊資源,包括檔案、伺服器的地址和目錄等。URL一般由三部組成:
①協議(或稱為服務方式)
②存有該資源的主機IP地址(有時也包括連接埠號碼)
③主機資源的具體地址。如目錄和檔案名稱等
URN,uniform resource name,統一資源命名,是通過名字來標識資源,比如mailto:[email protected]。
URI是以一種抽象的,高層次概念定義統一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。籠統地說,每個 URL 都是 URI,但不一定每個 URI 都是 URL。這是因為 URI 還包括一個子類,即統一資源名稱 (URN),它命名資源但不指定如何定位資源。上面的 mailto、news 和 isbn URI 都是 URN 的樣本。
在Java的URI中,一個URI執行個體可以代表絕對的,也可以是相對的,只要它符合URI的文法規則。而URL類則不僅符合語義,還包含了定位該資源的資訊,因此它不能是相對的。
在Java類庫中,URI類不包含任何訪問資源的方法,它唯一的作用就是解析。
相反的是,URL類可以開啟一個到達資源的流。
HTTP工作原理
HTTP協議定義Web用戶端如何從Web伺服器請求Web頁面,以及伺服器如何把Web頁面傳送給用戶端。HTTP協議採用了請求/響應模型。用戶端向伺服器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、要求標頭部和請求資料。伺服器以一個狀態行作為響應,響應的內容包括協議的版本、成功或者錯誤碼、伺服器資訊、回應標頭部和響應資料。
以下是 HTTP 要求/響應的步驟:
1、用戶端串連到Web伺服器
一個HTTP用戶端,通常是瀏覽器,與Web伺服器的HTTP連接埠(預設為80)建立一個TCP通訊端串連。例如,http://www.oakcms.cn。
2、發送HTTP請求
通過TCP通訊端,用戶端向Web伺服器發送一個文本的請求報文,一個請求報文由請求行、要求標頭部、空行和請求資料4部分組成。
3、伺服器接受請求並返回HTTP響應
Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP通訊端,由用戶端讀取。一個響應由狀態行、回應標頭部、空行和響應資料4部分組成。
4、釋放串連TCP串連
若connection 模式為close,則伺服器主動關閉TCP串連,用戶端被動關閉串連,釋放TCP串連;若connection 模式為keepalive,則該串連會保持一段時間,在該時間內可以繼續接收請求;
5、用戶端瀏覽器解析HTML內容
用戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態碼。然後解析每一個回應標頭,回應標頭告知以下為若干位元組的HTML文檔和文檔的字元集。用戶端瀏覽器讀取響應資料HTML,根據HTML的文法對其進行格式化,並在瀏覽器視窗中顯示。
例如:在瀏覽器地址欄鍵入URL,按下斷行符號之後會經曆以下流程:
1、瀏覽器向 DNS 伺服器請求解析該 URL 中的網域名稱所對應的 IP 位址;
2、解析出 IP 位址後,根據該 IP 位址和預設連接埠 80,和伺服器建立TCP串連;
3、瀏覽器發出讀取檔案(URL 中網域名稱後面部分對應的檔案)的HTTP 要求,該請求報文作為 TCP 三向交握的第三個報文的資料發送給伺服器;
4、伺服器對瀏覽器請求作出響應,並把對應的 html 文本發送給瀏覽器;
5、釋放 TCP串連;
6、瀏覽器將該 html 文本並顯示內容;
GET和POST請求的區別 GET請求
GET /books/?sex=man&name=Professional HTTP/1.1Host: www.wrox.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Connection: Keep-Alive
注意最後一行是空行
POST請求
POST / HTTP/1.1Host: www.wrox.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)Gecko/20050225 Firefox/1.0.1Content-Type: application/x-www-form-urlencodedContent-Length: 40Connection: Keep-Alivename=Professional%20Ajax&publisher=Wiley
1、GET提交,請求的資料會附在URL之後(就是把資料放置在HTTP協議頭中),以?分割URL和傳輸資料,多個參數用&串連;例 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果資料是英文字母/數字,原樣發送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進位表示的ASCII。
POST提交:把提交的資料放置在是HTTP包的包體中。上文樣本中紅色字型標明的就是實際的傳輸資料
因此,GET提交的資料會在地址欄中顯示出來,而POST提交,地址欄不會改變
2、傳輸資料的大小:首先聲明:HTTP協議沒有對傳輸的資料大小進行限制,HTTP協議規範也沒有對URL長度進行限制。
而在實際開發中存在的限制主要有:
GET:特定瀏覽器和伺服器對URL長度有限制,例如 IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系 統的支援。
因此對於GET提交時,傳輸資料就會受到URL長度的 限制。
POST:由於不是通過URL傳值,理論上資料不受 限。但實際各個WEB伺服器會規定對post提交資料大小進行限制,Apache、IIS6都有各自的配置。
3、安全性
POST的安全性要比GET的安全性高。比如:通過GET提交資料,使用者名稱和密碼將明文出現在URL上,因為(1)登入頁面有可能被瀏覽器緩衝;(2)其他人查看瀏覽器的曆史紀錄,那麼別人就可以拿到你的帳號和密碼了,除此之外,使用GET提交資料還可能會造成Cross-site request forgery攻擊
4、Http get,post,soap協議都是在http上啟動並執行
(1)get:請求參數是作為一個key/value對的序列(查詢字串)附加到URL上的
查詢字串的長度受到web瀏覽器和web伺服器的限制(如IE最多支援2048個字元),不適合傳輸大型資料集同時,它很不安全
(2)post:請求參數是在http標題的一個不同部分(名為entity body)傳輸的,這一部分用來傳輸表單資訊,因此必須將Content-type設定為:application/x-www-form- urlencoded。post設計用來支援web表單上的使用者欄位,其參數也是作為key/value對傳輸。
但是:它不支援複雜資料類型,因為post沒有定義傳輸資料結構的語義和規則。
(3)soap:是http post的一個專用版本,遵循一種特殊的xml訊息格式
Content-type設定為: text/xml 任何資料都可以xml化。
Http協議定義了很多與伺服器互動的方法,最基本的有4種,分別是GET,POST,PUT,DELETE. 一個URL地址用於描述一個網路上的資源,而HTTP中的GET, POST, PUT, DELETE就對應著對這個資源的查,改,增,刪4個操作。 我們最常見的就是GET和POST了。GET一般用於擷取/查詢資源資訊,而POST一般用於更新資源資訊.
我們看看GET和POST的區別
GET提交的資料會放在URL之後,以?分割URL和傳輸資料,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的資料放在HTTP包的Body中.
GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制.
GET方式需要使用Request.QueryString來取得變數的值,而POST方式通過Request.Form來擷取變數的值。
GET方式提交資料,會帶來安全問題,比如一個登入頁面,通過GET方式提交資料時,使用者名稱和密碼將出現在URL上,如果頁面可以被緩衝或者其他人可以訪問這台機器,就可以從記錄獲得該使用者的帳號和密碼.
HTTP基礎知識3