Fetch发送POST请求但后端PHP识别为GET请求的问题求助
Fetch发送POST请求但后端PHP识别为GET请求的问题求助
我现在卡了好几个小时,遇到个离谱的问题:明明用JS的Fetch发送了POST请求,后端PHP却一直显示这是GET请求😭 我对PHP和JS都不太熟,大概率是哪里犯了低级错误,求大佬帮忙看看!
前端Fetch请求代码
这是我写的前端发送请求的JS代码,明确指定了method为POST,还用了application/x-www-form-urlencoded的Content-Type,参数用URLSearchParams包装了:
const fullusername = "<?php echo $to; ?>"; const personontheline = sessionStorage.getItem('name'); fetch('inc/AI2.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ fullname: fullusername, //变量 personwhoclicked: personontheline //变量 }) //后续还有Fetch的错误处理,不过目前主要问题在请求方法上
后端PHP的请求判断逻辑
后端我用$_SERVER['REQUEST_METHOD']来判断请求类型,但它一直返回GET,直接走到了错误分支,输出"Invalid request GET":
if ($_SERVER['REQUEST_METHOD'] === 'POST') { //要执行的逻辑 } } else { // 处理非法请求 echo "Invalid request ".$_SERVER['REQUEST_METHOD']; die(); }
我尝试过的修改
我试着把Fetch的method改成GET,这时候后端能识别是GET请求了,但又读不到GET参数,代码会输出"error":
if (isset($_GET['fullname']) AND isset($_GET['personwhoclicked'])) { //这里的逻辑能执行 } else{ echo "error"; }
Burp Suite抓包结果
这是POST请求时Burp Suite的抓包截图:
这是GET请求时的抓包截图:
实在搞不懂哪里出问题了,明明指定了POST方法,为啥后端认成GET?改成GET又读不到参数,已经折腾好几个小时了,求指点!
备注:内容来源于stack exchange,提问作者Martello




