ThinkPHP5는 PHP를 기반으로 한 오픈 소스 웹 애플리케이션 프레임워크로, 디자인 컨셉은 단순하고 직관적이며 유연합니다. 그러나 ThinkPHP5 프레임워크를 사용하여 개발할 때 몇 가지 문제와 오류가 발생할 수 있습니다. 그 중 양식 제출 오류는 일반적인 문제 중 하나입니다. 이 글에서는 ThinkPHP5 제출 양식 오류의 원인과 해결 방법을 소개합니다.
1. 오류 원인
ThinkPHP5에서는 post 방식을 사용하여 양식 데이터를 제출할 수도 있고, 넣기, 삭제 등 다른 방법을 사용할 수도 있습니다. 그러나 양식 데이터를 제출할 때 아래 그림과 같이 "이 HTTP 메소드는 제출이 허용되지 않습니다."라는 오류 메시지가 나타나는 경우가 있습니다.
이 오류 메시지가 나타나는 이유는 브라우저가 "OPTIONS"라는 사전 확인 메커니즘을 사용하기 때문입니다. POST 및 PUT과 같은 단순하지 않은 요청 방법을 사용하여 데이터를 제출할 때 브라우저는 먼저 서버가 이 요청 방법을 지원하는지 확인하기 위해 OPTIONS 요청을 보냅니다. 서버에서 지원하지 않는 경우 위와 같은 오류 메시지가 나타납니다.
2. 솔루션
먼저 교차 도메인이 무엇인지 알아보겠습니다. 크로스 도메인이란 한 도메인 이름의 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 자격 증명을 사용할 수 있음을 나타냅니다.
도메인 간 지원을 활성화하지 않으려면 요청 방법을 변경하여 문제를 해결할 수도 있습니다. 양식 데이터를 제출할 때 요청 방법을 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); } });
이러한 경우 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!