Skip to content

方法

每个 HTTP 请求通常都有一个方法,常见的方法包括:

  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • PATCH
  • OPTIONS

你可以使用 Request 对象的 getMethod() 方法来检查 HTTP 请求的方法:

$method = $request->getMethod();

有时候需要伪造或覆盖 HTTP 请求的方法。例如,当你需要在仅支持 GETPOST 请求的传统 Web 浏览器中模拟 PUT 请求时,这就非常有用。

Info

要启用请求方法覆盖功能,必须将 Method Overriding Middleware 注入到你的应用程序中。

有两种方式可以覆盖 HTTP 请求的方法。一种方式是在 POST 请求的正文中包含一个名为 METHOD 的参数。HTTP 请求必须使用 application/x-www-form-urlencoded 内容类型。

POST /path HTTP/1.1
Host: example.com
Content-type: application/x-www-form-urlencoded
Content-length: 22

data=value&_METHOD=PUT

另一种方式是通过自定义的 X-Http-Method-Override HTTP 请求头来覆盖 HTTP 请求的方法。这种方式适用于任何 HTTP 请求的内容类型。

POST /path HTTP/1.1
Host: example.com
Content-type: application/json
Content-length: 16
X-Http-Method-Override: PUT

{"data":"value"}

请求 URI

每个 HTTP 请求都有一个标识所请求应用资源的 URI。HTTP 请求 URI 包含以下几个部分:

  • 协议(例如 httphttps
  • 主机(例如 example.com
  • 端口(例如 80443
  • 路径(例如 /users/1
  • 查询字符串(例如 sort=created&dir=asc

你可以使用 PSR-7 Request 对象的 getUri() 方法获取其 URI 对象

$uri = $request->getUri();

PSR-7 Request 对象的 URI 本身是一个对象,提供了以下方法来检查 HTTP 请求的 URL 部分:

  • getScheme()
  • getAuthority()
  • getUserInfo()
  • getHost()
  • getPort()
  • getPath()
  • getQuery() (返回完整的查询字符串,例如 a=1&b=2
  • getFragment()

你可以使用 Request 对象的 getQueryParams() 方法将查询参数作为关联数组获取。