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

Bagaimana untuk menyelesaikan ralat jenis permintaan thinkphp

PHPz
PHPzasal
2023-04-07 09:28:25807semak imbas

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!

Kenyataan:
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