成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用 HTTP 提交數據,基本就這五種方式

開發 前端
網頁開發中,向服務端提交數據是一個基本功能,工作中會大量用 xhr/fetch 的 api 或者 axios 這種封裝了一層的庫來做。

網頁開發中,向服務端提交數據是一個基本功能,工作中會大量用 xhr/fetch 的 api 或者 axios 這種封裝了一層的庫來做。

可能大家都寫過很多 http/https 相關的代碼,但是又沒有梳理下它們有哪幾種呢?

其實通過 http/https 向服務端傳遞數據的方式,基本可以分為 5 種:url param、query、form-urlencoded、form-data、json。

url param

Restful 的規范允許把參數寫在 url 中,比如:

  1. http://guang.zxg/person/1111 

這里的 1111 就是路徑中的參數(url param),服務端框架或者單頁應用的路由都支持從 url 中取出參數。

query

通過 url 中 ?后面的用 & 分隔的字符串傳遞數據。比如:

  1. http://guang.zxg/person?name=guang&age=20 

這里的 name 和 age 就是 query 傳遞的數據。

其中非英文的字符和一些特殊字符要經過編碼,可以使用 encodeURLComponent 的 api,或者使用封裝了一層的 qeury-string 庫來處理。

  1. const queryString = require('query-string'); 
  2.  
  3. queryString.stringify({ 
  4.   name'光'
  5.   age: 20 
  6. }); 
  7. //?name=%E5%85%89&age=20 

通過 URL 傳遞數據的方式就這 2種,后面 3 種是通過 body 傳遞數據的方式。

form-urlencoded

直接用 form 表單提交數據就是這種,它和 query 字符串的方式的區別只是放在了 body 里,然后指定下 content-type 是 application/x-www-form-urlencoded。

因為也是 query 字符串,所以也要用 encodeURIComponent 的 api 或者 query-string 庫處理下。

其實這種設計也很容易理解,get 是把數據拼成 query 字符串放在 url 后面,于是設計表單的 post 提交方式的時候就直接用相同的方式把數據放在了 body 里。

通過 & 分隔的 form-urlencoded 的方式需要對內容做 url encode,如果傳遞大量的數據,比如上傳文件的時候就不是很合適了,因為文件 encode 一遍的話太慢了,這時候就可以用 form-data。

form-data

form data 不再是通過 & 分隔數據,而是用 --------- + 一串數字做為分隔符。因為不是 url 的方式了,自然也不用再做 url encode。

form-data 需要指定 content type 為 multipart/form-data,然后指定 boundary 也就是分割線。

body 里面就是用 boundary 分割線分割的內容。

很明顯,這種方式適合傳輸文件,而且可以傳輸多個文件。

但是畢竟多了一些只是用來分隔的 boundary,所以請求體會增大。

json

form-urlencoded 需要對內容做 url encode,而 form data 則需要加很長的 boundary,兩種方式都有一些缺點。如果只是傳輸 json 數據的話,不需要用這兩種。

可以直接指定content type 為 application/json 就行:

我們平時傳輸 json 數據基本用的是這種。

這三種是通過 body 傳遞數據的方式。

總結

網頁開發中向服務端傳送數據是一個基本功能,常用的方式就 url param、query、form urlencoded、form data、json 這 5 種。

前 2 種是通過 url 傳遞數據的方式(需要對數據做 url encode),后 3 種是通過 body 傳遞數據。

form urlencoded 只是把 query 放在了 body 里,同樣需要對數據做 url encoded,所以處理文件就不合適了。(content type 要指定為 application/x-www-form-urlencoded)

form data 是通過 boundary 分隔內容,不需要做 url encode,所以用來傳文件很合適。但是如果不是傳文件就沒必要用了,因為多了一些 boundary 字符串比較占空間。(content type 要指定為 multipart/form-data)

json 是現在最常用的傳遞數據的方式,既不需要 url encoded,又不需要加沒必要的 boundary。(指定 content type 為 application/json)。

當然,也可以指定別的 content type,比如 application/xml、text/plain 等,但一般不會用。

99% 情況下,我們都是通過這 5 種 http/https 的提交數據的方式和服務端交互的。

 

責任編輯:武曉燕 來源: 神光的編程秘籍
相關推薦

2025-04-14 08:10:00

負載均衡代碼java

2024-08-08 08:38:34

JavaScriptforEach循環

2025-06-23 00:00:05

2019-10-17 09:07:49

TCPUDPHTTP

2024-07-12 11:54:38

2019-09-20 08:00:00

開發技能Web開發 人工智能

2021-11-28 21:26:09

驅動程序電腦Windows 10

2023-10-16 22:36:41

多線程應用程序

2022-06-12 20:53:09

TS typeofJavaScript

2010-04-22 17:34:25

2013-06-09 16:01:16

JDK8Java8Java8功能

2021-12-16 15:40:35

編程語言微軟語言

2021-12-30 10:36:12

編程語言RubyFlahs

2018-11-02 14:20:44

區塊鏈數字貨幣比特幣

2019-09-11 09:21:54

Facebook法定貨幣比特幣

2016-03-12 21:35:37

2018-09-29 05:12:54

廣域網網絡連接DDN

2019-07-09 14:27:43

數據科學統計學數據集

2017-12-17 21:05:41

編程語言DevOps

2025-05-16 10:03:09

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人一区二区三区在线 | 久久蜜桃精品 | 久久这里有精品 | 亚洲欧美日韩系列 | 99国产精品99久久久久久 | 国产乱码精品一区二区三区五月婷 | 久久中文字幕一区 | 欧美精品中文字幕久久二区 | 免费成人高清 | 久草在线| 一区二区国产精品 | 日韩中文一区二区三区 | 欧美一级欧美三级在线观看 | 青青激情网 | 欧美一级在线观看 | 中文字幕在线视频观看 | 国产日韩欧美在线一区 | 成人在线观看欧美 | 国产精品久久久久久妇女6080 | 久久久青草 | 成人在线免费视频 | 亚洲精品福利在线 | 精品国产91乱码一区二区三区 | 亚洲高清在线 | 久久伊人在 | 久久久久久综合 | 国产成人精品一区二区三区在线 | 国产美女在线观看 | 国产一级毛片视频 | 爱爱视频在线观看 | 亚洲精品免费在线 | 亚洲最大av| 国产aⅴ精品 | 久久国产精彩视频 | 日韩中文字幕免费在线观看 | 99久久婷婷国产综合精品电影 | 亚洲视频一区 | 日韩1区 | 美女天天干天天操 | 污视频免费在线观看 | 亚洲三区在线 |