加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.cn/)- 边缘计算、物联网、运营、专有云、AI硬件!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

thinkphp请求类型错误如何化解

发布时间:2023-08-12 10:03:16 所属栏目:PHP教程 来源:互联网
导读:   给大家分享一下thinkphp请求类型错误如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所
  给大家分享一下thinkphp请求类型错误如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
 
  首先,我们来了解一下请求类型的概念。在HTTP协议中,有GET和POST两种请求方法,GET请求是把数据拼接在URL后面发送到服务器上,而POST请求是把请求数据放到HTTP请求的消息体中发送到服务器上。同时,还有PUT、DELETE等方法。在ThinkPHP框架中,我们可以通过$_SERVER['REQUEST_METHOD']来获取请求的方式。
 
  如果我们在使用POST方式请求时出现了“请求类型错误”的提示,那么有可能的原因就是我们在使用POST方式请求的时候,服务器无法获取到POST参数。这里介绍两种常见的情况:
 
  1.表单中没有加入csrf_token
 
  在ThinkPHP中,为了防止表单伪造攻击,我们必须在表单中加入csrf_token,以验证表单来源的合法性。而如果没有加入表单中,则会出现“请求类型错误”。解决方法是在表单中加入csrf_token标签,如下:
 
  <form method="post">
 
      <!-- 在这里加入csrf_token标志 -->
 
      <?php echo token();?>
 
      <input type="text" name="username" />
 
      <input type="password" name="password" />
 
      <button type="submit">提交</button>
 
  </form>
 
  2.未关闭CSRF防御
 
  如果我们在开启了全局CSR防御的情况下,没有在控制器中关闭csrf防御,则会出现“请求类型错误”的提示。解决方法是在控制器中关闭csrf防御,代码如下:
 
  class IndexController extends Controller
 
  {
 
      //关闭csrf防御
 
      protected $middleware = [
 
          \think\middleware\AllowCrossDomain::class,
 
          \think\middleware\CheckRequestCache::class,
 
          \think\middleware\SendFile::class,
 
          \think\middleware\ValidateRequest::class => [
 
              //关闭csrf防御
 
              'except' => ['login']
 
          ],
 
      ];
 
      
 
      //login方法
 
      public functtion login()
 
      {
 
          //...
 
      }
 
  }
 
  除了上述两种情况外,还有一种可能是我们在AJAX请求时,请求构造错误。具体来说,就是我们在使用$.post()或$.ajax()方法请求时,没有正确的写出dataType、contentType等参数,导致请求类型错误。
 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章