我正在尝试进行Edge扩展,它将与除网页原点之外的其他服务器进行通信。然而,沟通似乎失败了。
当源是外部且跨域请求目标位于Intranet时,我读到了有关跨域请求的问题。所以我已经将内联网服务器暴露给了互联网。但这没有任何帮助。
我尝试尽可能简单地运行fetch()并获得此结果:
取(" https://fake.domain.info/api/browser/authenticate/&#34)。然后加入((响应) => {console.log(response);})。catch((error)=> {console.log(error);})
[object Promise]:{}
[object Error]:{description:"无法获取",消息:"无法 fetch",number:-2147418113}
我在调试窗口检查了网络流量,发现了奇怪的记录:
名称协议方法结果内容类型接收时间发起者 https://fake.domain.info/api/browser/authenticate/ HTTPS GET 200(来自 缓存)0 s
我真的不明白为什么"(来自缓存)"出现。所以用WireShark检查了请求。我发现的是:
61 3.004629 xxx.xxx.xxx.xxx 192.168.124.144 TLSv1.2 501服务器您好, 证书,服务器密钥交换,服务器Hello完成
62 3.004666 192.168.124.144 xxx.xxx.xxx.xxx TCP 54 51965→443 [ACK] Seq = 207 Ack = 1908 Win = 261632 Len = 0
...
86 3.010645 192.168.124.144 xxx.xxx.xxx.xxx TCP 54 51965→443 [FIN,ACK] Seq = 207 Ack = 1908 Win = 261632 Len = 0
87 3.011785 xxx.xxx.xxx.xxx 192.168.124.144 TCP 60 443→51965 [ACK] Seq = 1908 Ack = 208 Win = 65536 Len = 0
...
89 3.012215 xxx.xxx.xxx.xxx 192.168.124.144 TCP 60 443→51965 [RST,ACK] Seq = 1908 Ack = 208 Win = 0 Len = 0
我不明白为什么在TLS握手后立即重置连接。 打开网页工作正常。我已经使用WireShark检查了它,发现第一个连接在TLS握手后立即关闭,但是新的一个立即创建,流量通过这个连接没有问题。
我检查了服务器端日志 - 没有注册的问题。并且没有记录任何HTTP请求。
当我尝试通过普通HTTP运行相同的请求时,它工作正常:
取(" http://fake.domain.info/api/browser/authenticate/&#34)。然后加入((响应) => {console.log(response);})。catch((error)=> {console.log(error);})
[object Promise]:{}
[object Response]:{body:Object,bodyUsed:false,headers:Object, ok:false,重定向:false ...}
HTTP 404按预期返回
所以我发现问题与TLS连接有关。
另一件事:只有在Edge中执行此问题时才会出现问题。在Firefox中进行操作时,它可以正常工作:
取(" https://fake.domain.info/api/browser/authenticate/&#34)。然后加入((响应) => {console.log(response);})。catch((error)=> {console.log(error);})
承诺{:"待定" }
回复{type:" basic",url: " https://fake.domain.info/api/brows ...",重定向:false,状态: 404,ok:false,statusText:" [{" errors":[{" message":" API无效...", headers:Headers,bodyUsed:false}
我在运行来自Firefox的请求时检查了WireShark中的流量 - TLS握手后的连接未关闭,但应用程序数据立即发送。
是否有一些已知的Edge行为,有没有办法解决它?可能是某些服务器配置错误?