1. 起因

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

网站文件结构如下:

web
├─test
│  └─index.php

index.php

<?phpvar_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 规范

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

从 URL 地址的规范来说,末尾带斜杠 / 的是目录, 不带的是文件,是两个不同的地址。

  • 对于服务器来说,如果访问目录,则会根据规则访问改目录下的默认文件(如: index.php index.html)。

  • 如访问/abc/服务器会寻找 abc/index.html 文件,而访问 /abc 服务器则会寻找 abc文件。

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

3.2 重定向

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

    我使用的服务器软件是 Nginx,而 Nginx 默认情况下重定向的状态码是301,不会携带请求体

  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

【踩坑日记 · Web】一个斜杠引发的悲剧相关推荐

  1. 踩坑日记之Springfox+Kotlin lateinit引发NullPointException

    文章目录 相关技术栈 起因 分析 1. 报错位置 2. 接口定义 3. Kotlin编译成Java 4. springfox源码分析 1. 判断是否加了`@RequestBody`等参数 2. 包装` ...

  2. silverlight Image Source URI : 一个反斜杠引发的血案

    silverlight Image Source URI : 一个反斜杠引发的血案 Silverlight2 现在支持的Image格式有jpg和png,部分png编码也不支持,同时有些png在xaml ...

  3. 全志哪吒D1-H Tina Linux Ubuntu 22.04入门踩坑日记

    哪吒D1-H Tina Linux入门踩坑日记 系统环境 源码编译 mklibs-readelf的C++标准问题 m4的SIGSTKSZ问题 libfakeroot的_STAT_VER问题 read_ ...

  4. Win11 + Ubuntu18.04 双系统踩坑日记

    Win11 + Ubuntu18.04 双系统踩坑日记 前言 准备工作 硬件配置 镜像下载 Win11镜像下载 Ubuntu镜像下载 启动盘准备 Win11启动盘 Ubuntu启动盘 Win11安装 ...

  5. ReactNative 在丁香医生项目中引入的踩坑日记

    ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...

  6. springboot踩坑日记—nacos: Error watching Nacos Service change

    springboot踩坑日记-nacos: Error watching Nacos Service change Spring Boot :: (v2.1.5.RELEASE) 错误代码: 07-3 ...

  7. c++字符串操作之std::ostringstream踩坑日记

    c++字符串操作之std::ostringstream踩坑日记 在开发过程中经常会遇到字符串操作,而std::string又没有format操作,这就很难受了. 于是我找到了std::ostrings ...

  8. Antd Pro V4 protable详解(ps:踩坑日记)

    Antd Pro V4 protable详解(ps:踩坑日记) 写在前面: 在这篇文章中,你会了解到: protable 中的cloumns属性详解 protable数据加载和处理(两种方法,直接使用 ...

  9. 关于我使用vant组件的踩坑日记

    啦啦啦~~~又是晴朗的一天~今天用vue+vant组件写h5移动端项目需要使用的到一个Actionsheet 弹窗,就是想实现一个这shai的效果: 当我悠哉悠哉的翻阅文档,哎~找到了我想要的 然后我 ...

最新文章

  1. Yann LeCun主讲!纽约大学《深度学习》2021课程全部放出,附slides与视频
  2. ruby安装插件报错
  3. 使用坚果云同步SVN服务器数据
  4. 服务器被黑给我上了一课
  5. MySQL--4操作数据表中的记录小结
  6. android开发标签栏应该设置多少钱,android – Flutter:刷卡后默认标签栏控制器......
  7. csharp添加引用路径_(2)添加path
  8. Servlet的生命周期和工作原理
  9. 广实1592: 1.6-06:校门外的树
  10. sed截取连接数升高时的慢日志
  11. 当系统出错,win10真难用
  12. php 5分钟前,PHP实现时间轴函数(刚刚、5分钟前)
  13. 穿山甲(巨量引擎)广告接入
  14. 区块链钱包,新一代支付宝?|筱静观察
  15. mysql my.cnf位置_我如何找到MySQL my.cnf位置
  16. 头文件里应该写些什么
  17. 使用shiro+aop实现权限控制
  18. 计算机中z代表啥子意思,ctrl z英文是什么意思
  19. 事务四大特性(ACID)原子性、一致性、隔离性、持久性
  20. IP分片、TCP分段

热门文章

  1. 【智能优化算法】基于花朵授粉算法求解单标目优化问题附matlab代码
  2. availableProcessors is already set to [8], rejecting [8]
  3. 查询销售便携式电脑但不销售PC的厂商
  4. 阿里云体验有奖:如何将 PolarDB-X 与大数据等系统互通
  5. java libpcap,Linux搭建jpcap libpcap环境
  6. 计算机网络-多路复用
  7. 男人女人都应该知道的网络黑话大全
  8. 在不重启Linux服务器的情况下在线识别新添加的磁盘
  9. [评论随笔]大唐二李——初唐名将李靖、李勣评传(zhuan tianya)
  10. 关于with open() as f读取文件时编码报错问题