阅读:2416回复:7
无法在线浏览国家标准
在http://www.gb688.cn/bzgk/gb/index可以查询国家标准,通过安装FileOpen插件浏览全文。FileOpen插件说是Adobe Reader版权保护插件,我觉得是调用Flash来浏览的,因为我把Flash卸载了,FileOpen就无法看标准了。
现在把FileOpen也卸载了,结果FF提示“载入PDF时发生错误”,Edge则能正常浏览。 比如 GB/T 1.1-2020 http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=C4BFD981E993C417EF475F2A19B681F1 |
|
最新喜欢:fang55... |
1楼#
发布于:2021-03-16 12:55
预览是通过 wasm 来解析加密 pdf 的
不是通过 firefox 内置的 pdf.js 至于为什么那个 wasm 在 firefox 下报错就不知道了 |
|
|
2楼#
发布于:2021-03-18 10:27
aaaa007cn:预览是通过 wasm 来解析加密 pdf 的它这个也是用的pdf.js,虽然里面乱加了些东西会跳异常。 我个人的观察是页面会对 http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=C4BFD981E993C417EF475F2A19B681F1 发送个请求,服务器的回应有问题,http消息头Content-Length说有长度,但http消息体却是空的。firefox在这种情况下直接报错停止执行了,但chrome系会重新发一个http请求分段获取,然后服务器的回应就正常了 |
|
3楼#
发布于:2021-03-18 10:43
taoww:它这个也是用的pdf.js,虽然里面乱加了些东西会跳异常。感觉正解,有方法让ff重发这个请求吗 |
|
4楼#
发布于:2021-03-18 13:30
taoww:它这个也是用的pdf.js,虽然里面乱加了些东西会跳异常。看了下请求 不带 range 头的请求就返回空 必须带 range 头的才有实际的返回 但是这个 response 的 content-length 头和 content-range 头也不一致 length 正好是实际 range 大小的 1.333 倍 从内容看,是 base64 编码的,1.333 就是这么来的吧 请求本身是网站的 pdf.js 发起的 chromium 下的重发也应该是网站的 pdf.js 代码中发起的 只是在 firefox 下没有执行那段逻辑 wasm 到底是干啥的 在 chromium 下也会报错 |
|
|
5楼#
发布于:2021-03-19 21:55
又测试了几遍
我觉得是不同浏览器下 fetch 函数对于服务器错误响应的不同实现导致的 fetch(`viewGb${document.location.search}`) .then(resp => resp.headers.forEach((v, k) => console.log(`${k}: ${v}`))) .catch(err => console.error(err)) 随便打开一个标准的在线预览页面,比如顶楼那个 分别在 firefox 和 chromium 系浏览器的控制台中执行这句代码 firefox 会直接报 TypeError: NetworkError when attempting to fetch resource 而 chromium 系在提示 net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK) 的同时 可以正常打印出响应的 http 头 |
|
|
6楼#
发布于:2021-03-19 22:46
找到一个 workaround
使用 privoxy 强制把 http 1.1 降级到 http 1.0 就可以了 {+downgrade-http-version} c.gb688.cn/bzgk/gb/viewGb 原理是 http 1.0 没有对 response 的 content-length 值的要求 而 http 1.1 要求 content-length 和实际 body 长度一致 |
|
|
7楼#
发布于:2021-03-20 23:47
|
|