账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    http/2 chrome 无法service push问题
    39
    0

    Hey there,

    我在Mac os-x 使用nginx自建证书,支持https/http2,使用nginx指令

    http2_push_preload on;
    
    http2_push /style.css;

    推送给客户端style,但是在network面板里面看不到push的结果。通过netlog-views 查看请求发现:

    
    33367 \[st=0\]  HTTP2\_SESSION\_RECV\_PUSH\_PROMISE
                    --> :method: GET
                        :path: /style.css
                        :scheme: https
                        :authority: www.e.com
                        accept-encoding: gzip, deflate, br
                        accept-language: zh,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,da;q=0.6
                        user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_15\_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
                    --> id = 3
                    --> promised\_stream\_id = 4
    t=33367 \[st=0\]  HTTP2\_SESSION\_SEND\_RST\_STREAM
                    --> description = "Duplicate pushed stream with url: https://www.e.com/style.css"
                    --> error\_code = "7 (REFUSED\_STREAM)"
                    --> stream\_id = 4
    t=33367 \[st=0\]  HTTP2\_SESSION\_RECV\_HEADERS
                    --> fin = false
                    --> :status: 200
                        server: nginx/1.17.1
                        date: Mon, 28 Oct 2019 12:53:50 GMT
                        content-type: text/html
                        content-length: 614
                        last-modified: Mon, 28 Oct 2019 12:18:43 GMT
                        etag: "5db6dca3-266"
                        accept-ranges: bytes
                    --> stream\_id = 3
                    
                    

    这里奇怪的提示:

    Duplicate pushed stream with

    有两个疑问:

    1. 为什么Duplicate了呢?
    2. 为什么这帧的流id是4,但是请求的流id是3。

    求解释~~

    完整的log如下:

    
    482506: HTTP2_SESSION
    Start Time: 2019-10-28 20:53:50.036
    
    t=33367 [st=0]  HTTP2_SESSION_PING
                    --> is_ack = false
                    --> type = "sent"
                    --> unique_id = 1
    t=33367 [st=0]  HTTP2_SESSION_SEND_HEADERS
                    --> exclusive = true
                    --> fin = true
                    --> has_priority = true
                    --> :method: GET
                        :authority: www.e.com
                        :scheme: https
                        :path: /
                        cache-control: max-age=0
                        upgrade-insecure-requests: 1
                        user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
                        sec-fetch-mode: navigate
                        sec-fetch-user: ?1
                        accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
                        sec-fetch-site: none
                        accept-encoding: gzip, deflate, br
                        accept-language: zh,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,da;q=0.6
                    --> parent_stream_id = 0
                    --> source_dependency = 483310 (HTTP_STREAM_JOB)
                    --> stream_id = 3
                    --> weight = 256
    t=33367 [st=0]  HTTP2_SESSION_RECV_PUSH_PROMISE
                    --> :method: GET
                        :path: /style.css
                        :scheme: https
                        :authority: www.e.com
                        accept-encoding: gzip, deflate, br
                        accept-language: zh,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,da;q=0.6
                        user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
                    --> id = 3
                    --> promised_stream_id = 4
    t=33367 [st=0]  HTTP2_SESSION_SEND_RST_STREAM
                    --> description = "Duplicate pushed stream with url: https://www.e.com/style.css"
                    --> error_code = "7 (REFUSED_STREAM)"
                    --> stream_id = 4
    t=33367 [st=0]  HTTP2_SESSION_RECV_HEADERS
                    --> fin = false
                    --> :status: 200
                        server: nginx/1.17.1
                        date: Mon, 28 Oct 2019 12:53:50 GMT
                        content-type: text/html
                        content-length: 614
                        last-modified: Mon, 28 Oct 2019 12:18:43 GMT
                        etag: "5db6dca3-266"
                        accept-ranges: bytes
                    --> stream_id = 3
    t=33368 [st=1]  HTTP2_SESSION_RECV_DATA
                    --> fin = false
                    --> size = 614
                    --> stream_id = 3
    t=33368 [st=1]  HTTP2_SESSION_UPDATE_RECV_WINDOW
                    --> delta = -614
                    --> window_size = 15728008
    t=33368 [st=1]  HTTP2_SESSION_RECV_DATA
                    --> fin = true
                    --> size = 0
                    --> stream_id = 3
    t=33368 [st=1]  HTTP2_SESSION_PING
                    --> is_ack = true
                    --> type = "received"
                    --> unique_id = 1
    t=33368 [st=1]  HTTP2_SESSION_RECV_HEADERS
                    --> fin = false
                    --> :status: 200
                        server: nginx/1.17.1
                        date: Mon, 28 Oct 2019 12:53:50 GMT
                        content-type: text/css
                        content-length: 18
                        last-modified: Mon, 28 Oct 2019 12:18:01 GMT
                        etag: "5db6dc79-12"
                        accept-ranges: bytes
                    --> stream_id = 4
    t=33368 [st=1]  HTTP2_SESSION_RECV_DATA
                    --> fin = false
                    --> size = 18
                    --> stream_id = 4
    t=33368 [st=1]  HTTP2_SESSION_UPDATE_RECV_WINDOW
                    --> delta = -18
                    --> window_size = 15727990
    t=33368 [st=1]  HTTP2_SESSION_UPDATE_RECV_WINDOW
                    --> delta = 18
                    --> window_size = 15728008
    t=33368 [st=1]  HTTP2_SESSION_RECV_DATA
                    --> fin = true
                    --> size = 0
                    --> stream_id = 4
    t=33368 [st=1]  HTTP2_SESSION_UPDATE_RECV_WINDOW
                    --> delta = 614
                    --> window_size = 15728622
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 追尋☆①秒方向 普通会员 1楼

      服务推送(Service Push)是Chrome浏览器的一项功能,它允许网站和服务向其他设备推送内容。然而,如果您的Chrome浏览器无法服务推送,可能是由于以下原因:

      1. 服务器配置问题:确保您的服务器配置正确,服务器需要能够处理HTTP/2协议。您可以在服务器上运行一些命令来检查HTTP/2的支持。

      2. 浏览器设置问题:在Chrome中,您可以在“设置”>“隐私”>“性能”>“安全”中找到“启用服务推送”选项,然后检查是否有任何设置阻止了服务推送。

      3. 兼容性问题:某些浏览器可能不支持HTTP/2协议,导致无法服务推送。您可以尝试更新浏览器到最新版本。

      4. 安全问题:如果您怀疑是安全问题导致的,您可能需要联系服务器提供商或网络服务提供商。

      解决这个问题需要您对您的环境和网络进行检查,并根据需要进行相应的调整。如果您仍然无法解决问题,可能需要联系Chrome开发者团队寻求帮助。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部