通过HTTPS进行边缘跨域请求

Ral*_*eus 6 https cross-domain microsoft-edge

我正在尝试进行Edge扩展,它将与除网页原点之外的其他服务器进行通信.然而,沟通似乎失败了.

当源是外部的并且跨域请求目标在Intranet中时,我读到了有关跨域请求的问题.所以我将内联网服务器暴露在互联网上.但这没有帮助.

我试图尽可能简单地运行fetch()并获得此结果:

fetch(" https://fake.domain.info/api/browser/authenticate/ ").then((response)=> {console.log(response);}).catch((error)=> {console.日志(误差);})

[对象承诺]:{}

[object Error]:{description:"无法获取",消息:"无法获取",编号:-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,证书,服务器密钥交换,服务器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运行相同的请求时,它工作正常:

fetch(" http://fake.domain.info/api/browser/authenticate/ ").then((response)=> {console.log(response);}).catch((error)=> {console.日志(误差);})

[对象承诺]:{}

[object Response]:{body:Object,bodyUsed:false,headers:Object,ok:false,redirected:false ...}

按预期返回HTTP 404

所以我看到问题与TLS连接有关.

另一件事:只有在Edge中执行时才会出现问题.在Firefox中执行此操作时,它可以正常工作:

取( " https://fake.domain.info/api/browser/authenticate/ ").然后((响应)=> {的console.log(响应);}).赶上((误差)=> {控制台.日志(误差);})

承诺{:"待定"}

响应{类型: "基本",网址: " https://fake.domain.info/api/brows ......",重定向:假,状态:404,OK:假,状态文本: "[{"错误":[{ "message":"无效的API ...",标题:标题,正文使用:false}

我在运行来自Firefox的请求时检查了WireShark中的流量 - 在TLS握手未关闭但是应用程序数据立即发送之后的连接.

它是一些已知的Edge行为,有没有办法解决它?可能是某些服务器配置错误?