1. 程式人生 > >ajax 中 post 請求 和 get 請求的區別(二)

ajax 中 post 請求 和 get 請求的區別(二)

get 請求

1、傳遞資料方式: 資料直接在post 的 url 中傳遞,直接拼接在 url ? 後面,多個數據用 & 符號拼接

xhr.open('get ‘, 2.get.php?username = Tom & age = 30&’)

2、傳遞資料的型別: 字串型別

3、傳遞資料的大小問題: 由於 url 長度限制的原因,如果通過get方式提交過多的資料,可能被截斷,導致傳遞給後端的資料不完整

4、 快取問題: get請求會根據我們的請求連結來進行快取,從而導致後端更改的資料無法及時更新

解決方案: 可以在請求連結的問好(?)後面用 & 符號連線一個變數,比如:時間戳或者隨機數之類的,這樣每次的連線地址都是不一樣的,也就不會快取了
比如: xhr.open('get ‘, 2.get.php?username = Tom & age = 30&’ + new Data().getTime(), true);

5、編碼問題: 在傳遞資料的時候,需要傳遞中文字之類的,就會出現亂碼的情況,導致無法正常獲取到資料

解決方案: 使用encodeURI
比如:xhr.open('get ', 2.get.php?username = '+ encodeURI(‘小明’) ‘+ &age = 30’ , true);

6、資訊保安性: 在第一條中說到 get 是將傳遞的資料直接放在url中,也就是所有的人都可以直接在位址列上看到使用者的資訊,相對來說安全性比較低


post 請求:

1、傳遞資料方式: 在請求頭中傳遞資料,資料放在send()中作為引數傳遞。

xhr.send(’ username=Tom& age=30 ’ )

2、設定傳遞資料的型別 :

xhr.setRequestHeader(’ content-type ', ’ application/x-www-form-urlencoded ')

由於後端無法直接判斷我們傳過去的資料是什麼型別的,所以需要手動設定,以告訴後端

3、 傳遞資料大小問題: 預設8M左右,但是後端可以修改,所以理論上沒有限制

4、快取問題:
post是屬於提交型別的資料傳遞,在這裡是沒有快取問題的

5、編碼問題:
由於在之前已經設定過傳遞資料型別 content-type 所以,這裡傳遞資料的時候可以直接傳中文,不需要再次轉碼

6、資訊保安性: post請求是通過請求頭來傳遞資料,沒有直接將資訊暴露在外,安全性相對要高一些