0
点赞
收藏
分享

微信扫一扫

【踩坑日记】一个 / 引发的悲剧

七公子706 2022-05-02 阅读 216

1. 起因

最近使用php做一个小项目,需要在后台获取 post 数据并进行处理。

网站文件结构如下:

web
├─test
│  └─index.php

index.php

<?php
	var_dump($_POST);
	var_dump($_GET);
?>

前端请求时发现获取不到 post 参数:

  • URL: http://localhost/test

  • get参数: get = get_data

  • post参数: post = post_data

  • 响应内容:

请添加图片描述
post 参数竟然为空!!!

2. 经过

在一番百度之后,尝试了各种方法,包括

  • 更改 php 配置文件,允许 post 上传数据
  • 更改 php 配置文件,允许上传文件
  • 更改 php 配置文件,将最大上传大小修改为 100 MB

后端依然获取不到 post 参数。

请添加图片描述
在花费了几天时间查询大量资料后,依然没有解决问题。就在快要抓狂的时候,后端突然可以获取到 post 参数了:
请添加图片描述

不对呀,我什么也没有做啊,为什么突然就好了。这时候,我突然注意到了地址栏的 URL:

请添加图片描述

果然,在去掉末尾的 / 后,又获取不到 post 参数了,但这是为什么呢

3. 原因

3.1 URL 规范

在一番查找后,我发现了下面的资料:

http://localhost/testhttp://localhost/test/ 是两个不同文件。

3.2 重定向

请添加图片描述

  1. 前端请求 http://localhost/test
  2. 服务器发现没有这个文件,重定向到 http://localhost/test/重点就这这里)。
  3. 前端重新请求 http://localhost/test/

3.3 解决方法

3.3.1 加上 /

请求时在 URL 后面加上 /,这是最简单也是最有效的解决方法。

3.3.2 更改服务器配置

将服务器的重定向代码改为 307,307 重定向可以携带原请求体等数据。

4. 参考资料

  • 用301重定向给网站更换新域名POST丢失 - SegmentFault 思否:https://segmentfault.com/q/1010000007026578
  • 网址后面加”/“与不加斜杠有什么区别? – 教程与解决方案 | Fuyeor Docs:https://docs.fuyeor.com/answer/5178.html
  • 切尔诺贝尔的博客-CSDN博客:https://blog.csdn.net/weixin_40580582/article/details/102967419
  • Nginx http重定向到https时,post请求变为get的问题 - 谭普利特 - 博客园:https://www.cnblogs.com/Template/p/9442913.html
举报

相关推荐

0 条评论