Ale*_*din 7 javascript forms rest networking post
有一个系统将POST请求从前端发送到后端。这些POST请求不使用主体将数据传递给服务器;相反,它在 URL 参数中使用查询字符串。
这些请求不发送文件或 JSON,仅发送几个字符串参数。
W3C 没有描述这种情况https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
使用查询字符串进行 POST 请求是否是一种不好的做法?由于安全、性能或体系结构原因,使用查询字符串是否会产生任何负面后果?
是否有任何约定定义不同类型请求的正文或查询字符串的用法?
提醒:2014 年,RFC2616 被多个 RFC (7230-7237) 取代。
在 POST 请求中使用查询字符串是一种不好的做法吗?
如果你知道自己在做什么就不会。
从机制上来说,一切都很好:我们是否可以将 POST 与包含查询部分的目标 uri 一起使用?是的。我们是否可以使用带有空请求正文的 POST ?是的。我们可以同时做这两件事吗?是的。
困难的部分:此 POST 请求会使缓存中的正确表示无效吗?
当服务器对不安全请求(POST 是一种不安全请求方法)返回非错误响应时,就会发生缓存失效。无效的表示是那些与不安全请求的 target-uri 匹配的表示。
GET /foo?a=b HTTP/2.0
POST /foo?a=b HTTP/2.0
Run Code Online (Sandbox Code Playgroud)
这里,如果 POST 成功,则 GET 请求成功后缓存的表示将在缓存中失效。
GET /foo HTTP/2.0
POST /foo?a=b HTTP/2.0
Run Code Online (Sandbox Code Playgroud)
这里,有效的 request-uri 并不相同,这意味着通用组件不会使/foo.
在 POST 请求的 URL 中使用查询参数没有任何问题,无论是否带有请求正文。如果它对您的请求具有语义意义,那就没问题。POST 方法本身具有与 GET 不同的语义含义,它不需要有用的请求正文,并且 URL 也与此不同。一个经典的例子可能是:
POST /foo/bar?token=83q2fn2093c8jm203
Run Code Online (Sandbox Code Playgroud)
即,通过 URL 传递某种令牌。
这里不存在一般的安全问题,因为任何可以拦截此 POST 请求以读取 URL 的人也可以读取其正文数据;您几乎找不到攻击者能够读取 URL 但无法读取正文的位置。然而,URL 通常会记录在服务器访问日志和浏览器历史记录中,而请求正文则不会;这可能值得考虑,也可能不值得考虑,具体取决于您在这些参数中传输的信息以及谁有权访问这些日志。