>  기사  >  PHP 프레임워크  >  thinkphp 요청 유형 오류를 해결하는 방법

thinkphp 요청 유형 오류를 해결하는 방법

PHPz
PHPz원래의
2023-04-07 09:28:25807검색

ThinkPHP 프레임워크를 사용하여 개발할 때 잘못된 요청 유형 문제에 자주 직면합니다. 예를 들어, POST 메소드를 사용하여 양식을 제출하면 "요청 유형 오류" 프롬프트가 나타납니다. 그렇다면 왜 이런 문제가 발생하는 걸까요? 어떻게 해결하나요?

먼저 요청 유형의 개념을 이해해 봅시다. HTTP 프로토콜에는 GET과 POST의 두 가지 요청 방법이 있습니다. 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 방어를 끄지 않으면 "요청 유형" 오류" 메시지가 나타납니다. 해결책은 컨트롤러에서 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()
    {
        //...
    }
}

위의 두 가지 상황 외에도 AJAX 요청 시 요청 구성 오류가 발생할 가능성이 또 있습니다. 특히, $.post() 또는 $.ajax() 메소드를 사용하여 요청할 때 dataType, contentType 및 기타 매개변수를 올바르게 작성하지 않아 잘못된 요청 유형이 발생합니다.

요약하자면 ThinkPHP를 사용할 때 요청 유형 오류 메시지가 나타나면 먼저 위의 세 가지 상황이 발생하는지 확인하고 그에 따라 해결해야 합니다.

위 내용은 thinkphp 요청 유형 오류를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.