gpt4 book ai didi

http - 基于 HTTP get/post 参数顺序的系统是否可靠?

转载 作者:可可西里 更新时间:2023-11-01 16:26:47 25 4
gpt4 key购买 nike

我正在尝试实现一个依赖于 HTTP get/post 参数顺序的系统。

我希望系统提供远程函数调用机制,例如:假设有一个函数foo(int, int),可以通过HTTP get http://ip:port/method=foo&paramType=int&param=1&paramType=int&param=2<来远程调用 或 HTTP 发布,发布数据为 method=foo&paramType=int&param=1&paramType=int&param=2,在本地充当调用 foo(1,2)

如您所见,它非常依赖于参数顺序。如果参数顺序错误,foo(2,1) 将被意外调用。

但我不确定它是否可靠,因为我认为 W3 没有对参数顺序进行规范(如果我错了请告诉我)。

我不确定参数顺序在三点是否符合预期:

  1. 客户端(如浏览器或jmeter)是否会在如您所见的顺序?
  2. 传输过程中会保留顺序吗?
  3. web会包含(如tomcat)还是web框架(如django)保留参数顺序?

我做了一些测试,发现 chrome、firefox 和 jmeter 会按预期发送 get/post 参数,而 tomcat 保留了参数顺序,但很难找到消极的情况,我不确定是否有这样的情况。所以我不能确定我尝试实现的系统是否可靠。

有没有人有过这样的问题的经验?欢迎提出所有建议。

最佳答案

您不能在 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 Bad Request。在使用之前始终验证输入。

关于http - 基于 HTTP get/post 参数顺序的系统是否可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24645000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com