今天給大家分享:【JS-Task05】get 與 post的區別?application json 與form表單的區別?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 分享人:聶義中
目錄
1.背景介紹
2.知識剖析
3.常見問題
4.解決方案
5.編碼實戰
6.擴展思考
7.參考文獻
8.更多討論
1.背景介紹
首先我們要了解HTTP協議,這是一種通信協議,不同的聯機方式與所使用的網絡服務而定, 會有不同的通信協議,發送郵件的時候要使用SMTP,傳輸文件會使用FTP,下載信件時會 使用POP3等,而瀏覽器跟WEB服務器之間的溝通方式則是HTTP。
HTTP是一種基于請求響應的通信協議,客戶端對服務器發出一個取得資源的請求,服務器 將要求的資源響應給客戶端,每次的聯結只作一次請求/響應,是一種很簡單的通信協議, 沒有請求就沒有響應
HTTP協議之下,服務器是個健忘的家伙,服務器響應客戶端之后,就不會記得客戶端的信息, 更不會去維護與客戶端有關的狀態,因此http又稱為無狀態的通信協議
URL全稱是資源描述符,我們可以這樣認為:一個URL地址,它用于描述一個網絡上的資源, 而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源的查 ,改 ,增 ,刪 4個操作。 到這里,大家應該有個大概的了解了,GET一般用于獲取/查詢 資源信息,而POST一般用于更新 資源信息
2.知識剖析
get
get請求,顧名思義,就是向服務器取得指定的資源,在發出get請求時必須一并告訴服務器所請求資源的URL,以及一些標頭信息
post
POST請求,顧名思義,就是在請求的時候發布信息給服務器,對于大量或復雜的信息發送,基本都會采用POST來進行發送
3.常見問題
get 與 post的區別?
4.解決方案
post和get之間的差別?
1. get是從服務器上獲取數據,post是向服務器傳送數據。
get 和 post只是一種傳遞數據的方式,get也可以把數據傳到服務器, 他們的本質都是發送請求和接收結果。只是組織格式和數據量上面有差別, http協議里面有介紹
2.GET請求的數據會附在URL之后(就是把數據放置在HTTP協議頭中) ,以?分割URL和傳輸數據,參數之間以&相連,如: login.action? name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。 如果數據是英文字母/數字,原樣發送,如果是空格,轉換為+,如果是 中文/其他字符,則直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD, 其中%XX中的XX為該符號以16進制表示的ASCII。
因為get設計成傳輸小數據 ,而且最好是不修改服務器的數據,所以瀏覽器一般都在地址欄里面可以看到, 但post一般都用來傳遞大數據,或比較隱私的數據,所以在地址欄看不到, 能不能看到不是協議規定, 是瀏覽器規定的。
3. 對于get方式,服務器端用Request.QueryString獲取變量的值, 對于post方式,服務器端用Request.Form獲取提交的數據。
怎么獲得變量和你的服務器有關,和get或post無關,服務器都對這些請求做了封裝 4. get傳送的數據量較小,不能大于2KB。post傳送的數據量較大 ,一般被默認為不受限制。
post基本沒有限制,我想大家都上傳過文件,都是用post方式的。只不過要修改 form里面的那個type參數
5. get安全性非常低,post安全性較高。
5.編碼實戰
6.擴展思考
application json 與form表單的區別?
application/json 這個 Content-Type 作為響應頭大家肯定不陌生。實際上, 現在越來越多的人把它作為請求頭,用來告訴服務端消息主體是序列化后的 JSON 字符串。 由于 JSON規范的流行,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify, 服務端語言也都有處理 JSON 的函數,使用 JSON 不會遇上什么麻煩。angular中默認的就是這個格式
application/x-www-form-urlencoded 這應該是最常見的 POST 提交數據的方式了。瀏覽器的原生 form 表單,如果不設置 enctype 屬性, 那么最終就會以 application/x-www-form-urlencoded 方式提交數據。請求類似于下面這樣 ( 無關的請求頭在本文中都省略掉了): POST http://www.example.com HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3 首先,Content-Type 被指定為 application/x-www-form-urlencoded; 其次,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val都進行了 URL 轉碼。 大部分服務端語言都對這種方 式有很好的支持。例如 PHP 中,$_POST['title'] 可以獲取到 title 的值,$_POST['sub'] 可以得到 sub 數組。
這兩種方式也是經常被互相轉換的使用的,一般情況從json轉換成form的情況會相對多一些。
7.參考文獻
https://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
https://www.zhihu.com/question/51359933?from=profile_question_card
8.更多討論
1 post可以修改數據嗎?
答: 按照HTTP規范來說是不可以的,但是實際上可以用?。穑铮螅魜硇薷臄祿?/p>
2?。纾澹簟『汀。穑铮螅簟≡趯嶋H應用中怎么選擇
答: get只能提交少量的數據,而post幾乎對提交的數據大小無限制,所以用post 總是沒錯的。
3? ? ?還有哪些其他的提交表頭的方法?
答:? ?multipart/form-data,這又是一個常見的 POST 數據提交的方式。我們使用表單上傳文件時,必須讓 form 的 enctyped 等于這個值。
鳴謝
感謝大家觀看
BY :聶義中
今天的分享就到這里啦,歡迎大家點贊、轉發、留言、拍磚~