如何看出网页 提交方式 是 post 还是 get?

如何看出网页 提交方式 是 post 还是 get?,第1张

看ie的地址栏,如果跳转过去时的路径的尾部中含有“?parm1=值1&param2=值2&……”则为get提交的,这种提交方式不安全。

如果没有上面提到的,那么就是post提交,这种打包方式提交的数据较get要安全。

只是粗略的说了一下,也会有例外的情况,比如:通过链接带参数值走时就是一个例外。如果想深入了解的话,你可以查找相关资料

首先要知道分页显示数据需要哪些参数,包括总共有多少条数据的参数dataCount,每页显示多少条数据的参数pageSize,总共有多少页数的参数pageCount,当前页数(页码)的参数pageIndex。

获取总共多少条数据的参数dataCount非常简单,执行Sql语句“select count(*) from test”就可以拿到dataCount值了,还有一个非常简单的参数就是当前页数(页码)pageIndex默认就是1。

每页显示多少条数据根据网页显示量来设定,假设网页一页显示10,那么pageSize就是10,有dataCount和pageSize值,总共有多少页数也就可以获得了,pageCount=dataCount/pageSize,通过这样计算页数方式获得的数据量一定小于实际的页数,这里就需要用到取顶函数pageCount=1.0*dataCount/pageSize。

关键就是如何通过准备的参数获取数据,还需要用到Sql Server2005及以上版本的数据库才有的给数据库表数据查询时增加序号的函数,这是因为我们存放在数据库的数据没有连续自动增长的编号,借助函数row_number()可以通过按某个字段排序设定序号,方便获取数据准确。

比较两条Sql语句“select * from test”和“select *,row_number() over(order by Test1) as '序号' from Test”查询数据进行比较就会发现在查询结果中会增加一个通过字段Test1排序而产生的一个序号,并且这个序号是连续自动增长的。

接下来创建存储过程,指定参数就可以了。

create proc P_Test--创建存储过程P_Test

@pageSize int,--每页数据条数

@pageIndex int,--当前页数(页码)

@pageCount int output--总的页数,因为需要显示页数,因此是个输出参数

as

declare @datacount int--总数据条数

select @datacount=count(*) from test--获得总数据条数值并赋给参数

set @pageCount=ceiling(1.0*@datacount/@pageSize)--获得总页数,并赋给参数

--接下来是获得指定页数据

select * from

(select *,row_number() over(order by Test1) as num from test) as temp

where num between @pageSize*(@pageIndex-1)+1 and @pageSize*@pageIndex

本文所讲的 POST 请求是 HTTP/1.1 协议中规定的众多 HTTP 请求方法的其中最常用的一个。一般使用 POST 请求方法向服务器发送数据(主要是一些创建更新 *** 作),本文讨论的是 POST 请求方法常用的四种数据提交格式。

由于 HTTP/1.1 协议中并没有对请求使用什么编码方式进行规定,所以理论上开发者完全可以自己决定请求的 Body 体使用什么格式,当然实际上大家都还是用通用的那么几种编码方式来提交数据(生态很关键)。

注:以下排名不分先后。。。

对于浏览器原生的 form 表单,enctype 的值不指定的话,默认就是这个家伙。实际上大部分情况都使用它即可,编码方式足够简单高效,各方面支持也都很完备,如各大浏览器调试工具、各大抓包软件等。

基本的请求类似上面这样,数据的编码方式采用 key1=val1&key2=val2 的形式,对其中的键值对都需要使用 URL Encode 编码一下。其实就是和 GET 请求的数据提交格式是一样的,只不过位置从 Request URL 上换到了 Request Body 里。

这种格式结构简单,但对于数据层级较深的情况,比如一些有复杂层级关系的接口数据,这种方式就显得有点力不从心了。另一方面,对于需要上传二进制数据(比如图像、音频等文件),这种方式就不那么高效了,而且对于非 ASCII 码的数据就丢失了,所以传文件的情况就不能使用这种方式。

适用场景:数据量不大、数据层级不深的情况下强烈建议这种数据提交格式。

multipart/form-data

当你需要提交文件、非 ASCII 码的数据或者是二进制流数据,则使用这种提交方式。类似下面这个请求示例:

第二行指定编码方式 Content-Type 为 multipart/form-data,紧接着生成一个分界线 boundary 即 ----WebKitFormBoundaryPAlLG7hJKNYc4ft3,又臭又长的目的是为了避免和 Body 正文内容有冲突,它的作用是用来分隔不同的字段。

Body 体分为多个结构类似的部分,每一部分以 --boundary 开头,因为本次请求生成的 boundary 为 ----WebKitFormBoundaryPAlLG7hJKNYc4ft3,所以最终是 ------WebKitFormBoundaryPAlLG7hJKNYc4ft3。接着是描述内容的元信息,包括字段名称,如果是文件则还有文件名称和文件类型。接着留一空行,然后才是字段值。什么时候结束呢,以 --boundary-- 标志结束。

这种方式本就是专为上传文件的场景设计的,虽然你也可以使用这种方式传递普通数据,但无疑会增加不少数据包的大小(这么多 boundary 还是有不少空间占用的)。

适用场景:文件上传。

application/json

很明显在 JSON 格式火之前,肯定没有它的,前面说到使用什么提交数据方式是没有硬性规定的,所以在 JSON 格式火了以后,尤其以其优秀的数据结构表达能力,逐渐流行开来,现在我们对它完全不会陌生。

适用场景:数据结构较复杂,层级较深的情况。

更多 web前端 知识,请查阅 HTML中文网 !!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9775379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存