Rumah >rangka kerja php >ThinkPHP >Bagaimana untuk menyelesaikan ralat jenis permintaan thinkphp
Apabila membangun menggunakan rangka kerja ThinkPHP, kami sering menghadapi masalah jenis permintaan yang salah. Contohnya, apabila kami menyerahkan borang menggunakan kaedah POST, gesaan "ralat jenis permintaan" muncul. Jadi, mengapa masalah ini berlaku? Bagaimana untuk menyelesaikannya?
Pertama, mari kita fahami konsep jenis permintaan. Dalam protokol HTTP, terdapat dua kaedah permintaan: GET dan POST Permintaan GET menggabungkan data di belakang URL dan menghantarnya ke pelayan, manakala permintaan POST meletakkan data permintaan dalam badan mesej permintaan HTTP dan menghantarnya. kepada pelayan. Pada masa yang sama, terdapat kaedah seperti PUT dan DELETE. Dalam rangka kerja ThinkPHP, kami boleh mendapatkan kaedah permintaan melalui $_SERVER['REQUEST_METHOD'].
Jika mesej "ralat jenis permintaan" muncul apabila kami menggunakan POST untuk meminta, sebab yang mungkin ialah pelayan tidak boleh mendapatkan parameter POST apabila kami menggunakan POST untuk meminta. Berikut ialah dua situasi biasa:
1 csrf_token tidak ditambahkan pada borang
Dalam ThinkPHP, untuk mengelakkan serangan pemalsuan borang, kita mesti menambah csrf_token pada borang untuk mengesahkan sumber daripada bentuk. Jika ia tidak ditambahkan pada borang, "Ralat Jenis Permintaan" akan muncul. Penyelesaiannya adalah dengan menambah teg csrf_token pada borang, seperti berikut:
<form method="post"> <!-- 在这里加入csrf_token标志 --> <?php echo token();?> <input type="text" name="username" /> <input type="password" name="password" /> <button type="submit">提交</button> </form>
2 Pertahanan CSRF tidak dimatikan
Jika kita menghidupkan pertahanan CSR global, tidak ada. Apabila pertahanan CSRF dimatikan, gesaan "Jenis permintaan salah" akan muncul. Penyelesaiannya adalah untuk mematikan pertahanan csrf dalam pengawal, kodnya adalah seperti berikut:
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() { //... } }
Selain dua situasi di atas, terdapat satu lagi kemungkinan bahawa permintaan itu dibina secara tidak betul apabila kami membuat AJAX permintaan. Khususnya, apabila kami menggunakan kaedah $.post() atau $.ajax() untuk meminta, kami tidak menulis dataType, contentType dan parameter lain dengan betul, mengakibatkan jenis permintaan yang salah.
Ringkasnya, jika kami menghadapi gesaan ralat jenis permintaan semasa menggunakan ThinkPHP, kami harus terlebih dahulu menyemak sama ada tiga situasi di atas berlaku dan menyelesaikannya dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat jenis permintaan thinkphp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!