>  기사  >  PHP 프레임워크  >  thinkPHP5에서 양식 제출 시 오류 보고서의 원인과 해결 방법을 분석합니다.

thinkPHP5에서 양식 제출 시 오류 보고서의 원인과 해결 방법을 분석합니다.

PHPz
PHPz원래의
2023-04-11 16:10:531059검색

ThinkPHP5는 PHP를 기반으로 한 오픈 소스 웹 애플리케이션 프레임워크로, 디자인 컨셉은 단순하고 직관적이며 유연합니다. 그러나 ThinkPHP5 프레임워크를 사용하여 개발할 때 몇 가지 문제와 오류가 발생할 수 있습니다. 그 중 양식 제출 오류는 일반적인 문제 중 하나입니다. 이 글에서는 ThinkPHP5 제출 양식 오류의 원인과 해결 방법을 소개합니다.

1. 오류 원인

ThinkPHP5에서는 post 방식을 사용하여 양식 데이터를 제출할 수도 있고, 넣기, 삭제 등 다른 방법을 사용할 수도 있습니다. 그러나 양식 데이터를 제출할 때 아래 그림과 같이 "이 HTTP 메소드는 제출이 허용되지 않습니다."라는 오류 메시지가 나타나는 경우가 있습니다.

이 오류 메시지가 나타나는 이유는 브라우저가 "OPTIONS"라는 사전 확인 메커니즘을 사용하기 때문입니다. POST 및 PUT과 같은 단순하지 않은 요청 방법을 사용하여 데이터를 제출할 때 브라우저는 먼저 서버가 이 요청 방법을 지원하는지 확인하기 위해 OPTIONS 요청을 보냅니다. 서버에서 지원하지 않는 경우 위와 같은 오류 메시지가 나타납니다.

2. 솔루션

  1. 교차 도메인 지원 활성화

먼저 교차 도메인이 무엇인지 알아보겠습니다. 크로스 도메인이란 한 도메인 이름의 JavaScript 코드를 다른 도메인 이름의 웹페이지에서 실행하는 것을 의미합니다. 엄밀히 말하면 프로토콜, 도메인 이름, 포트가 다르면 서로 다른 도메인으로 간주되어 도메인 간 문제가 발생합니다. 양식 데이터 제출 시 도메인 간 문제로 인해 위와 같은 오류가 발생할 수 있습니다.

해결책은 서버 측에서 도메인 간 지원을 활성화하는 것입니다. ThinkPHP5에서는 구성 파일 config.php에 다음 코드를 추가할 수 있습니다.

// 开启跨域支持
'cross_domain'   => [
    'allow_origin' => ['*'],
    'allow_methods' => ['POST','GET','OPTIONS','PUT','DELETE'],
    'allow_headers' => ['*'],
    'expose_headers'=> ['token'],
    'max_age'       => 3600,
    'allow_credentials' => true,
],

그 중 allowed_origin 매개변수는 허용되는 도메인 이름을 지정하며, 는 모든 도메인 이름이 허용된다는 의미입니다. allowed_methods 매개변수는 허용되는 요청 방법을 지정합니다. PUT 및 DELETE와 같은 단순하지 않은 요청 방법도 추가해야 합니다. allowed_headers 매개변수는 허용되는 요청 헤더 정보를 지정합니다. 는 모든 요청 헤더를 수락한다는 의미입니다. 노출_헤더 매개변수는 사용자가 획득할 수 있는 추가 정보를 지정하고, 토큰은 토큰 정보 획득이 허용됨을 나타냅니다. max_age 매개변수는 캐싱에 허용되는 시간(초)을 지정합니다. Allow_credentials 매개변수는 쿠키와 같은 ID 자격 증명을 사용할 수 있음을 나타냅니다.

  1. 요청 방법 변경

도메인 간 지원을 활성화하지 않으려면 요청 방법을 변경하여 문제를 해결할 수도 있습니다. 양식 데이터를 제출할 때 요청 방법을 POST로 변경하여 브라우저 사전 확인 문제를 피할 수 있습니다.

HTML에서는 다음과 같이 양식의 메소드 속성을 수정할 수 있습니다.

<form method="POST">

JavaScript에서는 다음과 같이 ajax 요청의 유형 속성을 수정할 수 있습니다.

$.ajax({
    type: 'POST',
    url: 'http://example.com/path/to/api',
    data: postData,
    success: function(data) {
        console.log(data);
    }
});
  1. nginx 구성 수정

이러한 경우 Nginx를 웹 서버로 사용 위 오류의 경우 nginx.conf 파일에 다음 구성을 추가할 수 있습니다:

location / {
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,token';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;
        return 204;
    }
    ...
}

그 중 Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control- Allow-Headers, Access-Control-Max-Age 동일한 매개변수의 의미는 위에서 설명한 것과 같습니다.

요약

양식 데이터를 제출할 때 발생하는 오류는 일반적인 문제로, 초보자가 해결하기 어려울 수 있습니다. 이 글에서는 독자들이 ThinkPHP5 프레임워크를 더 잘 사용할 수 있도록 돕기 위해 양식 제출 시 오류가 발생하는 이유와 해결 방법을 소개합니다.

위 내용은 thinkPHP5에서 양식 제출 시 오류 보고서의 원인과 해결 방법을 분석합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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