2 回答
TA贡献1868条经验 获得超4个赞
提醒:2014 年,RFC2616 被多个 RFC (7230-7237) 取代。
在 POST 请求中使用查询字符串是一种不好的做法吗?
如果您知道自己在做什么,则不会。
从机械上讲,一切都很好:我们是否允许将 POST 与包含查询部分的目标 uri 一起使用?是的。我们可以使用带有空请求主体的 POST 吗?是的。我们可以同时做这两件事吗?是的。
困难的部分:此 POST 请求是否会使缓存中的正确表示无效?
当服务器对不安全请求(POST 是一种不安全请求方法)返回非错误响应时,就会发生缓存失效。无效的表示是那些匹配不安全请求的目标 uri 的表示。
GET /foo?a=b HTTP/2.0 POST /foo?a=b HTTP/2.0
这里,如果 POST 成功,则 GET 请求成功后缓存的表示将在缓存中失效。
GET /foo HTTP/2.0 POST /foo?a=b HTTP/2.0
在这里,有效的请求 uri 是不一样的,这意味着通用组件不会使缓存的/foo.
TA贡献1811条经验 获得超5个赞
在 POST 请求的 URL 中使用查询参数没有任何问题,无论是否有请求主体。如果它对您的请求具有语义意义,那很好。POST 方法本身具有与 GET 不同的语义含义,它不需要请求主体才有用,而且 URL 也与此不同。一个经典的例子可能是:
POST /foo/bar?token=83q2fn2093c8jm203
即,通过 URL 传递某种令牌。
这里没有一般的安全问题,因为任何可以拦截此 POST 请求以读取 URL 的人也可以读取其正文数据;你很难找到一个允许他们读取 URL 而不是正文的攻击者。但是,URL 通常会记录在服务器访问日志和浏览器历史记录中,而请求主体则不会;这可能值得考虑也可能不值得考虑,具体取决于您在这些参数中传输的信息以及谁有权访问这些日志。
添加回答
举报
