HTTP2_PROTOCOL_ERROR with Azure CDN

Jeremy Schotte 26 Reputation points
2023-07-27T12:34:21.5533333+00:00

Hello,

We have an issue with our CDN since few months.
At random time from random location we cannot access the CDN and got an "HTTP2_PROTOCOL_ERROR" error after a timeout of 1 minute.
But there isn't any issue to access the appservice url directly.

Thanks for your help

Jérémy

Azure Content Delivery Network
Azure App Service
Azure App Service
Azure App Service is a service used to create and deploy scalable, mission-critical web apps.
7,901 questions
{count} vote

Accepted answer
  1. GitaraniSharma-MSFT 49,581 Reputation points Microsoft Employee
    2023-07-27T12:58:19.7733333+00:00

    Hello @Jeremy Schotte

    Welcome to Microsoft Q&A Platform. Thank you for reaching out & hope you are doing well.

    I understand that you have an azure app service and an Azure CDN in front of it and when trying to load the next assets, intermittently you receive an ERR::HTTP2_PROTOCOL_ERROR.

    Let us first understand what is ERR_HTTP2_PROTOCOL_ERROR?

    This error happens when a client browser has network issues that interrupt the request/response, and the browser fails to read the response due to the network issues, or the response received had an HTTP protocol problem that the browser was unable to interpret. These are typically client-side issues that are related to bugs in individual browsers and using a different browser will clear up the problem. However, sometimes the received response itself has issues. When this happens usually the issue is reproducible and happens in different browsers on different machines using a variety of operating systems.

    To troubleshoot this issue, we would need to collect logs and identify the cause.

    We can use netlogs generated from the browser to identify the reason for these errors. To capture this data, follow these steps:

    • Open a new tab and go to chrome://net-export/
    • Select include raw bytes to see all the data in the stream.
    • Click the "Start Logging To Disk" button. It will create a json file, select a directory/path where you would like to save these logs to.
    • A lot of data is generated using this option, so be sure to set a maximum log size. enter image description here enter image description here
    • Reproduce the network problem in a different tab (the chrome://net-export/ tab needs to stay open or logging will automatically stop.)
    • Click Stop Logging button.

    Once you've the logs ready, please share them over email to us and we will take a look.

    Requested you to send an email with subject line "ATTN gishar | Getting ERR::HTTP2_PROTOCOL_ERROR on Azure CDN using React App" to AzCommunity[at]Microsoft[dot]com with the following details, I will follow-up with you.

    • Reference this Q&A thread
    • Your Azure Subscription ID
    • Attach the collected logs

    This was done in another thread : https://learn.microsoft.com/en-us/answers/questions/1319859/getting-err-http2-protocol-error-on-azure-cdn-usin

    And you shared the requested logs as advised.

    I investigated the logs and found the below error:

    HTTP2_SESSION_RECV_RST_STREAM
    --> error_code = "2 (INTERNAL_ERROR)"
    --> stream_id = 3
    "description":"Server reset stream.","net_error":"ERR_HTTP2_PROTOCOL_ERROR","stream_id":3
    

    I performed a CURL on your origin URL which was resulting in error.

    And from the CURL, we could see that you were getting HTTP 206 Partial Content instead of 200.

    The Content-Range header was set to bytes 0-352716/352717 but the data received by CDN was just 101 KB.

    The size of the response was 101 KB, but the Content-Range header indicated that the response size should be about 352 KB. When CDN gets this header, it expects the origin to send 352 KB. It quickly gets 101 KB, and then waits for the rest. It eventually times out while waiting for the origin to deliver the rest of the response.

    There was a similar thread on this issue in the past: Intermittent ERR_HTTP2_PROTOCOL_ERROR / HTTP2_STREAM_ERROR / Server reset stream on App Service with Azure Front Door - Microsoft Q&A

    The customers created support cases for these issues, so, I checked internally and found the below solution shared by the backend team for this issue:

    Issue Description:

    [Invalid range header] - http2 protocol error through CDN

    Cause:

    Problem is not with CDN but rather with the customer origin. If CDN sends a range request to the origin and the origin compresses the response (e.g., with gzip), the origin returns an incorrect Content-Range header.

    Resolution:

    The customer must fix their origin to send a correct Content-Range header.

    The customer can do one of the following as a work-around:

    • Disable caching in their CDN profile. This will cause CDN to not send range requests to the origin.
    • Change the origin to ignore range requests (treating them as regular non-range requests and returning 200s instead of 206s).
    • Disable compression at the origin.

    Hence, requested you to try one of the above workarounds.

    You used the solution of ignoring range request and it seems to work on your preprod CDN and confirmed that the issue is now fixed.

    Kindly let us know if the above helps or you need further assistance on this issue.


    Please "Accept the answer" if the information helped you. This will help us and others in the community as well.

    2 people found this answer helpful.

4 additional answers

Sort by: Most helpful
  1. Deleted

    This answer has been deleted due to a violation of our Code of Conduct. The answer was manually reported or identified through automated detection before action was taken. Please refer to our Code of Conduct for more information.


    Comments have been turned off. Learn more

  2. Deleted

    This answer has been deleted due to a violation of our Code of Conduct. The answer was manually reported or identified through automated detection before action was taken. Please refer to our Code of Conduct for more information.


    Comments have been turned off. Learn more

  3. Deleted

    This answer has been deleted due to a violation of our Code of Conduct. The answer was manually reported or identified through automated detection before action was taken. Please refer to our Code of Conduct for more information.


    Comments have been turned off. Learn more

  4. Clement Fayol 20 Reputation points
    2023-10-11T09:22:30.3633333+00:00

    Hello

    I'm experimenting the same issue.

    I have a Next.js app running on a app service azure. Accessing it directly works.

    I have a frontdoor CDN configured with two routes that point to this application :

    • one is configured without caching and compressing, and it works
    • the other is configured with cache and it don't load my javascript files. I got the err_http2_protocol_error on some files. But when i curl directly on those URL, it works fine and fast.

    @GitaraniSharma-MSFT can I send you by email the net-export too ?


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.