Maison  >  Article  >  cadre php  >  Comment résoudre l'erreur de type de requête thinkphp

Comment résoudre l'erreur de type de requête thinkphp

PHPz
PHPzoriginal
2023-04-07 09:28:25806parcourir

Lors du développement à l'aide du framework ThinkPHP, nous rencontrons souvent le problème d'un type de requête incorrect. Par exemple, lorsque nous soumettons un formulaire à l'aide de la méthode POST, une invite « erreur de type de demande » apparaît. Alors, pourquoi ce problème se produit-il ? Comment le résoudre ?

Tout d’abord, comprenons le concept de type de demande. Dans le protocole HTTP, il existe deux méthodes de requête : GET et POST La requête GET concatène les données derrière l'URL et les envoie au serveur, tandis que la requête POST place les données de la requête dans le corps du message de la requête HTTP et l'envoie. au serveur. Dans le même temps, il existe également des méthodes telles que PUT et DELETE. Dans le framework ThinkPHP, nous pouvons obtenir la méthode de requête via $_SERVER['REQUEST_METHOD'].

Si l'invite "Request Type Wrong" apparaît lorsque nous utilisons la méthode POST pour demander, la raison possible est que le serveur ne peut pas obtenir les paramètres POST lorsque nous utilisons la méthode POST pour demander. Voici deux situations courantes :

1. Le csrf_token n'est pas ajouté au formulaire

Dans ThinkPHP, afin d'éviter les attaques de falsification de formulaire, nous devons ajouter csrf_token au formulaire pour vérifier la légitimité de la source du formulaire. S'il n'est pas ajouté au formulaire, une « Erreur de type de demande » apparaîtra. La solution est d'ajouter la balise csrf_token au formulaire, comme suit :

<form method="post">
    <!-- 在这里加入csrf_token标志 -->
    <?php echo token();?>
    <input type="text" name="username" />
    <input type="password" name="password" />
    <button type="submit">提交</button>
</form>

2. La défense CSRF n'est pas désactivée

Si nous activons la défense CSR globale et ne désactivons pas la défense csrf dans le contrôleur, "Request Tapez "apparaîtra le message d'erreur". La solution est de désactiver la défense csrf dans le contrôleur. Le code est le suivant :

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()
    {
        //...
    }
}

En plus des deux situations ci-dessus, il existe une autre possibilité que nous ayons une erreur de construction de requête lors d'une requête AJAX. Plus précisément, lorsque nous utilisons la méthode $.post() ou $.ajax() pour effectuer une requête, nous n'écrivons pas correctement le dataType, contentType et d'autres paramètres, ce qui entraîne un type de requête incorrect.

En résumé, si nous rencontrons une invite d'erreur de type de requête lors de l'utilisation de ThinkPHP, nous devons d'abord vérifier si les trois situations ci-dessus se produisent et les résoudre en conséquence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn