问题背景

当前我有一个基于Flask编写的Restful服务,由于业务的需求,我需要将该服务打包成docker 镜像进行离线部署,原始服务的端口是在6661端口进行开启,为了区分,在docker中启动的服务使用了端口映射,将宿主机上的6665端口映射到docker容器中已启动服务的6661端口.

假设宿主机的ip地址为:192.168.124.234,即如果我请求宿主机的http://192.168.124.234:6665/api/hello,实际上是访问docker容器中的XXXX:6661/api/hello

docker服务启动完成后的显示如下:

问题描述

在组内使用自行部署的接口管理工具中(yapi)进行接口请求,接口显示请求异常,并且该条请求在服务内部日志中也没有显示,但是同样的请求api在其他多种方式下均可正常请求

ps: yapi是通过浏览器打开的网页进行访问的,yapi如果希望在网页上进行访问接口需要安装yapi指定的chrome插件方可在chrome浏览器中进行访问

正确结果

  1. 当docker完成启动之后我通过postman进行访问,可以正确得到结果:
  2. 当我在其他机器乃至docker宿主机上通过curl进行请求,也可以正确得到结果

问题初判断

由于通过yapi访问访问部署在其他机器的服务均没有问题,并且通过postman、curl进行请求api也没有问题所以肯定的是服务本身是没有问题的

所以初步判断问题如下:

  • 问题1: api请求是否正确到达docker容器中的服务?
  • 问题2: api请求没有正确到达宿主机?
  • 问题3: api请求没有正确的传出chrome浏览器?(ps:由于请求其他服务器的接口没有问题,最开始并没有这样的怀疑

问题解决

问题1:api请求是否正确到达docker容器中的服务?

由于docker容器中的服务log中没有请求的日志信息记录,所以api请求一定是没有到达docker容器中的服务

问题2:api请求没有正确到达宿主机?

这里需要通过借用tcpdump进行数据抓包,我们通过下面的命令进行监听eno1接口的所有数据包并将数据写入到1.pcap文件中

tcpdump -i eno1 -w 1.pcap

然后我们通过wireshark软件对数据包进行分析

发现我们在使用yapi在chrome中进行接口请求时候,我们并没有抓到请求6665端口的数据包

而我们使用postman或者curl进行访问的时候进行访问的时候都完整的抓到了数据包,所以结论是:通过yapi进行api请求没有正确到达宿主机

问题3:api请求没有正确的传出chrome浏览器?

由于yapi在chrome浏览器中发出的请求,是通过chrome插件进行的,所以我们使用F12查看chrome的debug页面是看不见请求结果的,无论怎么请求都没有反应。

所以我们通过查看chrome插件的debug页面,然后点击“发送”按钮还是没有反应



经过搜索发现chrome插件的调试还有一个background页面可以进行调试,关于chrome插件的backgroud信息可以看这里,我们在插件上用鼠标右键调出如下界面:

然后点击"背景页",出现如下界面:


这时候当我们点击yapi中的“发送”按钮时候,在这个页面中终于发现了报错信息:

说是(failed)net::ERR_UNSAFE_PORT,也就是我请求的这个端口不安全

这才反应到可能是我的端口设置问题,经过搜索发现:

6665——6669这几个端口是IRC协议使用的缺省端口,存在很大的安全风险,很容易被木马程序利用,被谷歌火狐浏览器屏蔽掉了

这真是太坑了,千算万算没算到竟然是端口设置的问题,然后被chrome浏览器屏蔽了访问

于是我将端口换了一个,问题完美解决。

收获

后端服务的端口千万不要随便设置
后端服务的端口千万不要随便设置
后端服务的端口千万不要随便设置

参考

6665——6669端口为什么用不了

【干货】Chrome插件(扩展)开发全攻略

记录一次http请求失败的问题分析相关推荐

  1. web developer tips (38):如何用请求失败记录追踪重写规则

    原文地址:How to use Failed Request Tracing to trace Rewrite Rules. IIS 7.0 请求失败跟踪(Failed Request Tracing ...

  2. 百度2016笔试题第一题:页面请求失败值

    题目简单描述:对于一个大小为max_cache_size的缓存,有请求页面page_request,大小为len. 当缓存没满时,在缓存中查看是否有请求的页面,如果没有,则将页面加入缓存,失败值+1: ...

  3. python自动搜索请求失败_http请求 request失败自动重新尝试代码示例

    本文研究的主要是http请求 request失败自动重新尝试的一个例子,具体如下. 需求 最近开发一个项目,要实现的一个场景是对于某个http请求,如果请求失败,需要再自动尝试几次,并记录异常原因便于 ...

  4. Android post参数太长请求失败问题解决

    使用post请求,如下所示: retrofitHelper.getService(OnlineAnalyzeApi.class, UrlConstant.getBaseUrl(mView.getCon ...

  5. 解决蓝牙鼠标连接不上,系统报未知的USB设备(设备描述符请求失败)的问题

    今天工作时蓝牙鼠标突然连接不上了,开始以为是没电了,换了新电池也不行. 打开设备管理器发现出现一个未知的 USB 设备(设备描述符请求失败). 然后试图卸载驱动设备重新安装也卸载不了,各种驱动软件也扫 ...

  6. lol观战服务器中未能,lol观战服务器数据请求失败的解决方法

    玩英雄联盟有一项观战功能,当我们邀请好友在进行游戏的时候,我们可以点击好友昵称右方的[观战]选项,从而进入游戏查看好友玩游戏,但有时候观战系统可能无法使用不能观战好友玩游戏,下面为大家分享下几种解决l ...

  7. 微信小程序网络请求异常怎么办_监控微信小程序wx.request请求失败

    在微信小程序里,与后台服务器交互的主要接口函数是wx.request(),用于发起 HTTPS 网络请求.其重要性不言而喻.然而,却经常遇到请求失败的问题,笔者特意谷歌"wx.request ...

  8. spring cloud gateway中解决第一次请求失败的问题

    spring cloud gateway中解决第一次请求失败的问题 参考文章: (1)spring cloud gateway中解决第一次请求失败的问题 (2)https://www.cnblogs. ...

  9. ajax请求失败后重连和promiseIfy

    记得在找实习时,被问到一个问题.前端发送请求失败后如何重新发送请求. 以 ajax 为例: let num = 0;function ajaxReconnection() {$.ajax({url: ...

最新文章

  1. Please see the 'svn upgrade' command
  2. 解题报告 『[NOI2014]起床困难综合症』
  3. 三十而已,工程师如何做好职业成长?
  4. curd什么意思中文_查英英字典:What a shame是什么意思?
  5. CYQ.Data 数据框架 发放V1.5版本源码
  6. SQLplus 和mysql区别_mysql和oracle的区别有哪些
  7. 静默错误:为什么看了那么多灾难,还是过不好备份这一关?
  8. 三星Galaxy S22系列可能会延迟发售:原因可能还是它!
  9. 8.2-HSRP 第二次:重新搭建拓扑 //IOU
  10. c++ opencv 识别车牌_python利用百度云接口实现车牌识别
  11. TensorFlow精进之路(十二):随时间反向传播BPTT
  12. rails debug
  13. linux下抓取网页快照
  14. qt linux 网络聊天室,QT tcp网络聊天室群聊的实现
  15. 写了个算分压电阻阻值的MATLAB小程序
  16. java回溯_java实现回溯算法
  17. 树莓派linux led字符设备驱动(设备树)
  18. Ubuntu使用代理服务器上网
  19. JIAR 使用笔记 - 素材
  20. 制作我自己的桌面小机器人Zbot(遇到的问题总结)

热门文章

  1. 2022-2028年全球与中国闪光棉市场研究及前瞻分析报告
  2. Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常
  3. 【微服务架构】SpringCloud使用Ribbon实现负载均衡
  4. list extend 和 append
  5. pip、conda 换国内源,大大提高下载速度
  6. PVD与CVD性能比较
  7. gst-crypto GStreamer插件
  8. 2021年大数据ZooKeeper(一):ZooKeeper基本知识
  9. 2021年大数据Spark(二十):Spark Core外部数据源引入
  10. python rjust() 方法 与 ljust()方法 的使用