有时候,我们可能需要手动定义发送表单数据所使用的 HTTP 请求方式,而 HTML 表单仅支持 GET 和 POST 两种方式,如果要使用其他的方式,则需要自己来定义实现。

HTTP 请求方式概述

最常见的 HTTP 请求方式自然是 GET 和 POST,相信你已经很熟悉,除此之外,HTTP 协议还定义了很多其他的请求方式,可以在 HTTP/1.1: Method Definitions 中查看 HTTP/1.1 协议支持的所有请求方式,不同的请求方式用于不同类型的请求:

  • OPTIONS:允许客户端查看服务器的性能。这个方法会请求服务器返回该资源所支持的所有 HTTP 请求方法,该方法会用'*'来代替资源名称,向服务器发送 OPTIONS 请求,可以测试服务器功能是否正常。JavaScript 的 XMLHttpRequest 对象进行 CORS 跨域资源共享时,就是使用 OPTIONS 方法发送嗅探请求,以判断是否有对指定资源的访问权限。
  • GET:请求指定的页面信息,并返回响应实体。一般来说 GET 方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。
  • HEAD:与GET方法一样,都是向服务器发出指定资源的请求,但是服务器在响应 HEAD 请求时不会回传资源的内容部分(即响应实体),这样我们在不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。
  • POST:向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据包含在请求体中。POST 方法是非幂等的方法,因为这个请求可能会创建新的资源或修改现有资源。
  • PUT:向指定资源位置上传其最新内容,PUT 方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容,常用于修改指定资源。
  • DELETE:请求服务器删除所请求 URI 所标识的资源。DELETE 请求后指定资源会被删除,DELETE 方法也是幂等的。
  • TRACE:请求服务器回显其收到的请求信息,该方法主要用于 HTTP 请求的测试或诊断。
  • CONNECT:该方法是 HTTP/1.1 协议预留的,能够将连接改为管道方式的代理服务器。通常用于 SSL 加密服务器的链接与非加密的 HTTP 代理服务器的通信。
  • PATCH:出现的较晚,它在 2010 年的 RFC 5789 标准中被定义。PATCH 请求与 PUT 请求类似,同样用于资源的更新。二者有以下两点不同:1、PATCH 一般用于资源的部分更新,而 PUT 一般用于资源的整体更新;2、当资源不存在时,PATCH 会创建一个新的资源,而 PUT 只会对已在资源进行更新。

我们可以在命令行中通过 curl 进行一些简单的测试:

Laravel 中的 HTTP 请求方式

Laravel 路由支持通过上面的大部分常用请求方式:

/**
* Laravel 路由支持的 HTTP 请求方式
*
* @var array
*/
public static $verbs = ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'];

并为其提供了相应的路由定义方法:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

在浏览器地址栏访问某个 URL 采用的是 GET 请求,对于其他请求方式要怎么实现呢,一种方法是通过 HTML 表单元素的 method 属性,另一种方法是在 JavaScript 脚本中发起 HTTP 请求。对于 HTML 表单属性而言,有一个问题是 HTML 表单仅支持 GET 和 POST 请求,如果要使用其他请求方式怎么办?答案是通过表单方法伪造,下面我们就来介绍如何在 Laravel 中进行表单方法伪造。

表单请求方法伪造

要告知 Laravel 当前提交的表单使用的是 GET/POST 之外的其他请求方式,需要在表单中添加一个名为 _method 的隐藏字段,字段值是「PUT」、「DELETE」或 「PATCH」。Laravel 在处理提交表单请求时,会将字段值作为请求方式匹配对应的路由。比如下面这个表单:

<form action="/task/1" method="POST">
<input type="hidden" name="_method" value="DELETE">
</form>

Laravel 会将其看作是 DELETE 请求,并将其匹配到对应的 Route::delete 路由进行处理,而不是 Route::post 路由。

其他请求方式实现方式也是一样,不再赘述。

laravel 表单方法伪造的更多相关文章

  1. 清空表单方法 清空变量 iview modal

    方法一 通过json序列号和反序列号 清空一次数据 数据需要copy出来一份 orgFormClearAllInput () { this.$refs.n1.formValidate = JSON.p ...

  2. Laravel表单传值

    仔细阅读过Laravel官方文档的就不用看啦~ 整理下之前遇到的关于Laravel表单的一些小问题 表单传值无法传过去,因为laravel做了表单的防护 只需要将{{ csrf_field() }}放 ...

  3. 关于python单方法的类

    1.大部分情况下,你拥有一个单方法类的原因是需要存储某些额外的状态来给方法使用. 此种情况下可以使用闭包代替,参考 javascript的闭包计数器实现,python实现各种方法来实现计数器 关于这个 ...

  4. 51nod 1179 最大的最大公约数 (打表计数法)

    题目: 考虑清楚就简单了,我们把每个数的因子计数. 两个数的公约数就是计数超过2的数,然后找到最大的那个就好了. 计算每个数的素因子,记得sqrt(),不然会超时. 打表计数法时间复杂度O(n*sqr ...

  5. Laravel表单验证提示设置多语言

    默认表单提示是英文的,我们可以安装语言包构建多语言环境. 根据版本选择命令 For Laravel 7.x : run composer require caouecs/laravel-lang:~6 ...

  6. 社群系统 ThinkSNS+ 中如何利用 Laravel 表单验证来验证用户名的?(我朝独有需求,两个字母占一个汉字。。。)

    ThinkSNS+后端框架使用laravel,每周和 laravel master 保持同步,而后台和 html 5 则采用 vue 开发.语言特性方面,采用 php 7 的严格模式. 言归正传,之所 ...

  7. laravel 表单验证 Exists 规则的基本使用方法

    public function rules(){ return [ 'm_pushing_frequency_level_id' => 'integer|required|exists:m_pu ...

  8. 处理laravel表单提交默认将空值转为null的问题

    比如表单提交,如果我们提交了这个字段,但是这个字段为空字符串.在Laravel中会自动转义成Null. 处理这个问题,直到找到中间件\vendor\laravel\framework\src\Illu ...

  9. laravel表单验证

    效果展示:         代码 实现: 后台: use Validator; public function login() { if($input = Input::all()){ //验证提交的 ...

随机推荐

  1. 安装LDAP用户认证

    LDAP伺服器设定 1.安装 openldap-servers yum -y install openldap openldap-devel openldap-servers 2.建立 LDAP 密码 ...

  2. Out of range value for column ""

    今天同事在初始化数据时,在初始手机号遇到如下报错:  我实体类的字段如下: @Column @Comment("购车人手机号") @ColDefine(type = ColType ...

  3. 启动项目时,mapper.xml文件没有导入

    原因分析:绑定的statement没有发现,原因是只有mapper接口的java文件,没有xml文件 解决方法:需要在pom文件中进行配置 <!-- 如果不添加此节点mybatis的mapper ...

  4. Selenium: Trying to log in with cookies and get the errorMessage - “Can only set cookies for current domain” or "Unable to set Cookie"

    from selenium import webdriver driver = webdriver.PhantomJS(executable_path='G:/OpenSources/phantomj ...

  5. Python 面向对象【2】

    组合 [适合没干系的横向类,比如池塘,乌龟,鱼]  把类的实例化放到新类里面     属性名和方法名相同,属性会覆盖掉方法   绑定 方法需要实例才能被调用!! 这种限制即绑定 用self接受绑定   ...

  6. 【OpenGL】【计算机图形学原理】撸课本系列一

    P13 简单二维图元的生成方法 #include <GL/glut.h> //用于表示openGL允许采用 glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓存 g ...

  7. Mac 远程桌面 ubuntu16.04 unity

    待解决问题: 使用 vnc 远程桌面 ubunt16.04的自带桌面 unity 尝试方法 : 查看了各种方法, 基本都是曲线救国, 安装 gnome 或者 xfce4等其他桌面系统, 而我只想用好看 ...

  8. nginx的linux服务器内核参数调整【转】

    概述 由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,让Nginx可以拥有更高的性能: 在优化内核时,可以做的事情很 ...

  9. Linux下编写和加载 .ko 文件(驱动模块文件)

    一..ko 文件介绍 .ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载. 二.优点 (1)这样可以缩小内核体积 ...

  10. SharePoint 2013 SqlException (0x80131904):找不到Windows NT 用户或组xxxx\administrator

    过程描述: 在SharePoint 2013里配置创建搜索服务应用程序时报错: 配置 Search Service 应用程序期间遇到错误. System.Data.SqlClient.SqlExcep ...