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