POST or GET?

 

在web2.0時代,不少網站再也不是枯燥的靜態頁面,也不是那種加上讓用戶填寫一些表單的簡單頁面。它們已經功能複雜的應用程序。本文,着重改善這些web應用程序出現的問題中的get和post。針對不一樣需求的問題,咱們一塊兒探討一下關於post和get的話題。php

 

Posthtml

get訪問的URL能夠是並且應該是爬蟲抓取、預抓取、緩存、重用和其餘自動訪問上。而不安全操做,如肯定訂購、下訂單、達成協議和刪除頁面等,應該經過post執行,避免沒有顯式用戶請求和同一的狀況下發生意外的操做。例如搜索引擎刪除整個頁面,只由於抓取了一個連接。不少不但願用戶瀏覽器遵循頁面連接的各類完整,這些狀況下,應該要求用戶登陸而且足夠的權限才能執行某些危險操做。web

 

所以,若是發現不安全操做由連接觸發,用表單替換它,使用隱藏字段設置查詢字符串變量。數據庫

 

< a href = 「/admin.php?action=approve&id=1798」>Approve</a>

  

它有兩個字段:值爲approve的action和值爲1798的id。查詢字符串中的每一個字段能夠轉換爲下面表單中相應的隱藏字段。連接的文本則變成提交按鈕的文本。瀏覽器

<form method =」post」 action = 「/admin.php」>

        <input type =」hidden」 name =」action 」 value =」approve」 />
        <input type =」hidden」 name =」id 」 value =」approve」 />
        <input type =」submit」 id=」approve 」 value =」Approve」 />

</form>    

 

而後樣式化按鈕,讓他看起來更像一個連接緩存

input#approve{ border : none; background :white; color :blue; text-decoration :none;
}

 

 

給購物車添加商品,不少網站喜歡用post,只是由於不肯意讓瀏覽器自動化這個過程。實現預覽的功能用get仍是post可能取決於實現細節和慣例。瀏覽器預抓取或是直接鏈接預覽都是沒有問題的,但若是預覽在某種意義上會創造評論資源,但不但願讓其餘用戶看到,使用post更適合。安全

 

Get服務器

然而,get形式的url對搜索引擎更加友好,能夠提升搜索引擎排名。Post使用的url有時候會阻止爬蟲和搜索引擎的訪問。其餘網站和用戶能夠連接到get形式的url,不管用戶的訪問,仍是搜索引擎的收錄而相應提升了頁面排名,可以直接或間接提升網站瀏覽。網絡

同時,get形式的url這種表示法是能夠緩存的,顯著提高了客戶端和服務端的性能。app

 

部分防火牆和代理服務器的配置是隻容許get請求,而封禁post請求。HTTP自己就容許網絡管理員控制網絡傳輸,並區分安全與潛在的危險請求,採用post而非get會阻止一些在安全級別比較高的環境下的人訪問你的網站。

如下操做都應該經過post操做(只是範例,平常將繼續更新)

  訂購商品

  簽署法律文檔

  提交博客評論

  從CMS中刪除頁面

  簽署申述

  發送電子郵件

  向數據庫插入新內容

 

相比之下,一下的操做應該經過get操做,由於這是安全的,並且沒必要強制用戶接受。

  讀取一份法律文檔

  從CMS下載一份可編輯文檔的副本

  讀取電子右鍵

  查看地圖

  檢測機器的當前狀態

 

有些操做二者均可以使用,好比:

給購物車添加商品(非立刻交易)

預覽博客的評論

 

總之,GET通常用於獲取/查詢資源信息,而POST通常用於更新資源信息。

 若符合下列任一狀況,則用POST方法:

* 請求的結果有持續性的反作用,例如,數據庫內添加新的數據行。
* 若使用GET方法,則表單上收集的數據可能讓URL過長。
* 要傳送的數據不是採用7位的ASCII編碼。

若符合下列任一狀況,則用GET方法:

* 請求是爲了查找資源,HTML表單數據僅用來幫助搜索。
* 請求結果無持續性的反作用。
* 收集的數據及HTML表單內的輸入字段名稱的總長不超過1024個字符。

相關文章
相關標籤/搜索