Rumah > rangka kerja php > ThinkPHP > Bagaimana untuk menyelesaikan ralat jenis permintaan thinkphp

Bagaimana untuk menyelesaikan ralat jenis permintaan thinkphp

PHPz
Lepaskan: 2023-04-07 12:55:30
asal
928 orang telah melayarinya

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>
Salin selepas log masuk

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()
    {
        //...
    }
}
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan