超文字傳輸協議http
的設計目的是保證客戶端與服務端之間的通訊,http
協議的工作方式是客戶端與服務端之間的請求響應,在客戶端與服務端進行請求響應時最常用的兩種方法就是get
與post
。
上述的區別都是get
與post
在瀏覽器中的具體實現上的區別,例如現在廣泛使用的promise
就是各種對於promise/a+
的規範promisesaplus.com
的實現,在http/1.1
的規範的徵求意見稿rfc
中提到了語義這個詞語,語義定義了乙個型別的請求應該具有什麼樣的,例如get
的語義就應該是獲取資源,post
的語義就是修改資源,如果在符合語法的前提下實現違背語義的行為也是可以做到的,例如使用get
修改資源或者使用post
獲取資源,甚至使用get
傳送body
(這需要服務端能夠配合解析),這是合法的請求但是這是不符合語義的請求,而且很有可能會帶來一些***,所以在本質上get
與post
的區別是其語義的區別,甚至可以理解為get
與post
並沒有什麼區別,只要客戶端與服務端能夠配合傳送與接收即可,乙個敢發乙個敢收就可以了,而上文所述的區別主要是在瀏覽器中具體實現上的區別。
關於安全性與冪等性,安全性是指訪問介面時不會對服務端資源狀態發生改變,冪等性是指對於同一介面的uri
多次訪問時,得到的資源狀態是相同的。
在瀏覽器點選後退操作時,如果將要返回的頁面是get
請求的,那麼將會安全的進行回退,如果將要返回的頁面是post
請求的,例如使用的
method
為post
去提交資料並跳轉頁面的話,瀏覽器會發出乙個是否再次提交表單的確認提示。
關於get
和post
提交的引數長度的限制問題,get
是通過url
提交資料,因此get
可提交的資料量就跟url
所能達到的最大長度有直接關係,實際上http
協議對url
長度是沒有限制的,但是在各種瀏覽器中對於url
長度是有限制的,而且限制的長度是不同的,一般使用不超過4k
,此外服務端也會對於url
有各自的限制,當然服務端可以接收的url
長度大小是可以配置的,同樣的,http
協議沒有對post
進行任何限制,post
提交的資料大小一般是受伺服器的主動配置來限定大小。
關於敏感資訊不要使用get
進行傳輸主要有兩個方面的考慮,首先使用get
傳輸敏感資訊會直接暴露在url
上,會直接可見,此外使用get
傳輸的引數會被直接儲存在瀏覽器的歷史記錄中以及伺服器的日誌中,當然http
協議本身就是乙個明文傳輸的協議,無論是使用get
還是post
在中間人攻擊等情況下都是能夠拿到傳輸的資料的,如果需要避免中間人等攻擊需要使用https
進行資料的加密傳輸。
關於get
傳送乙個請求,post
傳送兩個請求的問題,同樣這也是各種瀏覽器對於http
協議的具體實現的案例,而不涉及get
和post
的本質區別,關於這個具體的實現在各種瀏覽器上的表現並不相同,主要是瀏覽器的網路請求底層對於請求上優化的實現,例如需要使用post
傳輸乙個大檔案,那麼瀏覽器就有可能首先傳送乙個資料報並攜帶少量資料去檢測服務端是否能夠接收這個檔案,服務端在解析上傳的檔案時,總是會先完全解析全部的請求頭部,伺服器端總是希望能夠了解請求的控制資訊後,就能決定這個請求怎麼進一步處理,是拒絕還是接收,如果服務端允許接收這個檔案那麼客戶端會繼續傳送資料進行上傳操作,如果服務端拒絕了就直接中斷上傳,這樣用以節省提高資料吞吐和降低頻寬的浪費。在本質上這和http
協議無關,這是瀏覽器在具體實現上做的一些優化,例如在內部設定一次post
的資料超過1kb
就先只發請求頭,否則就一次性全發,客戶端甚至還可以做一些adaptive
的策略,統計傳送成功率,如果成功率很高,就總是全部發等等。不同瀏覽器可以有各自的不同的方案,不管怎樣做,優化目的總是在提高資料吞吐和降低頻寬浪費。無論瀏覽器如何傳送其總是符合http
協議的,是具體實現而不涉及get
和post
的本質區別。
get和post的區別
在b s應用程式中,前台與後台的資料互動,都是通過html中form表單完成的。form提供了兩種資料傳輸的方式 get和post。雖然它們都是資料的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對資料產生嚴重的影響。雖然為了方便的得到變數值,web容器已經遮蔽了二者的一些差異,但是了解二者的...
post和get的區別?
1.get是從伺服器上獲取資料,post是向伺服器傳送資料。get 和 post只是一種傳遞資料的方式,get也可以把資料傳到伺服器,他們的本質都是傳送請求和接收結果。只是組織格式和資料量上面有差別,http協議裡面有介紹。2.get是把引數資料佇列加到提交表單的action屬性所指的url中,值和...
post和get的區別
兩者的主要區別在資料傳送方式和接收方式上 1 在客戶端 get方式是通過url提交資料 post方式是提交後位址列是不變的 2 在伺服器端 get方式是利用解析位址列字串的方式,伺服器獲取get提交的值 post方式是以form的形式提交表單引數 一般來說,盡量避免使用get方式提交表單,因為有可能...