【问题标题】:HTTP2 Stream not working on safari iOSHTTP2 Stream 在 Safari iOS 上不起作用
【发布时间】:2018-12-03 08:16:21
【问题描述】:

我正在跨浏览器测试 http2 流,但无法在 iOS Safari 上运行。没有苹果桌面自动取款机。

节点服务器:

const http2 = require('http2')
const fs = require('fs')

const server = http2.createSecureServer({
  key: fs.readFileSync('../certs/localhost-privkey.pem'),
  cert: fs.readFileSync('../certs/localhost-cert.pem')
})

const page = fs.readFileSync('full.html.br')

let middle = 300

server.on('error', (err) => console.error(err))

server.on('stream', (stream, headers) => {
  stream.respond({
    'content-type': 'text/HTML',
    ':status': 200,
    'Content-Encoding': 'br'
  })
  stream.write(page.slice(0, middle))
  stream.end(page.slice(middle, page.length - 1))
})

server.listen(8443)

在 iOS 上,它只是显示一个空白页面。在 Linux 和 Windows 上它可以正常工作。它也适用于 gzip,只有 brotli 坏了。

【问题讨论】:

  • 什么版本的iOS?仅在 11 中添加:caniuse.com/#feat=brotli
  • 谢谢@BarryPollard :) :) Brotli 单独有效,但 brotli + 流媒体无效。 iOS 已更新至最新版本。

标签: ios streaming http2


【解决方案1】:

不确定这是否是错字,但这一行:

'Content-Encoding': 'brotli'

实际上应该是:

'Content-Encoding': 'br'

当我这样做时,它在 iPhone (iOS 11.4)、iPad (iOS 11.4) 和 Mac 上的 Safari 上运行良好,否则会显示垃圾。但是当使用不正确的内容编码时,它在 Chrome 中也是如此。

如果以上是错字,那么我建议您的 full.html.br 可能有问题?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    相关资源
    最近更新 更多