我该如何在HTTP GET请求中发送原始数据?

5
http://alx3apps.appspot.com/jsonrpc_example/的示例中,当我点击提交按钮时,我注意到(通过使用Firebug),我的浏览器提交了以下源代码:
{"params":["Hello ","Python!"],"method":"concat","id":1}

这里需要注意的是,不是要传递参数(例如:json=[以上编码字符串]),而是只需使用上述值发布原始字符串。
是否有一种广泛接受的方式可以通过GET请求复制此操作,还是我需要将相同的字符串进行urlencode,并将其作为http://www.example.com/?json=%7b%22params%22%3a%5b%22Hello+%22%2c%22Python!%22%5d%2c%22method%22%3a%22concat%22%2c%22id%22%3a1%7d包含在其中?我知道一些旧浏览器无法处理超过250个字符的URI,但我可以接受这一点。
2个回答

4

GET请求通常除了头部信息外不会传输其他数据,因此如果您想使用GET请求,应该将字符串编码在URL中传递。

POST http://alx3apps.appspot.com/jsonrpc_example/json_service/ HTTP/1.1
Host: alx3apps.appspot.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/json-rpc; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://alx3apps.appspot.com/jsonrpc_example/
Content-Length: 55
Pragma: no-cache
Cache-Control: no-cache

{"params":["Howdy","Python!"],"method":"concat","id":1}

在正常的表单提交中,头部Content-Type: application/x-www-form-urlencoded表示服务器应该以key=val格式解析数据,而你提供的页面发送的是Content-Type: application/json-rpc; charset=UTF-8。在头部之后(以空行结束),数据按照指定格式进行传输。

1

你说得对,只有POST方法可以把数据分开提交到URI里。所以如果你必须使用GET方法的话,把它url编码到查询字符串里是唯一可行的方式。(嗯,我猜你也可以尝试设置自定义请求头或使用cookies,但唯一“广泛接受”的方式还是使用查询字符串。)


RFC2616并没有明确表示GET请求不能带有消息体,但在实践中,它不支持(因此出现了查询字符串“hack”)。正如Domenic所说,POST是最被广泛接受的方式,可以通过提交消息体数据或查询字符串来完成这个需求。 - Kylar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接