首页   注册   登录
also24
ONLINE

also24

V2EX 第 16876 号会员,加入于 2012-02-19 09:19:50 +08:00
今日活跃度排名 9
根据 also24 的设置,主题列表只有在你登录之后才可查看
also24 最近回复了
@LinJunzhu #52
无奈脸,所谓的设置 JSON 对象设置的是什么?

就是一个正常的 http post,以 JSON String 作为字符串 body,
再覆盖 header 里的 Content-Type 为 "application/json" 嘛……
自己手动处理下 header 不就好了么…………

requests / okhttp 它们自己也是这样干的啊……

https://github.com/psf/requests/blob/master/requests/models.py#L463

https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/guide/PostExample.java#L15

如果不想这么处理,一定要传 JSON Object 给框架,那么相同的思路我在 6 楼和 10 楼提到的 JSON String 的方式,实质上是一致的。
如果是 Linux 的话,建议复习一下 Linux 的权限机制。


这里涉及到你这个 go 程序是用什么用户跑起来的。

假设是用 www 用户跑起来的,那么你现在相当于在利用这个 www 用户进行读写。
而你上传上去的程序,正常情况下也只能以 www 用户的身份被调用。

你可以改变思路来想这件事儿:
你现在相当于登录了这台主机的 www 用户,你能做哪些操作?

如果这个 go 程序是用 root 用户跑起来的,那么你可以粗略的理解为你现在有了 root 用户的权限,那就可以为所欲为了。

这也就是为什么 nginx / php-fpm 之类的一般跑在 nobody / www 用户下的原因,只要我对这个用户的权限把控的足够好,你即使拿到了这个用户,也翻不起什么波浪。
另外,request body 的方式,和我在 6 楼 10 楼 提到的 “JSON String” 的方式,其实思路上是一致的。

都是通过传递已经被 序列化 后的 JSON String 来保证签名和验签一致的。
换一个方式说:
JSON 的无序,体现在 JSON Object 被 序列化 为 JSON String 的时候,无法保证不同的序列化方式序列化出的 JSON String 是一致的。

而 request body,本身就是一段已经被 序列化 好了的 JSON String,这段已经被 序列化 后的字符串,是可以确定不变的。

如果你经常使用一些 web 请求框架的话,由于框架的封装,你也许会以为自己发送和接收的是 JSON 对象。
但是要搞清楚的是,你收发的只是一串符合 JSON 规范的字符串而已,对 HTTP 来说这和 “hello world” 没有区别。

除非你的请求中间有被篡改过,否则,客户端发送的 request body,和服务端收到的 request body,应当是完全一致的字符串,HTTP 是不会把你的 “hello world” 变成 “world hello” 的。

为什么说你对 HTTP 的了解确实不够深,因为你把下面两件事搞混淆了:
[可能不一致] A:JSON Object 被 序列化 为 JSON String
[确定一致] B:JSON String 被填充在 request body 发送给服务端
@LinJunzhu
request body 就是一串纯文本,可以理解为一个 String,在被解析之前,它是固定不变的,完全不涉及到底是 json 还是 xml 还是 form 的问题。

你的思维被 json 禁锢住了,request body 是更高一个层面的东西。
以及,这样算出来的 hash,需要加在 header 里面,不能动 request body
@LinJunzhu #19
直接对 request body 进行验签是可取的且并不会被乱序干扰到,只能说你确实对 http 协议不够熟悉……
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2489 人在线   最高记录 5168   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 11ms · UTC 10:13 · PVG 18:13 · LAX 02:13 · JFK 05:13
♥ Do have faith in what you're doing.