HTTP/2 not compatible with filrefox on haproxy 1.8.3?

I read the 1.8.4 release announce ([ANNOUNCE] haproxy-1.8.4) and found this:

  • several H2 minor issues (DATA padding incorrectly accounted for in
    the connection window, DATA frames for closed streams not properly
    accounted, RST sometimes in response to an RST). None of them has
    a real visible impact in practice so I preferred to issue 1.8.4
    first to address the pending issues.

So it seems a “already known issue” and may be fixed on 1.8.5+ ?

I think the only good solution for this is to have your service listen on two different ports, one that listens to HTTP1.X and one that listens to H/2

I’m in a similar situation where i have to support older browsers. I have HAProxy in front of nginx which listens on 80 and 81 (SSL Terminates at HAProxy) andd then a simple decider config would look like:

frontend https
  mode tcp
  bind 0.0.0.0:443 ssl crt /etc/haproxy/certs alpn h2,http/1.1 ecdhe secp384r1
  timeout http-request 10s
  #send all HTTP/2 traffic to a specific backend
  use_backend http2-nodes if { ssl_fc_alpn -i h2 }
  #send HTTP/1.1 and HTTP/1.0 to default, which don't speak HTTP/2
  default_backend http1-nodes

backend http1-nodes
  mode http
  balance roundrobin
  default-server inter 1s fall 2

  server web01 1.1.1.12:80 check send-proxy
  server web03 1.1.1.14:80 check send-proxy


backend http2-nodes
  mode tcp
  balance roundrobin
  default-server inter 1s fall 2

  server web01 1.1.1.12:81 check send-proxy
  server web03 1.1.1.14:81 check send-proxy

Then in Nginx you define two ports, which would look prettty similar in apache or what ever your webserver is.

server {

  listen 80 proxy_protocol;
  listen 81 http2 proxy_protocol;
  server_name www.example.com;
  ...
}

According to our test, chrome 47, 48, 49 are working fine with http2 mode on nginx (Tengine) with h2 support enabled. So you may let the browser connect to nginx directly if using nginx as the reverse proxy is an option in your case.

I do it this way b/c we have hundreds of domains and its easier to manage certs and just have nginx run on server_name _, so we terminate at HAProxy, if you have ssl on nginx, it will auto downgrade to 1.1 if the client does not handle H2. Sorry i put a server name in the example, that was misleading.

No, nginx (Tengine) can talk with chrome 49 using h2 without ANY degradation. See the attachments.

new users can only put one image in a post…

new users can only put one image in a post…
QQ%E5%9B%BE%E7%89%8720180223091718

Fair enough, but that is not my experience, i was specifically testing with IE10(no H2 support) and all other browsers and versions on virtual boxes b/c i work with US governments and have to be sure their antiquated systems work with our stack. . Are you sure Tengine is not acting inappropriately? Also seeing both the relevant portions of the haproxy config and nginx config would go a long way. I’m not on discourse right now, but don’t think both have been posted. I did extensive testing and switched in haproxy 1.7 and have never witnessed this. I don’t doubt your issue, but the configs along with nginx version (tangine version) would likely be helpful. When i was terminating SSL at nginx there was no issue as it downgrades, but putting HAProxy in front of that changes the behaviour.

Hopefully we can help, as this problem is obviously a burden.

Best,
Jeff

Sure, if the browser does not support h2 at all (i.e. IE on XP or Win7), then both haproxy and Tengine will degrade to http/1.1 appropriately.

The problem with us is that HAProxy does not work for some older browsers that support alpn and http2, such as chrome 49 (neither talking with h2 nor downgrade to http / 1.1).

These sub-sites are provided by one of our partners, I will try, but not sure if I can get the detail configurations.

Thanks :slight_smile:

Is there any new progress? Thanks :grin:

We have tried the new 1.8.5 revision. It’s working fine with chrome 48 now. Many Thanks for it. :smiley:

But it still failed on chrome 49:

427: URL_REQUESThttps://demo.wderp.cn/GatherFiles?file_list=%2Flib%2Fshowdown%2Fshowdown.js%7C%2Fjs%2Fcommon%2FAppGlobal.js%7C%2Fjs%2Fcommon%2FSelectBgWin.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseModel.js%7C%2Fjs%2Fmain%2Fmodel%2FDiscussMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAppMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FLpWaitMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FBrowserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FUserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTzTpMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FSiteGeoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRacePartyMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FCostCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRoleMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWfsMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWorkFlowMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTodoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FReportCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAttMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FInstantMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FModelMgr.js%7C%2Fjs%2Fmain%2Fcontroller%2FAppCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBasicSettingCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeWindowMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeQueryFieldMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FSiteGeoCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTzTpCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FCostCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRoleCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRacePartyCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWfsCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWorkflowCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTodoTaskCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FUserCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FReportCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FInstantMessagerCtl.js%7C%2Fjs%2Fmain%2Fview%2FWdmsDeskTop.js%7C%2Fjs%2Fcommon%2FBaseTabPanel.js%7C%2Fjs%2Fcommon%2FBaseTabContentPanel.js%7C%2Fjs%2Fcommon%2FComboTree.js%7C%2Fjs%2Fcommon%2FUploadFileWindow.js%7C%2Fjs%2Fcommon%2FSearchField.js%7C%2Fjs%2Fcommon%2FComboGrid.js%7C%2Fjs%2Fcommon%2FUploadImgResizeSpot.js%7C%2Fjs%2Fcommon%2FUploadImg.js%7C%2Fjs%2Fcommon%2FCompositeField.js%7C%2Fjs%2Fcommon%2FPicView.js%7C%2Fjs%2Fcommon%2FDiscussEditor.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFrameWin.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFramePanel.js%7C%2Fjs%2Fcommon%2FDisplayInfoWin.js%7C%2Fjs%2Fcommon%2FPageTip.js%7C%2Fjs%2Fcommon%2FComboSplitButtnPanel.js%7C%2Fjs%2Fcommon%2FMixSpinnerField.js%7C%2Fjs%2Fcommon%2FShowErrorWin.js%7C%2Fjs%2Fcommon%2FPWSWin.js%7C%2Fjs%2Fcommon%2FWftValueReader.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseWft.js%7C%2Fjs%2Fcommon%2FWindowErrorHandler.js%7C%2Fjs%2Fmain%2Fview%2FAboutWin.js%7C%2Fjs%2Fmain%2Fview%2FWdmsMenu.js%7C%2Fjs%2Fmain%2Fview%2FChangePasswordWin.js%7C%2Fjs%2Fmain%2Fview%2FSetDesktopShortCutsWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTzFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTpFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingSiteFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRaceFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPartyFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingCostCenterFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRoleFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingGroupFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingDetailUserInfoWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditUserNEIWin.js%7C%2Fjs%2Fmain%2Fview%2FWFSManageWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWFSFormWin.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowPanel.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowApproveWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowWin.js%7C%2Fjs%2Fmain%2Fview%2FTodoTasksPanel.js%7C%2Fjs%2Fmain%2Fview%2FInstantMessagePanel.js%7C%2Fjs%2Fmain%2Fview%2FReportCenterPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowShowApproveCommentsWin.js%7C%2Fjs%2Fmain%2Fview%2FReportNameWin.js&common_header=%0D%0A&ver=402770244Start Time: 2018-03-26 19:31:45.468t=56306 [st=  0] +REQUEST_ALIVE  [dt=323]
t=56307 [st=  1]    URL_REQUEST_DELEGATE  [dt=0]
t=56307 [st=  1]   +URL_REQUEST_START_JOB  [dt=322]
                    --> load_flags = 49408 (IGNORE_LIMITS | MAYBE_USER_GESTURE | VERIFY_EV_CERT)
                    --> method = "GET"
                    --> priority = "HIGHEST"
                    --> url = "https://demo.wderp.cn/GatherFiles?file_list=%2Flib%2Fshowdown%2Fshowdown.js%7C%2Fjs%2Fcommon%2FAppGlobal.js%7C%2Fjs%2Fcommon%2FSelectBgWin.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseModel.js%7C%2Fjs%2Fmain%2Fmodel%2FDiscussMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAppMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FLpWaitMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FBrowserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FUserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTzTpMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FSiteGeoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRacePartyMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FCostCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRoleMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWfsMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWorkFlowMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTodoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FReportCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAttMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FInstantMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FModelMgr.js%7C%2Fjs%2Fmain%2Fcontroller%2FAppCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBasicSettingCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeWindowMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeQueryFieldMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FSiteGeoCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTzTpCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FCostCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRoleCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRacePartyCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWfsCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWorkflowCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTodoTaskCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FUserCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FReportCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FInstantMessagerCtl.js%7C%2Fjs%2Fmain%2Fview%2FWdmsDeskTop.js%7C%2Fjs%2Fcommon%2FBaseTabPanel.js%7C%2Fjs%2Fcommon%2FBaseTabContentPanel.js%7C%2Fjs%2Fcommon%2FComboTree.js%7C%2Fjs%2Fcommon%2FUploadFileWindow.js%7C%2Fjs%2Fcommon%2FSearchField.js%7C%2Fjs%2Fcommon%2FComboGrid.js%7C%2Fjs%2Fcommon%2FUploadImgResizeSpot.js%7C%2Fjs%2Fcommon%2FUploadImg.js%7C%2Fjs%2Fcommon%2FCompositeField.js%7C%2Fjs%2Fcommon%2FPicView.js%7C%2Fjs%2Fcommon%2FDiscussEditor.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFrameWin.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFramePanel.js%7C%2Fjs%2Fcommon%2FDisplayInfoWin.js%7C%2Fjs%2Fcommon%2FPageTip.js%7C%2Fjs%2Fcommon%2FComboSplitButtnPanel.js%7C%2Fjs%2Fcommon%2FMixSpinnerField.js%7C%2Fjs%2Fcommon%2FShowErrorWin.js%7C%2Fjs%2Fcommon%2FPWSWin.js%7C%2Fjs%2Fcommon%2FWftValueReader.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseWft.js%7C%2Fjs%2Fcommon%2FWindowErrorHandler.js%7C%2Fjs%2Fmain%2Fview%2FAboutWin.js%7C%2Fjs%2Fmain%2Fview%2FWdmsMenu.js%7C%2Fjs%2Fmain%2Fview%2FChangePasswordWin.js%7C%2Fjs%2Fmain%2Fview%2FSetDesktopShortCutsWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTzFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTpFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingSiteFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRaceFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPartyFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingCostCenterFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRoleFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingGroupFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingDetailUserInfoWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditUserNEIWin.js%7C%2Fjs%2Fmain%2Fview%2FWFSManageWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWFSFormWin.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowPanel.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowApproveWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowWin.js%7C%2Fjs%2Fmain%2Fview%2FTodoTasksPanel.js%7C%2Fjs%2Fmain%2Fview%2FInstantMessagePanel.js%7C%2Fjs%2Fmain%2Fview%2FReportCenterPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowShowApproveCommentsWin.js%7C%2Fjs%2Fmain%2Fview%2FReportNameWin.js&common_header=%0D%0A&ver=402770244"
t=56307 [st=  1]      URL_REQUEST_DELEGATE  [dt=0]
t=56307 [st=  1]      HTTP_CACHE_GET_BACKEND  [dt=0]
t=56307 [st=  1]      HTTP_CACHE_OPEN_ENTRY  [dt=26]
                      --> net_error = -2 (ERR_FAILED)
t=56333 [st= 27]      HTTP_CACHE_CREATE_ENTRY  [dt=22]
t=56355 [st= 49]      HTTP_CACHE_ADD_TO_ENTRY  [dt=0]
t=56355 [st= 49]      URL_REQUEST_DELEGATE  [dt=0]
t=56355 [st= 49]     +HTTP_STREAM_REQUEST  [dt=0]
t=56355 [st= 49]        HTTP_STREAM_REQUEST_STARTED_JOB
                        --> source_dependency = 430 (HTTP_STREAM_JOB)
t=56355 [st= 49]        HTTP_STREAM_REQUEST_BOUND_TO_JOB
                        --> source_dependency = 430 (HTTP_STREAM_JOB)
t=56355 [st= 49]     -HTTP_STREAM_REQUEST
t=56355 [st= 49]     +HTTP_TRANSACTION_SEND_REQUEST  [dt=2]
t=56355 [st= 49]        HTTP_TRANSACTION_HTTP2_SEND_REQUEST_HEADERS
                        --> :authority: demo.wderp.cn
                            :method: GET
                            :path: /GatherFiles?file_list=%2Flib%2Fshowdown%2Fshowdown.js%7C%2Fjs%2Fcommon%2FAppGlobal.js%7C%2Fjs%2Fcommon%2FSelectBgWin.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseModel.js%7C%2Fjs%2Fmain%2Fmodel%2FDiscussMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAppMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FLpWaitMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FBrowserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FUserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTzTpMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FSiteGeoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRacePartyMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FCostCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRoleMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWfsMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWorkFlowMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTodoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FReportCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAttMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FInstantMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FModelMgr.js%7C%2Fjs%2Fmain%2Fcontroller%2FAppCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBasicSettingCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeWindowMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeQueryFieldMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FSiteGeoCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTzTpCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FCostCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRoleCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRacePartyCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWfsCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWorkflowCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTodoTaskCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FUserCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FReportCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FInstantMessagerCtl.js%7C%2Fjs%2Fmain%2Fview%2FWdmsDeskTop.js%7C%2Fjs%2Fcommon%2FBaseTabPanel.js%7C%2Fjs%2Fcommon%2FBaseTabContentPanel.js%7C%2Fjs%2Fcommon%2FComboTree.js%7C%2Fjs%2Fcommon%2FUploadFileWindow.js%7C%2Fjs%2Fcommon%2FSearchField.js%7C%2Fjs%2Fcommon%2FComboGrid.js%7C%2Fjs%2Fcommon%2FUploadImgResizeSpot.js%7C%2Fjs%2Fcommon%2FUploadImg.js%7C%2Fjs%2Fcommon%2FCompositeField.js%7C%2Fjs%2Fcommon%2FPicView.js%7C%2Fjs%2Fcommon%2FDiscussEditor.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFrameWin.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFramePanel.js%7C%2Fjs%2Fcommon%2FDisplayInfoWin.js%7C%2Fjs%2Fcommon%2FPageTip.js%7C%2Fjs%2Fcommon%2FComboSplitButtnPanel.js%7C%2Fjs%2Fcommon%2FMixSpinnerField.js%7C%2Fjs%2Fcommon%2FShowErrorWin.js%7C%2Fjs%2Fcommon%2FPWSWin.js%7C%2Fjs%2Fcommon%2FWftValueReader.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseWft.js%7C%2Fjs%2Fcommon%2FWindowErrorHandler.js%7C%2Fjs%2Fmain%2Fview%2FAboutWin.js%7C%2Fjs%2Fmain%2Fview%2FWdmsMenu.js%7C%2Fjs%2Fmain%2Fview%2FChangePasswordWin.js%7C%2Fjs%2Fmain%2Fview%2FSetDesktopShortCutsWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTzFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTpFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingSiteFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRaceFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPartyFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingCostCenterFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRoleFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingGroupFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingDetailUserInfoWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditUserNEIWin.js%7C%2Fjs%2Fmain%2Fview%2FWFSManageWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWFSFormWin.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowPanel.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowApproveWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowWin.js%7C%2Fjs%2Fmain%2Fview%2FTodoTasksPanel.js%7C%2Fjs%2Fmain%2Fview%2FInstantMessagePanel.js%7C%2Fjs%2Fmain%2Fview%2FReportCenterPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowShowApproveCommentsWin.js%7C%2Fjs%2Fmain%2Fview%2FReportNameWin.js&common_header=%0D%0A&ver=402770244
                            :scheme: https
                            accept: */*
                            accept-encoding: gzip, deflate, sdch
                            accept-language: zh-CN,zh;q=0.8
                            cookie: [53 bytes were stripped]
                            referer: https://demo.wderp.cn/main.html
                            user-agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
t=56357 [st= 51]     -HTTP_TRANSACTION_SEND_REQUEST
t=56357 [st= 51]     +HTTP_TRANSACTION_READ_HEADERS  [dt=80]
t=56437 [st=131]        HTTP2_STREAM_ERROR
                        --> description = "ABANDONED (stream_id=65): https://demo.wderp.cn/GatherFiles?file_list=%2Flib%2Fshowdown%2Fshowdown.js%7C%2Fjs%2Fcommon%2FAppGlobal.js%7C%2Fjs%2Fcommon%2FSelectBgWin.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseModel.js%7C%2Fjs%2Fmain%2Fmodel%2FDiscussMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAppMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FLpWaitMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FBrowserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FUserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTzTpMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FSiteGeoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRacePartyMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FCostCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRoleMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWfsMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWorkFlowMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTodoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FReportCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAttMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FInstantMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FModelMgr.js%7C%2Fjs%2Fmain%2Fcontroller%2FAppCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBasicSettingCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeWindowMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeQueryFieldMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FSiteGeoCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTzTpCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FCostCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRoleCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRacePartyCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWfsCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWorkflowCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTodoTaskCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FUserCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FReportCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FInstantMessagerCtl.js%7C%2Fjs%2Fmain%2Fview%2FWdmsDeskTop.js%7C%2Fjs%2Fcommon%2FBaseTabPanel.js%7C%2Fjs%2Fcommon%2FBaseTabContentPanel.js%7C%2Fjs%2Fcommon%2FComboTree.js%7C%2Fjs%2Fcommon%2FUploadFileWindow.js%7C%2Fjs%2Fcommon%2FSearchField.js%7C%2Fjs%2Fcommon%2FComboGrid.js%7C%2Fjs%2Fcommon%2FUploadImgResizeSpot.js%7C%2Fjs%2Fcommon%2FUploadImg.js%7C%2Fjs%2Fcommon%2FCompositeField.js%7C%2Fjs%2Fcommon%2FPicView.js%7C%2Fjs%2Fcommon%2FDiscussEditor.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFrameWin.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFramePanel.js%7C%2Fjs%2Fcommon%2FDisplayInfoWin.js%7C%2Fjs%2Fcommon%2FPageTip.js%7C%2Fjs%2Fcommon%2FComboSplitButtnPanel.js%7C%2Fjs%2Fcommon%2FMixSpinnerField.js%7C%2Fjs%2Fcommon%2FShowErrorWin.js%7C%2Fjs%2Fcommon%2FPWSWin.js%7C%2Fjs%2Fcommon%2FWftValueReader.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseWft.js%7C%2Fjs%2Fcommon%2FWindowErrorHandler.js%7C%2Fjs%2Fmain%2Fview%2FAboutWin.js%7C%2Fjs%2Fmain%2Fview%2FWdmsMenu.js%7C%2Fjs%2Fmain%2Fview%2FChangePasswordWin.js%7C%2Fjs%2Fmain%2Fview%2FSetDesktopShortCutsWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTzFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTpFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingSiteFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRaceFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPartyFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingCostCenterFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRoleFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingGroupFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingDetailUserInfoWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditUserNEIWin.js%7C%2Fjs%2Fmain%2Fview%2FWFSManageWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWFSFormWin.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowPanel.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowApproveWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowWin.js%7C%2Fjs%2Fmain%2Fview%2FTodoTasksPanel.js%7C%2Fjs%2Fmain%2Fview%2FInstantMessagePanel.js%7C%2Fjs%2Fmain%2Fview%2FReportCenterPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowShowApproveCommentsWin.js%7C%2Fjs%2Fmain%2Fview%2FReportNameWin.js&common_header=%0D%0A&ver=402770244"
                        --> status = -100
                        --> stream_id = 65
t=56437 [st=131]        HTTP_TRANSACTION_RESTART_AFTER_ERROR
                        --> net_error = -100 (ERR_CONNECTION_CLOSED)
t=56437 [st=131]     -HTTP_TRANSACTION_READ_HEADERS
t=56437 [st=131]     +HTTP_STREAM_REQUEST  [dt=104]
t=56437 [st=131]        HTTP_STREAM_REQUEST_STARTED_JOB
                        --> source_dependency = 431 (HTTP_STREAM_JOB)
t=56541 [st=235]        HTTP_STREAM_REQUEST_BOUND_TO_JOB
                        --> source_dependency = 431 (HTTP_STREAM_JOB)
t=56541 [st=235]     -HTTP_STREAM_REQUEST
t=56541 [st=235]     +HTTP_TRANSACTION_SEND_REQUEST  [dt=2]
t=56541 [st=235]        HTTP_TRANSACTION_HTTP2_SEND_REQUEST_HEADERS
                        --> :authority: demo.wderp.cn
                            :method: GET
                            :path: /GatherFiles?file_list=%2Flib%2Fshowdown%2Fshowdown.js%7C%2Fjs%2Fcommon%2FAppGlobal.js%7C%2Fjs%2Fcommon%2FSelectBgWin.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseModel.js%7C%2Fjs%2Fmain%2Fmodel%2FDiscussMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAppMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FLpWaitMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FBrowserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FUserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTzTpMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FSiteGeoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRacePartyMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FCostCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRoleMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWfsMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWorkFlowMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTodoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FReportCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAttMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FInstantMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FModelMgr.js%7C%2Fjs%2Fmain%2Fcontroller%2FAppCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBasicSettingCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeWindowMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeQueryFieldMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FSiteGeoCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTzTpCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FCostCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRoleCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRacePartyCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWfsCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWorkflowCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTodoTaskCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FUserCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FReportCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FInstantMessagerCtl.js%7C%2Fjs%2Fmain%2Fview%2FWdmsDeskTop.js%7C%2Fjs%2Fcommon%2FBaseTabPanel.js%7C%2Fjs%2Fcommon%2FBaseTabContentPanel.js%7C%2Fjs%2Fcommon%2FComboTree.js%7C%2Fjs%2Fcommon%2FUploadFileWindow.js%7C%2Fjs%2Fcommon%2FSearchField.js%7C%2Fjs%2Fcommon%2FComboGrid.js%7C%2Fjs%2Fcommon%2FUploadImgResizeSpot.js%7C%2Fjs%2Fcommon%2FUploadImg.js%7C%2Fjs%2Fcommon%2FCompositeField.js%7C%2Fjs%2Fcommon%2FPicView.js%7C%2Fjs%2Fcommon%2FDiscussEditor.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFrameWin.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFramePanel.js%7C%2Fjs%2Fcommon%2FDisplayInfoWin.js%7C%2Fjs%2Fcommon%2FPageTip.js%7C%2Fjs%2Fcommon%2FComboSplitButtnPanel.js%7C%2Fjs%2Fcommon%2FMixSpinnerField.js%7C%2Fjs%2Fcommon%2FShowErrorWin.js%7C%2Fjs%2Fcommon%2FPWSWin.js%7C%2Fjs%2Fcommon%2FWftValueReader.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseWft.js%7C%2Fjs%2Fcommon%2FWindowErrorHandler.js%7C%2Fjs%2Fmain%2Fview%2FAboutWin.js%7C%2Fjs%2Fmain%2Fview%2FWdmsMenu.js%7C%2Fjs%2Fmain%2Fview%2FChangePasswordWin.js%7C%2Fjs%2Fmain%2Fview%2FSetDesktopShortCutsWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTzFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTpFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingSiteFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRaceFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPartyFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingCostCenterFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRoleFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingGroupFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingDetailUserInfoWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditUserNEIWin.js%7C%2Fjs%2Fmain%2Fview%2FWFSManageWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWFSFormWin.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowPanel.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowApproveWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowWin.js%7C%2Fjs%2Fmain%2Fview%2FTodoTasksPanel.js%7C%2Fjs%2Fmain%2Fview%2FInstantMessagePanel.js%7C%2Fjs%2Fmain%2Fview%2FReportCenterPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowShowApproveCommentsWin.js%7C%2Fjs%2Fmain%2Fview%2FReportNameWin.js&common_header=%0D%0A&ver=402770244
                            :scheme: https
                            accept: */*
                            accept-encoding: gzip, deflate, sdch
                            accept-language: zh-CN,zh;q=0.8
                            cookie: [53 bytes were stripped]
                            referer: https://demo.wderp.cn/main.html
                            user-agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
t=56543 [st=237]     -HTTP_TRANSACTION_SEND_REQUEST
t=56543 [st=237]     +HTTP_TRANSACTION_READ_HEADERS  [dt=86]
t=56629 [st=323]        HTTP2_STREAM_ERROR
                        --> description = "ABANDONED (stream_id=1): https://demo.wderp.cn/GatherFiles?file_list=%2Flib%2Fshowdown%2Fshowdown.js%7C%2Fjs%2Fcommon%2FAppGlobal.js%7C%2Fjs%2Fcommon%2FSelectBgWin.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseModel.js%7C%2Fjs%2Fmain%2Fmodel%2FDiscussMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAppMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FLpWaitMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FBrowserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FUserMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTzTpMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FSiteGeoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRacePartyMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FCostCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FRoleMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWfsMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FWorkFlowMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FTodoMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FReportCenterMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FAttMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FInstantMessageMgr.js%7C%2Fjs%2Fmain%2Fmodel%2FModelMgr.js%7C%2Fjs%2Fmain%2Fcontroller%2FAppCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBasicSettingCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeWindowMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FBModeQueryFieldMgrCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FSiteGeoCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTzTpCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FCostCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRoleCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FRacePartyCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWfsCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FWorkflowCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FTodoTaskCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FUserCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FReportCenterCtl.js%7C%2Fjs%2Fmain%2Fcontroller%2FInstantMessagerCtl.js%7C%2Fjs%2Fmain%2Fview%2FWdmsDeskTop.js%7C%2Fjs%2Fcommon%2FBaseTabPanel.js%7C%2Fjs%2Fcommon%2FBaseTabContentPanel.js%7C%2Fjs%2Fcommon%2FComboTree.js%7C%2Fjs%2Fcommon%2FUploadFileWindow.js%7C%2Fjs%2Fcommon%2FSearchField.js%7C%2Fjs%2Fcommon%2FComboGrid.js%7C%2Fjs%2Fcommon%2FUploadImgResizeSpot.js%7C%2Fjs%2Fcommon%2FUploadImg.js%7C%2Fjs%2Fcommon%2FCompositeField.js%7C%2Fjs%2Fcommon%2FPicView.js%7C%2Fjs%2Fcommon%2FDiscussEditor.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFrameWin.js%7C%2Fjs%2Fcommon%2FQueryEditorWithIFramePanel.js%7C%2Fjs%2Fcommon%2FDisplayInfoWin.js%7C%2Fjs%2Fcommon%2FPageTip.js%7C%2Fjs%2Fcommon%2FComboSplitButtnPanel.js%7C%2Fjs%2Fcommon%2FMixSpinnerField.js%7C%2Fjs%2Fcommon%2FShowErrorWin.js%7C%2Fjs%2Fcommon%2FPWSWin.js%7C%2Fjs%2Fcommon%2FWftValueReader.js%7C%2Fjs%2Fmain%2Fmodel%2FBaseWft.js%7C%2Fjs%2Fcommon%2FWindowErrorHandler.js%7C%2Fjs%2Fmain%2Fview%2FAboutWin.js%7C%2Fjs%2Fmain%2Fview%2FWdmsMenu.js%7C%2Fjs%2Fmain%2Fview%2FChangePasswordWin.js%7C%2Fjs%2Fmain%2Fview%2FSetDesktopShortCutsWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTzFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingTpFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingSiteFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRaceFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPartyFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingCostCenterFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingRoleFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingGroupFormWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingDetailUserInfoWin.js%7C%2Fjs%2Fmain%2Fview%2FBasicSettingPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditUserNEIWin.js%7C%2Fjs%2Fmain%2Fview%2FWFSManageWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWFSFormWin.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowPanel.js%7C%2Fjs%2Fmain%2Fview%2FWorkFlowApproveWin.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowWin.js%7C%2Fjs%2Fmain%2Fview%2FTodoTasksPanel.js%7C%2Fjs%2Fmain%2Fview%2FInstantMessagePanel.js%7C%2Fjs%2Fmain%2Fview%2FReportCenterPanel.js%7C%2Fjs%2Fmain%2Fview%2FEditWorkFlowShowApproveCommentsWin.js%7C%2Fjs%2Fmain%2Fview%2FReportNameWin.js&common_header=%0D%0A&ver=402770244"
                        --> status = -100
                        --> stream_id = 1
t=56629 [st=323]     -HTTP_TRANSACTION_READ_HEADERS
                      --> net_error = -100 (ERR_CONNECTION_CLOSED)
t=56629 [st=323]   -URL_REQUEST_START_JOB
                    --> net_error = -100 (ERR_CONNECTION_CLOSED)
t=56629 [st=323]    URL_REQUEST_DELEGATE  [dt=0]
t=56629 [st=323] -REQUEST_ALIVE
                  --> net_error = -100 (ERR_CONNECTION_CLOSED)

Compared to the previous -3 (ERR_ABORTED), this time the error code becomes -100 (ERR_CONNECTION_CLOSED).

We found that the h2 implementation of HAProxy 1.8.5 is also incompatible with WebKit. In
the latest version of Huawei Mate 10 (Android 8.0 update: 2018-03-01)
built-in browser, It shows the exact same symptoms as Chrome 49.

The Browser’s User Agent string is:

Mozilla/5.0 (Linux; Android 8.0.0; ALP-AL00 Build/HUAWEIALP-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36

It seems on the new flagship model with latest firmware still has this compatibility issues. Can it rise the priority of this issue?

Thanks :slight_smile:

ASBai i’m extremely thankful for all your updates and everything you’ve shared here. i have found the exact same problem of http/2 not being compatible with filrefox on haproxy! will try some ideas i found here but wanted to ask if you don’t mind me asking questions? thanks!

I also have the h2 problem with Chome 49 on Windows XP. It is old but sadly we have a lot of clients that still use it.
Sadly we have to fall back to http1.1. It is great if you can have it fixed on the next release

I believe the firefox compatibility issue has been fixed by the 1.8.4 revision. You may try it and see what’s happen. :slight_smile:

Of course, we can discuss any related questions here :smiley:

We tried the 1.8.7 revision and the same problem still exists. :frowning:

1.8.9 still has the same problem …

I’ve found the root of the rest problem: The max length of url has very strict limitation under the h2 mode on some old versions of the chrome blink engine. Even if the same url just working fine under the http/1.1 mode with the exactly same blink engine.

For example: We have an url with 2713 bytes of length, and it is not working under h2 mode for the chrome 49.

The solution is very simple: Just shrink the url length. For example, we have a function deal with the js file batch loading, here is the pseudo code to cover this problem:

function BatchLoadJs(gstJsList)
{
    // gstJsList is an array of js files, like: ["a.js", "b.js", "c.js", ...]
    // Let's assume there is 90 files in it: gstJsList.length == 90

    try
    {
        // Load all file listed in gstJsList at one shoot;
    }
    cache (e)
    {
        // Load files listed in gstJsList by 9 rounds with 10 files per round
        // Don't use the browser's agent sting to make the decision, because
        // it is not accurate: some third party browser base on the blink engine 
        // does not show the "chrome" on it (e.g.: The official browser of HUAWEI
        // mobile phone). 
    }
}

We are using HAProxy 1.8.13 now, and in conjunction with the above solution, it successfully passed all of our compatibility tests. And no more browser compatibility complaints so far.

1 Like

Based on this and an additional report with large cookies triggering the same issue, I reproduced and analyzed the issue.

This is happening because haproxy currently lacks support for the H2 CONTINUATION frame, and Chrome 49 and older stupidly cap the frame control size to 1024 byte. I reported this to Willy/the mailing list:

https://www.mail-archive.com/haproxy@formilux.org/msg31134.html

CONTINUATION is supported since v1.9.2 and it fixes this issue.

1 Like