繁体   English   中英

将api资源静默移动到另一个URL

[英]Silently move api resources to another url

我已经用WepApi 2与主网站紧密结合编写api。 我决定将它与其他网络应用程序分离,以使事情更加孤立。

我遵循了以下步骤:

  1. 将所有API控制器解压缩到另一个项目
  2. Creat属性将当前使用旧URL的所有用户重定向到新URL。 出于这些原因,我使用了307状态代码,因为我们应该保留用户请求的动词并请求有效负载。

      var response = request.CreateResponse(HttpStatusCode.TemporaryRedirect); //307 response.Headers.Location = new Uri($"{appConfig.ApiAppDomain}" + "/" + request.RequestUri.AbsolutePath + request.RequestUri.Query); return response; 

通常它很好用。 客户端获得307,然后跟随Location标头中的URL。

问题出在这里:主要的网络应用程序是https ,新的api是http 当我使用邮递员时,它表现得很奇怪,并且用所有请求的身体切割用GET请求替换POST请求。 一点也不好奇怪因为307不允许改变方法和有效载荷。

所以这里有几个问题:

  1. 处理此https - > http重定向的最佳方法是什么?
  2. 它是否是一个好的解决方案?
  3. 将我们的用户静默移动到新api url的最佳解决方案是什么?

302,301等重定向只是GET请求。但是从技术上来说,浏览器可以发出POST请求。更多细节在这里 。但是重定向不是一个好主意,它会为每个请求进行不必要的往返。也是它可能会导致其他问题,如跨域调用(如果您正在进行Ajax REST API调用或浏览器将验证所有资源仅从https加载( 混合内容警告

处理此https - > http重定向的最佳方法是什么?

我们不应该进行重定向,因为它可能导致许多问题,正如我上面解释的那样

它是否是一个好的解决方案?

在这种情况下,重定向不是一个好的解决方案。

将我们的用户静默移动到新api url的最佳解决方案是什么?

在我看来,这种情况下的最佳解决方案是设置一个透明代理,它也将执行https卸载。 这也将使您的客户端零变化。这就是我们如何设置它。

  • 在IIS中为任何进入API的请求设置反向代理。

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="ReverseProxyInboundRule2" stopProcessing="true"> <match url="api/(.*)" /> <action type="Rewrite" url="http://server2/api/{R:1}" logRewrittenUrl="true" /> <conditions> </conditions> </rule> </rules> </rewrite> </system.webServer> </configuration>

在上面的urlrewrite规则中,如果请求的URL包含将通过http.So的api ,那么您将把请求转发给server2,直到此服务器请求将在https上发送,并且从那里它将在http上发送到服务器2。没有客户的知识就会发生。 这将是本地请求(不是通过互联网),延迟可以忽略不计。所以流程将是这样的

浏览器=> https( https://example.com/api/products/2 )=> http( http:// server2 / api / products / 2

  • 完全从原始网站中删除API代码。 包括重定向逻辑,这将使您的网站完全免于API实施

只是总结了这种方法的优点

  1. 在客户端,不需要进行任何更改,客户甚至不会知道这样的事情正在发生。 所以客户端没有额外的往返旅行。
  2. 您的流量将是完整的https,并且没有https到主网站外的http。
  3. 如果主网站上有主网站和API调用,则不会创建跨域调用或混合内容警告。 4.您已完全将您的主网站与API代码隔离开来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM