Heim  >  Artikel  >  PHP-Framework  >  So beheben Sie den Thinkphp-Anfragetypfehler

So beheben Sie den Thinkphp-Anfragetypfehler

PHPz
PHPzOriginal
2023-04-07 09:28:25807Durchsuche

Bei der Entwicklung mit dem ThinkPHP-Framework stoßen wir häufig auf das Problem eines falschen Anforderungstyps. Wenn wir beispielsweise ein Formular mit der POST-Methode senden, erscheint die Meldung „Fehler beim Anforderungstyp“. Warum tritt dieses Problem auf? Wie kann man es lösen?

Lassen Sie uns zunächst das Konzept des Anfragetyps verstehen. Im HTTP-Protokoll gibt es zwei Anfragemethoden: GET und POST. Die GET-Anfrage verkettet die Daten hinter der URL und sendet sie an den Server, während die POST-Anfrage die Anfragedaten in den Nachrichtentext der HTTP-Anfrage einfügt und sendet an den Server. Gleichzeitig gibt es Methoden wie PUT und DELETE. Im ThinkPHP-Framework können wir die Anforderungsmethode über $_SERVER['REQUEST_METHOD'] erhalten.

Wenn wir beim Anfordern per POST die Meldung „Fehler beim Anforderungstyp“ erhalten, liegt der mögliche Grund darin, dass der Server die POST-Parameter nicht abrufen kann, wenn wir beim Anfordern POST verwenden. Hier sind zwei häufige Situationen:

1. Das csrf_token wird nicht zum Formular hinzugefügt

Um Formularfälschungsangriffe zu verhindern, müssen wir csrf_token zum Formular hinzufügen, um die Legitimität der Formularquelle zu überprüfen. Wenn es nicht zum Formular hinzugefügt wird, wird ein „Request Type Error“ angezeigt. Die Lösung besteht darin, das csrf_token-Tag wie folgt zum Formular hinzuzufügen:

<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-Verteidigung ist nicht deaktiviert

Wenn wir die globale CSR-Verteidigung aktivieren und die CSRF-Verteidigung im Controller nicht deaktivieren, wird „Request Geben Sie eine Fehlermeldung ein. Die Lösung besteht darin, die CSRF-Verteidigung im Controller zu deaktivieren. Der Code lautet wie folgt:

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

Zusätzlich zu den beiden oben genannten Situationen besteht eine weitere Möglichkeit, dass bei einer AJAX-Anfrage ein Anforderungskonstruktionsfehler vorliegt. Insbesondere wenn wir die Methode $.post() oder $.ajax() zum Anfordern verwenden, schreiben wir den Datentyp, den Inhaltstyp und andere Parameter nicht korrekt, was zu einem falschen Anforderungstyp führt.

Zusammenfassend lässt sich sagen, dass wir, wenn wir bei der Verwendung von ThinkPHP auf eine Fehlermeldung vom Typ „Anfrage“ stoßen, zunächst prüfen sollten, ob die oben genannten drei Situationen auftreten, und sie entsprechend lösen.

Das obige ist der detaillierte Inhalt vonSo beheben Sie den Thinkphp-Anfragetypfehler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn