yookee
火狐狸
火狐狸
  • UID2160
  • 注册日期2005-01-14
  • 最后登录2024-03-05
  • 发帖数186
  • 经验181枚
  • 威望0点
  • 贡献值192点
  • 好评度3点
  • 社区居民
阅读:1976回复: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

最新喜欢:

fang5566fang55...
aaaa007cn
千年狐狸
千年狐狸
  • UID23968
  • 注册日期2008-05-03
  • 最后登录2022-03-07
  • 发帖数1924
  • 经验1138枚
  • 威望1点
  • 贡献值232点
  • 好评度164点
1楼#
发布于:2021-03-16 12:55
预览是通过 wasm 来解析加密 pdf 的
不是通过 firefox 内置的 pdf.js

至于为什么那个 wasm 在 firefox 下报错就不知道了
taoww
非常火狐
非常火狐
  • UID39284
  • 注册日期2013-03-18
  • 最后登录2024-04-15
  • 发帖数625
  • 经验571枚
  • 威望0点
  • 贡献值110点
  • 好评度99点
2楼#
发布于:2021-03-18 10:27
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请求分段获取,然后服务器的回应就正常了
yookee
火狐狸
火狐狸
  • UID2160
  • 注册日期2005-01-14
  • 最后登录2024-03-05
  • 发帖数186
  • 经验181枚
  • 威望0点
  • 贡献值192点
  • 好评度3点
  • 社区居民
3楼#
发布于:2021-03-18 10:43
taoww:它这个也是用的pdf.js,虽然里面乱加了些东西会跳异常。

我个人的观察是页面会对 http://c.gb688.cn/bzgk/gb/viewGb?type=online&hcno=C4BFD981E993C417EF475F2A1...
回到原帖
感觉正解,有方法让ff重发这个请求吗
aaaa007cn
千年狐狸
千年狐狸
  • UID23968
  • 注册日期2008-05-03
  • 最后登录2022-03-07
  • 发帖数1924
  • 经验1138枚
  • 威望1点
  • 贡献值232点
  • 好评度164点
4楼#
发布于:2021-03-18 13:30
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 下也会报错
aaaa007cn
千年狐狸
千年狐狸
  • UID23968
  • 注册日期2008-05-03
  • 最后登录2022-03-07
  • 发帖数1924
  • 经验1138枚
  • 威望1点
  • 贡献值232点
  • 好评度164点
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 头
aaaa007cn
千年狐狸
千年狐狸
  • UID23968
  • 注册日期2008-05-03
  • 最后登录2022-03-07
  • 发帖数1924
  • 经验1138枚
  • 威望1点
  • 贡献值232点
  • 好评度164点
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 长度一致
yookee
火狐狸
火狐狸
  • UID2160
  • 注册日期2005-01-14
  • 最后登录2024-03-05
  • 发帖数186
  • 经验181枚
  • 威望0点
  • 贡献值192点
  • 好评度3点
  • 社区居民
7楼#
发布于:2021-03-20 23:47
aaaa007cn:找到一个 workaround
使用 privoxy 强制把 http 1.1 降级到 http 1.0 就可以了

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

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

返回顶部