引入
有时候我们需要定义发送表单所使用的HTTP请求方式,但HTML表单只支持GET
和POST
两种提交方法,如果要使用其他的请求方式,需要我们自定义,在学习资源控制器的时候我们也见到两种其他的请求方式
常见HTTP请求
OPTIONS
:允许客户端查看服务器的性能。这个方法会请求服务器返回该资源所支持的所有 HTTP 请求方法,该方法会用’*'来代替资源名称,向服务器发送 -OPTIONS
请求,可以测试服务器功能是否正常。JavaScript 的
XMLHttpRequest 对象进行CORS
跨域资源共享时,就是使用OPTIONS
方法发送嗅探请求,以判断是否有对指定资源的访问权限。GET
:请求指定的页面信息,并返回响应实体。一般来说 GET 方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。HEAD
:与GET
方法一样,都是向服务器发出指定资源的请求,但是服务器在响应HEAD
请求时不会回传资源的内容部分(即响应实体),这样我们在不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD
方法常被用于客户端查看服务器的性能。POST
:向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据包含在请求体中。POST
方法是非幂等的方法,因为这个请求可能会创建新的资源或修改现有资源。PUT
:向指定资源位置上传其最新内容,PUT
方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容,常用于修改指定资源。DELETE
:请求服务器删除所请求 URI 所标识的资源。DELETE
请求后指定资源会被删除,DELETE 方法也是幂等的。TRAC
E:请求服务器回显其收到的请求信息,该方法主要用于HTTP
请求的测试或诊断。CONNECT
:该方法是 HTTP/1.1 协议预留的,能够将连接改为管道方式的代理服务器。通常用于 SSL 加密服务器的链接与非加密的 HTTP 代理服务器的通信。PATCH
:出现的较晚,它在 2010 年的 RFC 5789 标准中被定义。PATCH
请求与PUT
请求类似,同样用于资源的更新。二者有以下两点不同:1、PATCH
一般用于资源的部分更新,而PUT
一般用于资源的整体更新;2、当资源不存在时,PATCH
会创建一个新的资源,而PUT
只会对已在资源进行更新。
Laravel支持的请求方式
GET
,HEAD
,POST
,PUT
,PATCH
,DELETE
,OPTIONS
。
表单请求伪造
由于HTML只支持GET和POST两种请求方式,如果我们想使用其他的请求方法,需要通过表单伪造。
Laravel使用表单请求伪造的方法
在表单中添加一个名为_method
的隐藏字段。值可为Laravel支持的请求方式
如:
<!DOCTYPE html>
<html>
<head>
<title>测试表单伪造</title>
</head>
<body>
<form method='post' action="{{url('test')}}">
{{csrf_field()}}
<input type="text" name="text">
<input type="submit" value='提交'>
{{-- 伪造DELETE请求 --}}
<input type="hidden" name="_method" value='DELETE'>
</form>
</body>
</html>
设置路由Delete请求
Route::post('test',function(){
dump('post提交');
});
Route::delete('test',function(){
dump('delete提交');
})
由此可见虽然表单method
属性设置的post
但通过我们伪造提交请求,触发了delete请求路由,
需要注意的是,在伪造表单请求时,必须声明method请求为post,至少我这里的测试是这样