HTTP中GET或PUT方式传body数据
2019-10-09 本文已影响0人
xxuuq
当我们在使用restful api风格写接口的时候,我们可能会这样
-
GET
查询操作 -
POST
新增操作 -
PUT
更新操作 -
DELETE
删除操作
我们知道
GET
PUT
DELETE
传参方式为params
POST
传参方式为body
当我们有一个PUT
方法更新用户信息的接口/user/{user_id}
,当更新用户头像时可能需要在body中传递头像文件,那这时怎么办呢?
两种方案
大多数框架中都对这两种方法做了处理
- 使用post方法,并在body中添加参数
_method = put
- 使用post方法,并在header中添加参数
X-HTTP-METHOD-OVERRIDE = put
例子
表单中
<form method="post" ...>
<input type="hidden" name="_method" value="put" />
...
postman中


我们看laravel框架对这两种方法的处理
public function getMethod()
{
if (null === $this->method) {
$this->method = strtoupper($this->server->get('REQUEST_METHOD', 'GET'));
if ('POST' === $this->method) {
if ($method = $this->headers->get('X-HTTP-METHOD-OVERRIDE')) {
$this->method = strtoupper($method);
} elseif (self::$httpMethodParameterOverride) {
$method = $this->request->get('_method', $this->query->get('_method', 'POST'));
if (\is_string($method)) {
$this->method = strtoupper($method);
}
}
}
}
return $this->method;
}
首先获取REQUEST_METHOD
请求方法,然后判断如果是post
,查找是否设置X-HTTP-METHOD-OVERRIDE
,如果设置了,返回X-HTTP-METHOD-OVERRIDE
设置的方法,否则去找body
中的_method
。