依赖HTTP get/post参数顺序的系统可靠吗?
我试图实现一个依赖于HTTPGET/post参数顺序的系统 我希望系统提供远程函数调用机制,例如: 假设有一个函数依赖HTTP get/post参数顺序的系统可靠吗?,http,post,get,Http,Post,Get,我试图实现一个依赖于HTTPGET/post参数顺序的系统 我希望系统提供远程函数调用机制,例如: 假设有一个函数foo(int,int),可以通过HTTP gethttp://ip:port/method=foo¶mType=int¶m=1¶mType=int¶m=2或HTTP post,post数据为method=foo¶mType=int¶m=1¶mType=int¶m=2,在本地充当调用foo(1,2) 如您所见,它非常依赖
foo(int,int)
,可以通过HTTP gethttp://ip:port/method=foo¶mType=int¶m=1¶mType=int¶m=2
或HTTP post,post数据为method=foo¶mType=int¶m=1¶mType=int¶m=2
,在本地充当调用foo(1,2)
如您所见,它非常依赖于参数顺序。如果参数顺序出错,foo(2,1)
将被调用为意外
但我不确定它是否可靠,因为我认为W3没有为参数顺序制定规范(如果我错了,请告诉我)
我不确定参数顺序在三个方面是否与预期一致:
有没有人有过这样的经历?欢迎所有建议。如果顺序很重要,我会按照@TGH said的方式进行设计,其中参数是路径的一部分,如
http://someServer/param1/param2
。这将强制执行订购,并且不允许以任何其他方式发出请求。如果使用期望浏览器维护订单的查询参数进行设计,则可能会有人利用安全漏洞 您不能在URL查询字符串或application/x-www-form-urlencoded
post中强制参数顺序。尽管W3C定义了HTML,以按表单值在HTML中的显示顺序传输表单值,但服务器端脚本可以按名称以任何顺序自由访问参数,并且具有多个同名参数会导致灾难。您需要重命名参数以使其唯一并独立排序,例如:
method=foo¶m1Type=int¶m1=1¶m2Type=int¶m2=2
通过这种方式,foo()
可以读取其2paramX
参数,而不管其顺序如何。例如,这也将是完全有效的,并且仍然有效:
param2=2¶m1=1¶m1Type=int¶m2Type=int&method=foo
就个人而言,我建议您删除paramType
参数:
method=foo¶m1=1¶m2=2
API规范规定了参数的数据类型。如果客户端将非整数值发送到
foo()
,则返回HTTP错误,如400错误请求
。在使用输入之前,请始终验证输入。我遇到的每件事都会保持同一个键的多个值的顺序,即使它会干扰不同键的顺序。您有到W3C规范的链接吗?