本週早些時候,我不得不做一些感覺像違反語義的東西。讓我解釋。HTTP GET和POST語義和限制
我正在製作一個簡單的AJAX客戶端應用程序,該應用程序向具有給定數量參數的服務發出請求。由於整個應用程序基本上是隻讀的,我認爲使用HTTP GET是一種方式。我必須通過的一些參數很簡單(例如排序順序或頁碼)。
但是,其中一個必需的參數可能是可變長度的,這讓我擔心。由於我在GET請求的查詢字符串中對所有參數進行了編碼,因此在我看來,這放置了不必要的upper limit of (roughly) 2000 characters for the request URL。無論如何,我不喜歡看到500個字符長的請求URL。
因此,由於POST請求沒有這樣的限制,我決定切換。但是這並不正確。我的印象是POST表示數據的修改 - 但我將其用於簡單的只讀請求。
有沒有更好的方法來做到這一點?使用許多參數執行GET?我聽說過一種方法 - 你自己執行參數的初步POST,然後執行GET。但是,這種技術還有很多不足之處。
但是看看這個特定的案例,什麼是HTTP請求方法的真正的語義和限制?爲什麼GET不支持任何類型的參數有效載荷?在URL中使用查詢字符串幾乎感覺像對我來說是一個黑客。
爲什麼你覺得這個post表示數據修改? –
@ConradFrix:因爲它用於提交表單,上傳文件和[一般非冪等動作。](http://en.wikipedia.org/wiki/POST_(HTTP)#Affecting_server_state) – voithos
如果你是編寫一個Ajax應用程序,爲什麼你關心什麼URL長度?另請注意,2000字符限制僅適用於瀏覽器URL,而不適用於Ajax請求(正如您對提供的鏈接的評論中所述)。 –