记录Http访问服务接口出现 301 Moved Permanently

记录Http访问服务接口出现 301 Moved Permanently

一、项目背景

​ 在A服务中 需要通过远程调用 B服务接口 获取数据。A项目与B项目部署在不同的服务接口中。

  • 请求接口响应界面

​ 在调用B项目的接口时,响应的数据一直为 301 Moved Permanently Html代码,通过 response.getWriter().write(result); 将响应界面展示如下:

在这里插入图片描述

​ 但是直径通过浏览器界面访问该接口时,是能成功的远程调用并且返回正确的数据。排查调用远程接口的代码也没问题。 前期一直找不到原因所在!

  • 通过浏览器之间访问接口:

    在这里插入图片描述

    ​ 注意:这里通过浏览器访问该接口时,是通过了Https协议去访问的该接口(当时没注意这一点),但是在我代码中访问的地址,由于对接文档的原因,使用的是 Http来调用。

  • A 服务调用 B服务接口代码:

String strUrl = SSOServerTicket+ticket;
BufferedReader br = null;
String result = "";
try{
    URL realUrl = new URL(strUrl);
    URLConnection connection = realUrl.openConnection();
    //略:调用B服务对应接口所需要封装数据
    connection.setRequestProperty("accept", "*/*");
    connection.setRequestProperty("connection", "Keep-Alive");
    connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    br = new BufferedReader(new InputStreamReader(
        connection.getInputStream()));
    String line;
    while ((line = br.readLine()) != null) {
        result += line;
    }
}catch(Exception e){
    e.printStackTrace();
}   finally {
    try {
        if (br != null) {
            br.close();
        }
    } catch (Exception e2) {
        e2.printStackTrace();
    }
}

二、问题排查

​ 通过查询资料看了很多相似的情况解决方案,尝试了很多解决方法,其中包括了 换远程调用的方式等。最终看见一个该类型的解决方案是 将请求地址的 http 改为 https 在进行远程调用,然后接口就能成功访问了!

​ 具体是什么原因导致出现 http 访问不了 https却能访问。目前暂时不能理解!在网上查询资料解释是因为:

​ B项目中全站启用了 HTTPS,在全站启用了 HTTPS 以后,用户可能还会使用 HTTP 访问,所有很多建议使用 301 Moved Permanently + HSTS ( Strict Transport Security Policy ) 的方式要求用户跳转到 HTTPS 后在访问!

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP服务器状态代码定义 在利用LoadRunner进行性能测试的时候,经常不知道某个HTTP代码的涵义,现在转载一 篇文章,详细介绍了每种类型的HTTP返回码解释,仅供参考。 HTTP服务器状态代码定义(Status Code Definitions) 1.1 消息1xx(Informational 1xx) 该类状态代码用于表示临时回应。临时回应由状态行(Status- Line)及可选标题组成, 由空行终止。HTTP/1.0中没有定义任何1xx的状态代码,所以它们不是对HTTP/1.0请求的   合法回应。实际上,它们主要用于实验用途,这已经超出本文档的范围。 1.2 成功2xx(Successful 2xx) 表示客户端请求被成功接收、理解、接受。 200 OK 请求成功。回应的信息依赖于请求所使用的方法,如下: GET 要请求的资源已经放在回应的实体中了。 HEAD 没有实体主体,回应中只包括标题信息。 POST 实体(描述或包含操作的结果)。 201 Created 请求完成,结果是创建了新资源。新创建资源的URI可在回应的实体中得到。原始服务器 应在发出该状态代码前创建该资源。如果该操作不能立即完成,服务器必须在该资源可 用时在回应主体中给出提示,否则,服务器端应回应202(可被接受)。 在本文定义的方法,只有POST可以创建资源。 202 Accepted 请求被接受,但处理尚未完成。请求可能不一定会最终完成,有可能被处理过程随时中 断,在这种情况下,没有办法在异步操作中重新发送状态代码。 202回应是没有义务的,这样做的目的是允许服务器不必等到用户代理和服务器间的连接 结束,就可以响应其它过程的请求(象每天运行一次的,基于批处理的过程)。 在某些回应中返回的实体中包括当前请求的状态指示、状态监视器指针或用户对请求能 否实现的评估信息。 204 No Content 服务器端已经实现了请求,但是没有返回新的信息。如果客户是用户代理,则勿需为此 更新自身的文档视图。该回应主要是为了在不影响用户代理激活文档视图的前提下,进 行script语句的输入及其它操作。该回应还可能包括新的、以实体标题形式表示的元信 息,它可被当前用户代理激活视图中的文档所使用。 1.3 重定向(Redirection 3xx) 该类状态码表示用户代理要想完成请求,还需要发出进一步的操作。这些操作只有当后 跟的请求是GET或HEAD时,才可由用户代理来实现,而不用与用户进行交互。用户代理永 远也不要对请求进行5次以上的重定向操作,这样可能导致无限循环。 300 Multiple Choices 该状态码不被HTTP/1.0的应用程序直接使用,只是做为3xx类型回应的缺省解释。存在多 个可用的被请求资源。 除非是HEAD请求,否则回应的实体中必须包括这些资源的字符列表及位置信息,由用户 或用户代理来决定哪个是最适合的。 如果服务器有首选,它应将对应的URL信息存放在位置域(Location field)处,用户代理会根据此域的值来实现自动的重定向。 301 Moved Permanently 请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源。有 编辑链接功能的客户端会尽可能地根据服务器端传回的新链接而自动更新请求URI。 新的URL必须由回应中的位置域指定。除非是HEAD请求,否则回应的实体主体   (Entity-Body)必须包括对新URL超链接的简要描述。 如果用POST方法发出请求,而接收到301回应状态码。在这种情况下,除非用户确认,否 则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。 注意:当在接收到301状态码后而自动重定向POST请求时,一些现存的用户代理会错误地 将其改为GET请求。 302 Moved Temporarily 请求到的资源在一个不同的URL处临时保存。因为重定向有时会被更改,客户端应继续用 请求URI来发出以后的请求。新的URL必须由回应中的位置域指定。除非是HEAD请求,否 则回应的实体主体 (Entity-Body)必须包括对新URL超链接的简要描述。 如果用POST方法发出请求,而接收到302回应状态码。在这种情况下,除非用户确认,否 则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。 注意:当在接收到302状态码后而自动重定向POST请求时,一些现存的用户代理会错误地 将其改为GET请求。 304 Not Modified 如果客户端成功执行了条件GET请求,而对应文件自If-Modified- Since域所指定的日期以来就没有更新过,服务器应当回应此状态码,而不是将实体主体 发送给客户端。回应标题域中只应包括一些相关信息,比如缓存管理器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值