解决nginx代理转发post请求变get请求方法

2023-11-14

请求类型变化原因

当使用 Nginx 将 HTTP 跳转到 HTTPS 时,HTTP 请求可能包含不同类型的方法(method),如 GET、POST、PUT、DELETE 等。根据 HTTP 协议的规定,重定向(Redirection)的方式可能会影响请求方法的保持或者修改。

以下是常见的 Nginx HTTP 跳转 HTTPS 的方式及其对请求方法的影响:

301 Moved Permanently:该方式将所有的 HTTP 请求重定向到 HTTPS 上,并且该重定向是永久性的。客户端在收到 301 响应后,会自动将 HTTP 请求转为 GET 请求,同时将请求地址修改为重定向后的地址。这意味着,如果原始请求是 POST 请求,那么 301 重定向会将其转变为 GET 请求。此外,浏览器会缓存 301 响应,下一次请求时会直接跳转到 HTTPS 上。

302 Found / 303 See Other:这两种方式将所有的 HTTP 请求临时性地重定向到 HTTPS 上。302 Found 的响应会将请求方法保持不变,同时将请求地址修改为重定向后的地址。而 303 See Other 则会将所有请求方法转变为 GET 方法,并将请求地址修改为重定向后的地址。这两种方式都不会缓存响应,下一次请求时会再次发起请求。

307 Temporary Redirect:该方式将所有的 HTTP 请求临时性地重定向到 HTTPS 上,并且会保留原始的请求方法。这意味着,如果原始请求是 POST 请求,那么重定向后的请求仍然是 POST 请求。同时,请求地址也会被修改为重定向后的地址。与 302 Found 类似,307 Temporary Redirect 不会缓存响应,下一次请求时会再次发起请求。

308 Permanent Redirect:该方式将所有的 HTTP 请求重定向到 HTTPS 上,并且该重定向是永久性的。客户端在收到 308 响应后,会自动将 HTTP 请求转为与原始请求方法相同的请求方法,同时将请求地址修改为重定向后的地址。与 301 Moved Permanently 不同的是,308 Permanent Redirect 不会允许浏览器将 POST 请求重定向到新地址。308 响应也会被缓存,下一次请求时会直接跳转到 HTTPS 上。

需要注意的是,不同的重定向方式可能会对请求方法、请求地址、缓存等方面产生不同的影响。因此,在选择重定向方式时,需要根据具体的需求进行选择。通常情况下,推荐使用 301 Moved Permanently 或 308 Permanent Redirect 将 HTTP 重定向到 HTTPS 上,并且需要注意 POST 请求的处理方式。

解决方法

方法1

可以使用return 307进行转发,return 307,对请求类型不做转换,意思就是
get----->get
post----->post
所以通过原样转发可以解决我们post请求会被转化为get请求问题

具体配置方法

server {
    listen 80;
    server_name test.123.com;
	location /test/api {
	      return 307 http://192.168.1.133:8088/api;
	      proxy_set_header Host $host;
      }
 }

这样的话 当我们post test.123.com/test/api这个地址时请求就不会被转化为get请求了

方法2
使用 return 308方式跳转

具体配置方法

server {
    listen 80;
    server_name example.com;
    return 308 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;
    # HTTPS 相关配置
    ...
}

在k8s ingress中配置http强跳https

在ingress注解中加入以下注解
nginx.ingress.kubernetes.io/force-ssl-redirect true
在这里插入图片描述

扩展

当我们要根据请求类型来过滤按照请求类型转发到指定的地址时可以用以下方式来实现

upstream test123 {
server 192.168.1.133:8888 max_fails=3 fail_timeout=30s;
server {
    listen 80;
    server_name test.123.com;
	location /api/bbb {
	      if ($request_method = POST) {
	         return 307 http://192.168.1.133:8088/aaa/bbb;
	      }  
	     proxy_pass http://test123;
	     proxy_set_header Host $host;
	     }
	 }
}

当我们使用get请求http://test.123.com/api/bbb这个地址时请求不会被转发
当我们使用post请求http://test.123.com/api/bbb这个地址时请求会被转发到http://192.168.1.133:8088/aaa/bbb这个地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决nginx代理转发post请求变get请求方法 的相关文章

随机推荐

  • linux上清空一个文件,技术

    在 Linux 终端下处理文件时 有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件 那怎样才能达到这个目的呢 在这篇文章中 我们将介绍几种借助一些实用的命令来清空文件内容的方法 注意 在我们进一步深入了
  • 如何用Jenkins复制已有项目的配置

    文章目录 环境版本 1 创建一个新JOB 2 输入新JOB的名字 3 填入要COPY的JOB名字 4 点击OK 5 点击APPLY 参考链接 环境版本 Jenkins 2 107 1 如何在和已有的项目配置相同的任务 1 创建一个新JOB
  • 数字媒体导论(习题答及答案01)

    第一章 1 单选题 数字媒体按照 可以分为离散媒体和连续媒体 A 时变特征 B 获取方式 C 人类感觉特征 D 媒体组成属性 我的答案 A正确答案 A 2 单选题 计算机记录和传播的信息媒体的一个共同的重要特征就是信息的最小单元是 A 字节
  • RecyclerView使用介绍

    http www jcodecraeer com a anzhuokaifa androidkaifa 2014 1118 2004 html
  • 【react】 路由的基本使用 ===

    目录 React 路由介绍 react模拟hash路由的实现 React路由使用的基本 路由三大对象之 Router 路由三大对象之 Link Link NavLink 路由三大对象之 Route route的作用和格式 匹配规则 exac
  • unity 导出函数给 Lua 调用

    Assets Core ToLua Editor Custom CustomSettings cs using UnityEngine using System using System Collections Generic using
  • 【敬伟ps教程】亮度与色阶看懂直方图

    文章目录 亮度 对比度 色阶 调整输入色阶 调整输出色阶 调节原色通道 调整图层 亮度 对比度 控制明暗的视觉因素 三要素之一 明度 在拾色器中修改 HSB 中的 B 改为较低的值即可调整明度 明度较低时 RGB色值偏低 CMYK色值较高
  • 旋转矩阵推导

    个人学习 水平不高 请指正 目录 前言 一 前置知识 二 二维平面旋转 编辑 三 三维推广 1 右手坐标系 2 绕x轴旋转 3 z轴与y轴 四 完整草稿 五总结 前言 最近在学平衡小车 学习卡尔曼滤波 加速度计解算姿态角时用到了旋转矩阵 所
  • rabbitmq重试机制

    1 应答模式 NONE 可以称之为自动回调 即使无响应或者发生异常均会通知队列消费成功 会丢失数据 AUTO 自动检测异常或者超时事件 如果发生则返回noack 消息自动回到队尾 但是这种方式可能出现消息体本身有问题 返回队尾其他队列也不能
  • execjs调用第三方js库

    在用python执行js代码时 突然遇到一个问题 execjs怎么才能正常调用js的第三方库使用js内置方法 当时我也是查了好多资料才解决的 截至我写这篇文章 网上的解决方法几乎搜不到 全都是execjs的使用方法 所以记录一下给大家分享出
  • Python爬虫 - 爬取京东商城某页面

    目录 前言 页面分析 Selenium尝试 分析接口 价格是如何出现的 Postman分析请求 寻找SKUID 获取SKUID Postman测试 Demo代码 前言 在CSDN问答中遇到这样一个需求 使用Selenium爬取京东商城某个页
  • SOCKET编程登峰造极之完成端口

    一 什么是完成端口 完成端口 是一种WINDOWS内核对象 完成端口用于异步方式的重叠I 0情况下 当然重叠I O不一定非使用完成端口不可 还有设备内核对象 事件对象 告警I 0等 但是完成端口内部提供了线程池的管理 可以避免反复创建线程的
  • java方法的重载

    package object oriented05 判断是否是重载 跟方法的权限修饰符 返回值类型 形参变量 方法体都没有关系 方法的重载 在同一个类中 允许存在一个以上的同名方法 只要他们的参数个数不同或者参数类型不同即可 两同一不同 参
  • 安装HomeBrew 失败的解决方案

    在安装HomeBrew 或者安装成功 执行相关指令 时遇到错误提示 Error Failure while executing git clone https github com Homebrew homebrew core usr lo
  • 计算机基础知识操作题office2010,计算机系统操作师(中级)试题集(Office 2010版)...

    计算机系统操作师 中级 试题集 Office 2010版 依据 计算机操作员职业标准 编写 内容包括文字设置与编排 表格的基本操作 版面设置与图文混排 工作簿的基本操作 数据处理 办公软件综合应用 演示文稿的制作和Smart Art的制作
  • element表格之表头代码改进

    代码 官网
  • layui的使用

    下载链接 https pan baidu com s 1TIRrwFhua61jTqUCjme58Q pwd 1234 提取码 1234 gt layuiAdmin pro 即 单页版 gt layuiAdmin std 即 iframe
  • 程序员国庆加班调查:你是放假,还是被加班了?(内附加班费算法,最少可拿1711元)

    盼星星盼月亮 祖国的生日终于来了 程序员快发霉的身体 此刻是不是活了过来 想想美美的假期 梦寐以求想去的景点 让人留连忘返的小吃 又可以在朋友圈里愉快地装X了 简直兴奋地不要不要的 But 小编用一毛钱和你打赌 你看到的景点会是这样的 前方
  • android开发:adb安装apk

    参考 使用adb命令安装安卓apk包 1348204588 博客园
  • 解决nginx代理转发post请求变get请求方法

    请求类型变化原因 当使用 Nginx 将 HTTP 跳转到 HTTPS 时 HTTP 请求可能包含不同类型的方法 method 如 GET POST PUT DELETE 等 根据 HTTP 协议的规定 重定向 Redirection 的方