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 중국어 웹사이트의 기타 관련 기사를 참조하세요!