依赖HTTP get/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) 如您所见,它非常依赖

我试图实现一个依赖于HTTPGET/post参数顺序的系统

我希望系统提供远程函数调用机制,例如: 假设有一个函数
foo(int,int)
,可以通过HTTP get
http://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没有为参数顺序制定规范(如果我错了,请告诉我)

我不确定参数顺序在三个方面是否与预期一致:

  • 客户端(如浏览器或jmeter)是否会在 如你所见的秩序
  • 传输过程中是否会保留订单
  • web将包含(如tomcat)还是web框架(如django) 是否保留参数顺序
  • 我做了一些测试,发现chrome、firefox和jmeter将按预期发送get/post参数,tomcat保留了参数顺序,但要找到否定的情况很难,我不确定是否存在这种情况。所以我不能确定我试图实现的系统是否可靠


    有没有人有过这样的经历?欢迎所有建议。

    如果顺序很重要,我会按照@TGH said的方式进行设计,其中参数是路径的一部分,如
    http://someServer/param1/param2
    。这将强制执行订购,并且不允许以任何其他方式发出请求。如果使用期望浏览器维护订单的查询参数进行设计,则可能会有人利用安全漏洞

    您不能在URL查询字符串或
    application/x-www-form-urlencoded
    post中强制参数顺序。尽管W3C定义了HTML,以按表单值在HTML中的显示顺序传输表单值,但服务器端脚本可以按名称以任何顺序自由访问参数,并且具有多个同名参数会导致灾难。您需要重命名参数以使其唯一并独立排序,例如:

    method=foo&param1Type=int&param1=1&param2Type=int&param2=2
    
    通过这种方式,
    foo()
    可以读取其2
    paramX
    参数,而不管其顺序如何。例如,这也将是完全有效的,并且仍然有效:

    param2=2&param1=1&param1Type=int&param2Type=int&method=foo
    
    就个人而言,我建议您删除
    paramType
    参数:

    method=foo&param1=1&param2=2
    

    API规范规定了参数的数据类型。如果客户端将非整数值发送到
    foo()
    ,则返回HTTP错误,如
    400错误请求
    。在使用输入之前,请始终验证输入。

    我遇到的每件事都会保持同一个键的多个值的顺序,即使它会干扰不同键的顺序。您有到W3C规范的链接吗?