Java網絡編程學習(收藏與整理)

學習使用java有幾年了,一直沒有系統地總結過網絡編程的內容,從今天開始,好好整理下,作爲記錄。


1 URI,URL,URN

參考:

(1) http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html。

(2) http://blog.csdn.net/alexmajy/article/details/1642314

(3) 浙江蘭德縱橫網-王勇 URI、URL、URN的區別與關係簡介

(PS:其實一直感覺這類說明的文章,IBM Developerworks上如果有,無疑是很好的選擇,通常都是論文式的講解,非常細緻,但遺憾的是這個話題只有一篇,貌似又不是想象中的結果。。。)

URI:Uniform Resource Identifier,統一資源標識符,用來標識任何遠程或本地的可用資源。
URL:Uniform Resource Locator,統一資源定位符,用於完整地描述Internet上網頁和其他資源的地址的一種標識方法。
URN:Uniform Resource Names,統一資源名稱,唯一標識一個實體的標識符,但是不能給出實體的位置。

區別
從隸屬關係來說,URL和URN是URI的子集,即URI = { URL, URN, ...};URI 標識一個事物 , URL 定位一個事物;然而,位置同樣可以標識一個事物,所以,每個URL都是一個 URI,但一個 URI 並不一定是一個 URL。URN是用唯一標識表示。

舉例說明
(URI)羅傑·佩特
這是我的名字,這是一個標識。它就像一個 URI,但它不是一個 URL,也不是一個URN,因爲,它不能告訴你任何關於我的位置或如何找到我的信息,同時也不是唯一的。在這種情形中,這個名字在美國有可能指的是至少不同的5個人。
(URL)巴哈馬國拿騷市西海岸街4914號
這是一個位置,它也是一個物理位置的標識。它既像一個 URL,也像一個 URI(因爲所有的URL都是URI),它能間接的標識我爲“xxx地的居民”。這種情形下,它可以唯一的標識我,但如果我有了一個室友,這種情況就會發生變化。
(URN)例如李舟的指紋。
這個指紋是唯一的,它能唯一標識一個人,但是沒包含這個人的任何定位信


2 HTTP Get與Post

參考:

(1)http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

(2) http://blog.csdn.net/csj50/article/details/5687850

(3) http://blog.csdn.net/somat/article/details/158707

一 原理與區別

    一般在瀏覽器中輸入網址訪問資源都是通過GET方式;在FORM提交中,可以通過Method指定提交方式爲GET或者POST,默認爲GET提交
    Http定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE
URL全稱是資源描述符,我們可以這樣認爲:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查 ,改 ,增 ,刪 4個操作。到這裏,大家應該有個大概的瞭解了,GET一般用於獲取/查詢 資源信息,而POST一般用於更新 資源信息(個人認爲這是GET和POST的本質區別,也是協議設計者的本意,其它區別都是具體表現形式的差異 )


2.最常用的狀態碼:

◆200 (OK): 找到了該資源,並且一切正常。
◆304 (NOT MODIFIED): 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的緩存機制。
◆401 (UNAUTHORIZED): 客戶端無權訪問該資源。這通常會使得瀏覽器要求用戶輸入用戶名和密碼,以登錄到服務器。
◆403 (FORBIDDEN): 客戶端未能獲得授權。這通常是在401之後輸入了不正確的用戶名或密碼。
◆404 (NOT FOUND): 在指定的位置不存在所申請的資源。


兩種提交方式的區別:

   (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提到的“安全”不是同個概念。上面 “安全”的含義僅僅是不作數據修 改,而這 裏安全的含義是真正的Security的含義,比如:通過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化


  1. get是從服務器上獲取數據,post是向服務器傳送數據。 
get 和 post只是一種傳遞數據的方式,get也可以把數據傳到服務器,他們的本質都是發送請求和接收結果。只是組織格式和數據量上面有差別,http協議裏面有介紹
  2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。 
因爲get設計成傳輸小數據,而且最好是不修改服務器的數據,所以瀏覽器一般都在地址欄裏面可以看到,但post一般都用來傳遞大數據,或比較隱私的數據,所以在地址欄看不到,能不能看到不是協議規定,是瀏覽器規定的。
3. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。 
沒明白,怎麼獲得變量和你的服務器有關,和get或post無關,服務器都對這些請求做了封裝
  4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認爲不受限制。但理論上,IIS4中最大量爲80KB,IIS5中爲100KB。 
post基本沒有限制,我想大家都上傳過文件,都是用post方式的。只不過要修改form裏面的那個type參數
  5. get安全性非常低,post安全性較高。 
如果沒有加密,他們安全級別都是一樣的,隨便一個監聽器都可以把所有的數據監聽到,不信你自己下一個監聽網絡資源的軟件


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章