get 與 post的區別?application json 與form表單的區別?

1.背景介紹

基本概念HTTP:在Web應用中,服務器把網頁傳給瀏覽器,實際上就是把網頁的HTML代碼發送給瀏覽器,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協議是HTTP。

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。

工作原理:HTTP協議工作于客戶端-服務端,瀏覽器作為HTTP客戶端通過URL(統一資源定位符)向HTTP服務端發送請求,服務器接收到請求后,向客戶端發送響應信息。

三大特點:1.無連接 2.靈活快速 3.無狀態

消息結構客戶端請求消息:由請求行、請求頭部、空行、請求數據組成。

2.知識剖析

1.get與post的區別首先我們要知道GET和POST都是HTTP定義的和服務器互交的不同方法。

1.語義上的不同:GET:獲取指定URL上的資源,是讀操作。

POST:向指定資源“追加/添加”數據。

2.對于“安全”所代表的設定。根據HTTP規范,GET用于信息獲取,而且應該是安全的和冪等的。所謂的安全意味著該操作用于獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。就是說,它僅僅是獲取資源信息,就像數據庫查詢一樣,不會修改,增加數據,不會影響資源的狀態。這里安全的含義僅僅是指是非修改信息。冪等意味著對同一URL的多個請求應該返回同樣的結果。

根據HTTP規范,POST表示可能修改變服務器上的資源的請求。對于傳遞過程來說,指的是提交的數據不會直接在地址欄看見。

POST的安全性要比GET的安全性高。注意:這里所說的安全性和上面GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作數據修改,而這里安全的含義是真正的Security的含義,比如:通過GET提交數據,用戶名和密碼將明文出現在URL上,因為:

(1)登錄頁面有可能被瀏覽器緩存

(2)其他人查看瀏覽器的歷史紀錄,那么別人就可以拿到你的賬號和密碼了,除此之外,使用GET提交數據還可能會造成Cross-site request forgery攻擊。

3.請求數據方法不同: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。HTTP協議沒有對get和post做長度的限制,但是瀏覽器會對url長度做限制最多1024字節,所以get方法傳遞數據受限制。

POST把提交的數據則放置在是HTTP包的包體中。如:name1=value1&name2=value2

4.GET是冪等的,POST是非冪等的先介紹下冪等的概念:如果一個操作沒有副作用,或者多次操作對資源產生的副作用相同,我們就說這個操作是冪等的。

get方法用戶獲取資源,沒有副作用,所以是冪等的;post用于創建資源,是有副作用的,且副作用不同,所以post不是冪等的。(兩次相同的POST請求會在服務器端創建兩份資源,它們具有不同的URI)

上圖是在W3C上找到的答案.

因為POST請求的協議并沒有規定數據必須使用什么編碼方式,而數據發送出去,還要服務器解析成功才行。服務器則通常根據請求頭里的Content-Type字段來獲知消息是以什么方式編碼,再以對應方式解析。而有的接口服務器則不能解析某些編碼方式的數據。因此需要對Content-Type進行設置。

2.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 方式提交數據。請求的時候,首先,Content-Type 被指定為 application/x-www-form-urlencoded; 其次,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼。 大部分服務端語言都對這種方式有很好的支持。

3.常見問題GET和POST使用環境

4.解決方案應該符合語義的使用;即獲取數據使用GET,增加數據使用POST.

當請求無副作用時(如進行搜索),便可使用GET方法;當請求有副作用時(如添加數據行),則用POST方法。

5.編碼實戰參考任務代碼

6.擴展思考被提問get和post如何唬倒面試官

普通回答:GET在瀏覽器回退時是無害的,而POST會再次提交請求。

GET產生的URL地址可以被Bookmark,而POST不可以。

GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。

GET請求只能進行url編碼,而POST支持多種編碼方式。

GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。

GET請求在URL中傳送的參數是有長度限制的,而POST么有。

對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。

GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息。

GET參數通過URL傳遞,POST放在Request body中。

清新回答:GET和POST是什么?HTTP協議中的兩種發送請求的方法。

HTTP是什么?HTTP是基于TCP/IP的關于數據如何在萬維網中如何通信的協議。

HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP鏈接。GET和POST能做的事情是一樣一樣的。你要給GET加上request body,給POST帶上url參數,技術上是完全行的通的。 GET產生一個TCP數據包;POST產生兩個TCP數據包。

對于GET方式的請求,瀏覽器會把http header和data一并發送出去,服務器響應200(返回數據); 而對于POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。

7.參考文獻參考一:理解本真的REST架構風格

參考二:W3C

參考三:99%的人理解錯 HTTP 中 GET 與 POST 的區別

8.更多討論

Q:還有哪些其他的提交表頭的方法?

A:multipart/form-data,這又是一個常見的 POST 數據提交的方式。我們使用表單上傳文件時,必須讓 form 的 enctyped 等于這個值。

text/xml它是一種使用 HTTP 作為傳輸協議,XML 作為編碼方式的遠程調用規范

Q:get和post的安全性?

A:Get提交,將要提交的內容方法哦URL后邊使用?進行連接。這種提交方式可能讓一些用戶看到一些保密信息,比如用戶名,密碼等信息。帶來的一定的安全隱患。而post提交方式,是將請求的信息放到數據報中(請求體),其他人職能看到URL的信息,而不能看到別的信息。從而提高了安全性,這就是我們最通常的認識偶然看到了一篇博客,里邊提到get方式也是安全的。因為我們提交的敏感信息,一般都是進行不可逆加密的!所以得到了頁沒有什么。他們安全性我們只考慮了用戶而沒有考慮服務器,post方式提交的數據的長度不受限制,所以黑客可以向服務器提交大量的數據,致使服務器忙于處理這些數據,而無暇處理用戶的正常請求,到處服務器癱瘓!當我們使用get 提交的時候,不要提交一些敏感數據。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內容