/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

IIS8通过ARR和URL重写模块实现不同站点之间的POST请求重写

2017-01-19 十有三 0 浏览:1万+ .NET技术 ASP.NET | 服务器 | IIS

之前在我写的一篇关于URL重写模块的文章中,看到评论有咨询这样的一个问题:想要实现访问A站点的API,让B站点的API响应,并且是以HTTP POST请求的形式,但是设置rewrite不起作用,依然是A站点的API响应,如果使用redirect的方式,会以GET方式访问B站点API并返回404。要想实现不同站点之间的POST请求重写,最主要的技术点有两个,一个是服务器级别的URL重写,另一个是用ARR做反向代理。

PS:本文需要对ARR有一定的基础了解,ARR全称Application Request Routing,应用程序请求路由,建议先查阅官方文档,使用ARR一些需要注意的地方可以参考我之前的文章:总结IIS中使用ARR一些要注意的地方和经验。

由于ARR是基于URL重写模块的,只要之前对URL重写有所了解上手并不会太难,除非你需要使用更加高级的功能,比如实现负载均衡方案之类的。

先说一个要注意的地方,使用网站级别的URL重写是无法实现本文提到的效果的,一定要服务器级别的URL重写,搭配ARR来做。毕竟网站级别的URL重写是不支持跨域和跨IP重写,类似跨域或者绝对路径的处理网站级别的只能做重定向,但是重定向POST提交的数据会丢失并转换为GET请求。

接下来说说可以实现的几种场景:

  1. 如果两个网站/API在同个服务器上,并且主机名不一样,都可以实现。具体主机名不一样有这几种情况:
    1. 绑定了不同的域名
    2. IP地址相同端口号不同
    3. IP地址不相同
  2. 如果两个API网站分别部署在不同服务器就比较麻烦了,需要利用Server Farms,具体需要使用ARR比较高级的功能,有需要的只能自己先研究下,大体思路还是差不多的。

这里先假设下场景,假设有两个API网站,IP地址都是192.168.1.111,但是A站点的端口号为811,测试的API路由为"api/products",B站点的端口号为812,测试的API路由为"api/newproducts"。现在要将A站点API的POST请求,重写到B网站并让B网站响应,只需要设置下服务器级别的重写规则即可。

首先打开IIS管理器,选择服务器的根节点:

打开服务器根节点设置服务器级别URL重写

接着在右侧管理面板中打开URL重写,并添加一条新的空白规则,然后设置A站点匹配URL的模式为:api/products。

设置匹配URL的正则匹配模式

接下来继续设置条件规则,这里一定要注意设置,特别是{REQUEST_METHOD}这个服务器变量要限制只处理POST请求,防止与GET请求冲突。剩下的条件输入过滤根据自己的情况来,如果主机头是域名或IP不同只要设置{HTTP_HOST}就可以了,如果像我上面例子中的情况,还要要设置{SERVER_PORT}来过滤端口。

设置过滤条件

最后设置下重写操作,指定要重写的URL:

设置重写的URL地址

到了这一步就实现了http://192.168.1.111:811/api/products的POST请求让http://192.168.1.111:812/api/newproducts来响应!

有条件的可以部署两个不同域名的网站(或者修改本地hosts搞2个域名来测试),这里只是简单用不同的端口作为演示,总体实现的思路也是差不多的。如果两个API网站域名不同,在条件规则那{HTTP_HOST}就可以直接设置域名:

主机位域名的设置范例


作者:十有三

出处:https://shiyousan.com/post/636204388373544350

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: 解决Windows Server 2012 R2 百度网盘无法打开提示丢失Wlanapi.dll
  • 下一篇: 安卓手机上的OneNote同步失败提示错误代码e4010640

相关文章
  • Visual Studio Community 2013英文版安装中文语言包步骤
  • IIS上设置ARR导致所有网站无法正常打开
  • VS2017 签名时出错: 未能对 bin\Debug\app.publish\*.exe 签名。SignTool Error: No certificates were found
  • ASP.NET中Page设置ValidateRequest="false" 无效
  • 解决ASP.NET MVC AllowAnonymous属性无效导致无法匿名访问控制器的问题
  • 解决IIS ASP.NET 网站发布后出现错误 Unable to connect to any of the specified MySQL hosts

文章分类

.NET技术 123 数据库 24 Web前端 21 网站建设运维 37 操作系统与应用 66 程序猿日常 11 开发工具 12 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 服务器 搞笑娱乐 好文分享 软件应用 生活知识 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • win7如何卸载IE11
  • ASP.NET MVC 表单提交多层子级实体集合数据到控制器中
  • C#中将自定义日期和时间格式的字符串转换成日期DateTime类型
  • IIS8无法将不带www的顶级域名301重定向到带www的域名中
  • asp.net动态添加meta标签

友情链接

  • 码友网

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号
闽公网安备 35020302035102号