基本請求簡介
Http 定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。
GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,刪4個操作。到這裏,大家應該有個大概的瞭解了,GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息。
URL 簡介
URL 全稱是資源描述符,我們可以這樣認爲:一個URL地址,它用於描述一個網絡上的資源。
URL 的編碼格式採用的是 ASCII 碼,而不是 Unicode,這也就是說你不能在 Url 中包含任何非 ASCII 字符,所有非 ASCII 字符均需要編碼再傳輸,關於 Url 編碼可參考:http://kb.cnblogs.com/page/133765/。
Get 和 Post 的區別:
1 形式上:
(1) Get 的請求參數放在 URL 後面(把數據放置在請求行(request line)中),並且第一個參數用 ? 拼接,後面從第二個參數開始,直到最後一個,用 & 分開,例如https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1
(2) Post 的參數是放在請求體裏面;
因此,GET提交的數據會在地址欄中顯示出來,而POST提交,地址欄不會改變。
2 傳輸數據的大小
首先聲明:HTTP協議沒有對傳輸的數據大小進行限制,HTTP協議規範也沒有對URL長度進行限制。
所以:”GET方式提交的數據最多隻能是1024字節,理論上POST沒有限制,可傳較大量的數據“?
其實這樣說是錯誤的,不準確的(我也一度被誤導了,too young to simple)
實際開發中存在的限制主要有:
(1) GET: 特定瀏覽器對URL長度有限制,例如 IE 對 URL 長度的限制是2083字節( 2K+35 )。對於其他瀏覽器,如 Netscape、FireFox 等,其限制取決於操作系統的支持。因此對於 GET 提交時,傳輸數據就會受到URL 長度的限制。
(2) POST: 由於不是通過 URL 傳值,理論上數據不受限。但實際各個 WEB 服務器會規定對 post 提交數據大小進行限制,Apache、IIS6 都有各自的配置。
3 安全性
POST的安全性要比GET的安全性高。GET 的參數是暴露在地址欄的,並且有緩存(比如登錄界面),其他人查看瀏覽器的歷史紀錄,就可以從緩存中得到登錄的賬號和密碼等敏感數據;而 POST 提交的記錄是沒有緩存的。
4 其他
對於 GET 方式,服務端用 Request.QueryString 獲取變量的值,對於POST 請求方式,服務端用 Request.Form 獲取提交的數據。
POST 需要明確的指定方法, GET 不需要,並且默認就是 GET 請求。
總結:
記錄 | GET | POST |
---|---|---|
後退/刷新 | 無害 | 數據會被重新提交(瀏覽器應該告知用戶數據會被重新提交)。 |
書籤 | 可收藏爲書籤 | 不可收藏爲書籤 |
緩存 | 能被緩存 | 不能緩存 |
歷史 | 參數保留在瀏覽器歷史中。 | 參數不會保存在瀏覽器歷史中。 |
對數據長度的限制 | URL 的長度由瀏覽器限制 | 數據長度由服務器限制 |
對數據類型的限制 | 只允許 ASCII 字符。 | 沒有限制。也允許二進制數據。 |
安全性 | GET 的安全性較差,因爲所發送的數據是 URL 的一部分。 | POST 比 GET 更安全,因爲參數不會被保存在瀏覽器歷史或 web 服務器日誌中。 |
可見性 | 數據在 URL 中對所有人都是可見的。 | 數據不會顯示在 URL 中。 |
最後,對各個瀏覽器對 URL 的限制
瀏覽器 | 最大字節數 |
---|---|
IE | 2083 |
firefox | 65,536 |
chrome | 8182 |
360極速瀏覽器 | 2118 |
Safari | 80,000 |
Opera | 190,000 |
參考博客/資料:
http://blog.csdn.net/gideal_wang/article/details/4316691
http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
http://www.baiwar.com/post/the-maximum-length-of-the-url-in-the-browser-get-request-limits.html
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
http://blog.csdn.net/yang_5/article/details/8174889
說明:
本篇博客屬於自己的理解,如有錯誤之處,歡迎拍磚。謝謝!