1. 請求長度的限制 在HTTP協議中,從未規定GET/POST的請求長度限制,對於GET,對url的限制來源於瀏覽器或web伺服器,瀏覽器和伺服器限制了url的長度。因此,在使用GET請求時,傳輸數據會受到URL長度的限制。對於POST,由於沒有url傳值,理論上是不會受到限制的,但是實際上各個服 ...
1. 請求長度的限制
在HTTP協議中,從未規定GET/POST的請求長度限制,對於GET,對url的限制來源於瀏覽器或web伺服器,瀏覽器和伺服器限制了url的長度。因此,在使用GET請求時,傳輸數據會受到URL長度的限制。對於POST,由於沒有url傳值,理論上是不會受到限制的,但是實際上各個伺服器會對POST提交的數據大小進行限制,Apache、IIS都有各自的配置。如果支持IE,則最大長度為2083byte,若只支持Chrome,則最大長度 8182byte。
2. 安全性的區別
POST的安全性比GET的高。這裡的安全是指真正的安全,而不同於上面GET提到的安全方法中的安全,上面提到的安全僅僅是不會修改伺服器的數據。比如,在進行登錄操作,通過GET請求,用戶名和密碼都會暴露在url上,因為登錄頁面有可能被瀏覽器緩存以及其他人查看瀏覽器的歷史記錄的原因,此時的用戶名和密碼就很容易被他人拿到了。而對於POST方式,數據通過Request Body傳遞,除此之外,GET請求提交的數據還可能會造成CSRF攻擊。
3. 緩存方面的區別
GET請求類似於查找的過程,用戶獲取數據,可以不用每次都與資料庫連接,所以可以使用緩存。POST不同,POST做的一般是修改和刪除的工作,所以必須與資料庫交互,所以不能使用緩存。因此GET請求適合於請求緩存。
4. 獲取數據的區別
GET是從伺服器上獲取數據,POST是向伺服器傳送數據。對於GET方式,伺服器用Request.QueryString獲取變數的值,對於POST方式,伺服器用Request.Form獲取提交的數據。
以下是搜集的GET與POST的主要區別:
- GET在瀏覽器回退時是無害的,而POST會再次提交請求。
- GET產生的URL地址可以被Bookmark,而POST不可以。
- GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
- GET請求只能進行url編碼,而POST支持多種編碼方式。
- GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。
- GET請求在URL中傳送的參數是有長度限制的,而POST麽有(原因是瀏覽器和伺服器的限制)。
- GET產生一個TCP數據包;POST產生兩個TCP數據包(Firefox除外)。
- 對參數的數據類型,GET只接受ASCII字元,而POST沒有限制。
- GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息。
- GET參數通過URL傳遞,POST放在Request body中。