摘要:通常情況下,由瀏覽器向服務器發起請求,服務器向瀏覽器返回響應。響應包含了請求的狀態信息以及可能被請求的內容。但是這個限制是針對所有請求的,與沒有關系。根據規范,表示可能修改變服務器上的資源的請求。
本文主要對GET與POST基本區別進行匯總并掌握,如有錯誤與遺漏之處,請指出。
1. HTTP2.請求方式HTTP(即超文本傳輸協議)是現代網絡中最常見和常用的協議之一,
設計它的目的是保證客戶機和服務器之間的通信。
HTTP 的工作方式是客戶端與服務器之間的 “請求-響應” 協議。
客戶端可以是 Web 瀏覽器,服務器端可以是計算機上的某些網絡應用程序。
通常情況下,由瀏覽器向服務器發起 HTTP 請求,服務器向瀏覽器返回響應。
響應包含了請求的狀態信息以及可能被請求的內容。
HTTP方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT
其中兩種常見的 HTTP 請求就是:GET 和 POST。
區別: _GET_是從服務器上獲取數據,_POST_則是向指定的資源提交要被處理的數據
請求報文的格式:
< request line >
< headers >
< blank line >
< request-body >
GET請求數據按照查詢字符串(名稱/值對)方式,放置在HTTP請求協議頭(headers)中,也就是URL之后;
而POST提交的數據則放在實體的主體(request-body)中。
4. 緩存,書簽,歷史記錄,默認method_4.1 緩存:_ GET會被緩存,POST不能。
_4.2 書簽:_ GET可收藏為書簽,POST不可收藏為書簽
_4.3 歷史記錄:_ GET請求的URL,參數會被瀏覽器保留在歷史中,POST參數不會。
_4.4 默認請求:_ 在from提交的時候,如果不指定Method,則默認為get請求。
5. 響應速度GET請求是可以被客戶端緩存的。會比POST高效。
AJAX環境中GET響應快速,POST需要先發送HTTP頭部(headers) 再發送報文實體的主體(request-body)中的數據。
6. 類型限制6.1 GET限制數據集的值必須為ASCII字符;
GET提交的數據將會附加在url之后,以?分開與url分開。
1.以 ? 來分隔URL和數據;
2.以& 來分隔參數;
3.如果數據是英文或數字,原樣發送;
4.如果數據是中文或其它字符,則進行BASE64編碼
5.GET將數據的按照variable=value的形式,添加到URL后面;
如:http:// www.abc.com/?username=yt&id=123
6.2 POST沒有限制,允許二進制數據。
7. 大小限制POST是將數據放在請求的數據體(request-body)中,按照查詢字符串(名稱/值對)相對應的方式,傳遞到所指向URL;
7.1.GET方式提交的數據最多只能是1024字節,POST支持較大數據傳輸
7.2HTTP協議對GET和POST都沒有對長度的限制
RFC 2616 中明確對 uri 的長度并沒有限制。
不過雖然在RFC中并沒有對uri的長度進行限制,但是各大瀏覽器廠家實現上限制了URL的長度。
IE對URL長度的限制是2083字節(2K+35)
瀏覽器:據說早期的瀏覽器會對URL長度做限制。IE對URL長度會限制在2083個字符內,Chrome會崩潰。 服務器:URL長了,對服務器處理也是一種負擔。 原本一個會話就沒有多少數據,現在如果有人惡意地構造幾個幾M大小的URL, 并不停地訪問你的服務器。服務器的最大并發數顯然會下降。 另一種攻擊方式是:把告訴服務器Content-Length是一個很大的數, 然后只給服務器發一點兒數據,嘿嘿,服務器你就傻等著去吧。 哪怕你有超時設置,這種故意的次次訪問超時也能讓服務器吃不了兜著走。 有鑒于此,多數服務器出于安全啦、穩定啦方面的考慮,會給URL長度加限制。 但是這個限制是針對所有HTTP請求的,與GET、POST沒有關系。8. 實際中 — POST比GET「相對安全」
GET所發送的數據是 URL 的一部分,
有時候會直接反應在瀏覽器的地址欄,
現在的瀏覽器大多會記住曾經輸入過的URL(在發送密碼或敏感信息時絕不要使用 GET !)。
試想如果你曾經在別人電腦上填過一個很私密的表單,那么你的這份記錄很可能被連沒什么電腦常識的人都一覽無遺。
但是被抓包之后的POST請求和GET請求是一樣裸露的,所以這里是相對的。
9. 語義上 — GET比POST「相對安全」說 POST 比 GET 安全 也不完全對的。
根據HTTP規范,POST表示可能修改變服務器上的資源的請求。
在語義上(restful視角):
GET的是獲取指定URL上的資源,是讀操作。
重要的一點是不論對某個資源GET多少次,它的狀態是不會改變的,
在這個意義上,我們說GET是安全的(不是被密碼學或者數據保護意義上的安全)。
因為GET是安全的,所以GET返回的內容可以被瀏覽器,Cache服務器緩存起來。
POST的語義是修改變服務器上的資源的請求,所以是不安全的,
每次提交的POST,代碼都會認為這個操作會修改資源的狀態,
于是,瀏覽器在你按下F5的時候會跳出確認框,緩存服務器不會緩存POST請求返回內容。
參考:
GET請求和POST請求的區別
不再以訛傳訛,GET和POST的真正區別
淺談HTTP中Get與Post的區別
HTTP請求Get和Post的區別總結
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79089.html
摘要:為了避免的變動導致用戶使用中產生意外結果或調用失敗,最好強制要求所有訪問都需要指定版本號。請避免提供默認版本號,一旦提供,日后想要修改它會相當困難。返回結果針對不同操作,服務器向用戶返回的結果應該符合以下規范。 API的定義取決于選擇的IPC通信方式,如果是消息機制(如 AMQP 或者 STOMP),API則由消息頻道(channel)和消息類型;如果是使用HTTP機制,則是基于請求/...
閱讀 1988·2021-11-19 09:40
閱讀 1931·2021-09-28 09:36
閱讀 2279·2021-09-22 10:02
閱讀 2724·2019-08-30 14:00
閱讀 1948·2019-08-29 15:31
閱讀 2893·2019-08-29 15:11
閱讀 2905·2019-08-29 13:04
閱讀 1080·2019-08-27 10:55