ホームページ  >  記事  >  PHPフレームワーク  >  thinkphpリクエストタイプエラーを解決する方法

thinkphpリクエストタイプエラーを解決する方法

PHPz
PHPzオリジナル
2023-04-07 09:28:25807ブラウズ

ThinkPHP フレームワークを使用して開発する場合、リクエスト タイプ エラーの問題がよく発生します。たとえば、POST メソッドを使用してフォームを送信すると、「リクエスト タイプ エラー」というプロンプトが表示されます。では、なぜこの問題が発生するのでしょうか?どうやって解決すればいいでしょうか?

まず、リクエスト タイプの概念を理解しましょう。 HTTP プロトコルには、GET と POST の 2 つのリクエスト メソッドがあり、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 は無効になりません。コントローラーの防御が失敗すると、「Request Type Wrong」プロンプトが表示されます。解決策は、コントローラーで 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()
    {
        //...
    }
}

上記の 2 つの状況に加えて、AJAX リクエストを行うときにリクエスト構築エラーが発生する可能性もあります。具体的には、$.post() メソッドまたは $.ajax() メソッドを使用してリクエストを行う場合、dataType、contentType、その他のパラメーターが正しく記述されず、その結果、リクエスト タイプが正しくなくなります。

要約すると、ThinkPHP の使用中にリクエスト タイプのエラー メッセージが発生した場合は、まず上記の 3 つの状況が発生しているかどうかを確認し、それに応じて解決する必要があります。

以上がthinkphpリクエストタイプエラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。