0

我创建了一个 API 控制器来仅处理来自 Android 应用程序的 json 请求。当然,我正在使用令牌身份验证。更好的是:使用 POST 发送请求:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.0.170:3000/api/get_all");
httppost.setHeader("content-type", "application/json; charset= utf-8");
httppost.setHeader("Accept", "application/json");
JSONObject json = new JSONObject();
json.put("token", token);
StringEntity entity = new StringEntity(json.toString(), "utf-8");
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);

或获取:

httpget = new HttpGet("http://10.0.0.170:3000/api/get_all?"+"token="+token);
httpget.setHeader("content-type", "application/json; charset= utf-8");
httpget.setHeader("Accept", "application/json");
response = httpclient.execute(httpget);
result = EntityUtils.toString(response.getEntity());

显然 GET 中的代码更少,但是还有其他一些理由更喜欢其中一个吗?

4

1 回答 1

1

即使您使用此令牌进行简单查找,即不更改服务器上的状态,也请使用 POST。如果您使用 GET,Web 服务器将记录所有查询参数,使其更容易受到例如日志注入攻击。

您还应该考虑在生产中使用 HTTPS 作为身份验证令牌。在您的代码中,还要考虑处理来自 Web 服务器的返回状态(例如,当它不是 200 时)。

一般来说,对于 POST 与 GET 的选择,您还可以参考 W3C:

在以下情况下使用 GET:

  • 交互更像是一个问题(即,它是一种安全操作,例如查询、读取操作或查找)。

在以下情况下使用 POST:

  • 交互更像是一个命令,或者
  • 交互以用户感知的方式更改资源的状态(例如,订阅服务),或
  • 用户应对交互结果负责。
于 2013-07-22T22:39:13.753 回答