无法在线浏览国家标准

阅读:2037回复:7
2021-03-12 14:48
写私信
楼主#
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...
2021-03-16 12:55
写私信
1楼#
预览是通过 wasm 来解析加密 pdf 的
不是通过 firefox 内置的 pdf.js

至于为什么那个 wasm 在 firefox 下报错就不知道了
2021-03-18 10:27
写私信
2楼#
aaaa007cn:预览是通过 wasm 来解析加密 pdf 的
不是通过 firefox 内置的 pdf.js

至于为什么那个 wasm 在 firefox 下报错就不知道了
回到原帖
它这个也是用的pdf.js,虽然里面乱加了些东西会跳异常。

我个人的观察是页面会对 http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=C4BFD981E993C417EF475F2A19B681F1 发送个请求,服务器的回应有问题,http消息头Content-Length说有长度,但http消息体却是空的。firefox在这种情况下直接报错停止执行了,但chrome系会重新发一个http请求分段获取,然后服务器的回应就正常了
2021-03-18 10:43
写私信
3楼#
taoww:它这个也是用的pdf.js,虽然里面乱加了些东西会跳异常。

我个人的观察是页面会对 http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=C4BFD981E993C417EF475F2A1...
回到原帖
感觉正解,有方法让ff重发这个请求吗
2021-03-18 13:30
写私信
4楼#
taoww:它这个也是用的pdf.js,虽然里面乱加了些东西会跳异常。

我个人的观察是页面会对 http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=C4BFD981E993C417EF475F2A1...
回到原帖
看了下请求
不带 range 头的请求就返回空
必须带 range 头的才有实际的返回
但是这个 response 的 content-length 头和 content-range 头也不一致
length 正好是实际 range 大小的 1.333 倍
从内容看,是 base64 编码的,1.333 就是这么来的吧

请求本身是网站的 pdf.js 发起的
chromium 下的重发也应该是网站的 pdf.js 代码中发起的
只是在 firefox 下没有执行那段逻辑

wasm 到底是干啥的
在 chromium 下也会报错
2021-03-19 21:55
写私信
5楼#
又测试了几遍
我觉得是不同浏览器下 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 头
2021-03-19 22:46
写私信
6楼#
找到一个 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 长度一致
2021-03-20 23:47
写私信
7楼#
aaaa007cn:找到一个 workaround
使用 privoxy 强制把 http 1.1 降级到 http 1.0 就可以了

{+downgrade-http-version}
c.gb688.cn/bzgk/gb/viewGb

原理是 http...
回到原帖
原来如此