Ryan Shang

生死看淡,不服就干

0%

测试环境出现OPTIONS请求的原因

一、背景

近期的开发工作中,在测试阶段,发现了一个有意思的事情,在Chrome浏览器中,页面的network请求里面发现了意外的OPTIONS预检请求,明明是个Get请求:

01

之前在测试的时候也出现过,确认过对业务没有影响,没有深究,这次好好研究了下。

二、出现的原因

主要原因是Chrome的安全策略发生了变化,Chrome现在会把专用网络请求发送CORS预检请求,来防止CSRF攻击。

专用网络请求是指目标服务器的 IP 地址比从中提取请求发起者的 IP 地址私密性更高的请求。例如,从公开网站 (https://example.com) 到专用网站 (http://router.local) 的请求,或从专用网站向 localhost 发送的请求。

因为在Host中给域名配置了测试环境的IP,所以这些请求被认为是专用网络请求,需要发送CORS预检请求。

会被认为是专用网络请求的IP:

Address block Name Reference Address space
127.0.0.0/8 IPv4 Loopback [RFC1122] local
10.0.0.0/8 Private Use [RFC1918] private
100.64.0.0/10 Carrier-Grade NAT [RFC6598] private
172.16.0.0/12 Private Use [RFC1918] private
192.168.0.0/16 Private Use [RFC1918] private
198.18.0.0/15 Benchmarking [RFC2544] local
169.254.0.0/16 Link Local [RFC3927] private
::1/128 IPv6 Loopback [RFC4291] local
fc00::/7 Unique Local [RFC4193] private
fe80::/10 Link-Local Unicast [RFC4291] private
::ffff:0:0/96 IPv4-mapped [RFC4291] see mapped IPv4 address

Note:专用网络访问:简介

三、为什么出现预检接口报错,却没有影响到正常的请求?

公司的线上环境和测试环境,很早就已经全面升级HTTPS,在双端(发起方网站和目标服务器)都升级为 HTTPS的场景下可以正常请求。

Note:专用网络访问通道更新:推出弃用试用功能