用 HTTP 提交数据,根抵就这五种要领

发布日期:2022-08-07 18:06    点击次数:180

网页开发中,向服务端提交数据是一个根抵功用,事变中会大量用 xhr/fetch 的 api 或许 axios 这类封装了一层的库来做。

可以或许巨匠都写过良多 http/https 相干的代码,然则又没有梳理下它们有哪几种呢?

着实经由过程 http/https 向服务端通报数据的要领,根抵可以或许分为 5 种:url param、query、form-urlencoded、form-data、json。

url param

Restful 的尺度准许把参数写在 url 中,比喻:

http://guang.zxg/person/1111 

这里的 1111 就是门路中的参数(url param),服务端框架或许单页应用的路由都支持从 url 中取出参数。

query

经由过程 url 中 ?后面的用 & 分开的字符串通报数据。比喻:

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

这里的 name 和 age 就是 query 通报的数据。

个中非英文的字符和一些不凡字符要颠末编码,可应用 encodeURLComponent 的 api,或许应用封装了一层的 qeury-string 库来处理惩罚。

const queryString = require('query-string');  queryString.stringify({   name: '光',   age: 20 }); //?name=光&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 的提交数据的要领和服务端交互的。

 



 




Powered by 手机森林舞会游戏客户端首页 @2013-2022 RSS地图 HTML地图