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

用 HTTP 提交數(shù)據(jù),基本就這五種方式

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

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

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

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

url param

Restful 的規(guī)范允許把參數(shù)寫在 url 中,比如:

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

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

query

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

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

這里的 name 和 age 就是 query 傳遞的數(shù)據(jù)。

其中非英文的字符和一些特殊字符要經(jīng)過編碼,可以使用 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 傳遞數(shù)據(jù)的方式就這 2種,后面 3 種是通過 body 傳遞數(shù)據(jù)的方式。

form-urlencoded

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

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

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

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

form-data

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

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

body 里面就是用 boundary 分割線分割的內(nèi)容。

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

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

json

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

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

我們平時傳輸 json 數(shù)據(jù)基本用的是這種。

這三種是通過 body 傳遞數(shù)據(jù)的方式。

總結(jié)

網(wǎng)頁開發(fā)中向服務(wù)端傳送數(shù)據(jù)是一個基本功能,常用的方式就 url param、query、form urlencoded、form data、json 這 5 種。

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

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

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

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

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

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

 

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

2025-06-23 00:00:05

2019-10-17 09:07:49

TCPUDPHTTP

2024-07-12 11:54:38

2024-08-08 08:38:34

JavaScriptforEach循環(huán)

2025-04-14 08:10:00

負載均衡代碼java

2010-04-22 17:34:25

2013-06-09 16:01:16

JDK8Java8Java8功能

2019-09-20 08:00:00

開發(fā)技能Web開發(fā) 人工智能

2021-11-28 21:26:09

驅(qū)動程序電腦Windows 10

2021-12-16 15:40:35

編程語言微軟語言

2021-12-30 10:36:12

編程語言RubyFlahs

2019-07-09 14:27:43

數(shù)據(jù)科學(xué)統(tǒng)計學(xué)數(shù)據(jù)集

2023-10-16 22:36:41

多線程應(yīng)用程序

2022-06-12 20:53:09

TS typeofJavaScript

2017-12-17 21:05:41

編程語言DevOps

2025-05-16 10:03:09

2022-06-30 21:08:25

大數(shù)據(jù)數(shù)據(jù)湖數(shù)據(jù)倉庫

2021-08-25 10:51:53

數(shù)據(jù)分析大數(shù)據(jù)首席數(shù)據(jù)官

2010-03-03 16:40:55

Python HTTP

2018-11-02 14:20:44

區(qū)塊鏈數(shù)字貨幣比特幣
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产成人福利在线 | 性色av香蕉一区二区 | 亚洲三级国产 | 日韩在线视频一区 | h小视频| 狠狠的操| 一区二区中文字幕 | 一级特黄视频 | 成人精品国产一区二区4080 | 欧美中文在线 | 亚洲一区二区电影在线观看 | 91精品国产91久久久久青草 | 久久三级影院 | 九色在线视频 | 免费在线h视频 | 亚洲精品亚洲人成人网 | 日韩精品色网 | 亚洲欧美激情视频 | 综合九九| 91视频一区 | 欧美精品首页 | 欧美日韩在线播放 | 久久精品综合 | 国产日韩欧美一区二区 | 欧美日韩亚洲视频 | 一区二区三区国产精品 | 99久久婷婷国产综合精品电影 | 久久毛片 | 免费一区二区三区在线视频 | 欧美日韩亚洲国产综合 | 欧美一区二区三区四区五区无卡码 | 亚洲人成人一区二区在线观看 | 国产精品视频一区二区三 | 久久性色| 久久精品亚洲国产 | 最新日韩在线 | 久久精品色视频 | 欧美一区二区在线观看 | 成人在线精品 | 中文字幕在线观看国产 | 欧美国产中文字幕 |