Information:

Environment

  • Windows Recorder

 

Symptoms

  • Error Code (14001) Byte Limit Exceeded Error
Solution

You may need to monitor a web page that has video, music, PDF, or other large objects embedded. These objects may be larger than the default byte limits in the Windows Recorder: 10 MB per step, 15 MB per transaction. In these cases, a "14001 Byte Limit Exceeded" error will be triggered.

To avoid such errors, you can partially download these big objects. For example, you can download only the first 1 MB of a Flash video instead of downloading the whole file. To do this, you need to add a Range header [1] in your HTTP request and the target web server must support partial download.

The Range header is introduced in HTTP 1.1 for partial download of any HTTP object. A range header may specify a single range of bytes, or a set of ranges within a single entity. For example, you can use the following header to download the first Mega Byte data of an object:


Header Name: "Range"
Header Value: "bytes=0-1024768"

If your web server supports partial download, then it will return a 206 response code [2] when you successfully download this object partially.

[1] For more detailed information about this Range header, refer to the official document of Hypertext Transfer Protocol 1.1 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35).
[2] For more detailed information about the 206 response code, refer to the official document of Hypertext Transfer Protocol 1.1 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.7).

There are two ways of adding a Range header in the Windows Recorder:

  • Edit the script
  • Add by code


Edit the script to add a Range header

  1. Click the Script icon at the beginning of the Recorder script timeline, then select the Headers tab.
  2. Add a Range header and its value in the Header field.

It is easy to add a Range header in this way, but if you add any special header in the script configuration, it adds that header to all the HTTP requests sent in the script. So if you add a Range header in this way, you may add it to other HTTP requests you don't want to. Therefore, Add from UI is usually used when there is only one object in the test.

Add code to create a Range header

Record a script, save it as a JSON file, then open it with a text editor. Don't save it as a GSL file, because a GSL file is encoded and cannot be edited directly in a text editor.

Add an action as the first action in the script. The following code is an example:

{
"name": "NameOfThisAction",
"eventType": "sendingRequest",
"handler": "if (request.url.indexOf('SomeURLString') != -1){request.addHeader('Range', 'bytes=0-1024768'); }",
"type": "addEventHook"
},

NameOfThisAction is the name of this action. You can change it to whatever you like. SomeURLString is a unique string, a part of the object URL for partial download. After adding this code snippet, when you open your script in the Recorder, you can see a new action called Other.

It is a little clumsy to add a Range header in this way, but you can add this header to the exact object you need.

Root Cause

To protect the available bandwidth of the Dynatrace Synthetic Classic Platform, the default byte limits in a Recorder script are 5 MB per step and 10 MB per transaction.

  • No labels
  1. Anonymous (login to see details)

    Where is the attached picture "RangeHeader.gsl"?

  2. Anonymous (login to see details)

    Hi Phi Phan!

    Is this what you are looking for? See below!

     

  3. Anonymous (login to see details)

    This is a helpful thread!

  4. Anonymous (login to see details)

    One question :

    We have a test with one request to one page, but this page holds a very large number of objects (subrequests).
    I suppose the solution described here will only count for the initial test-request, and not for the requested objects within the test-request ?
    If that's correct. Anyone any idea how to avoid the "14001 Byte Limit Exceeded" error for pages with a lot of subobjects ?

    1. Anonymous (login to see details)

      That is a very good question!

      The method 1"Add from UI" mentioned above will limit the bytes downloaded for all requests/objects made during the test. Not just the first object.

      The example of the header range, range: bytes=0-150000 means to only download the first 150000 bytes (~15KB) of all the objects.

      You can change the range of bytes to a different one which better fits your needs. For example, if the majority of the page objects are less than 50 KB but there are a few that are more than 500 K or 1M, the range can be changed to bytes=0-512000 (500K).

      Let me know if any further question you may have.

  5. Anonymous (login to see details)

    This is helpful thread