Caché Documentation 
Caché 5.0.17 Release Notes


Welcome and thank you for using Caché, the post-relational database. This document provides a listing of changes between Caché 5.0.16 and Caché 5.0.17.

For detailed information on getting started, see the Caché 5.0 Release Notes (located off the Caché installation directory in the file Docs/GCRN/GCRN.html); for information on previous 5.0 maintenance kits, see the file prenotes.htm.

This document contains several sections:
InterSystems advises all users to recompile their applications as part of the upgrade process so as to take advantage of all the performance improvements as well as other changes that may affect them in this release.
Known Regressions In Functionality
The following regressions in functionality are known to exist in this release and may adversely affect applications. If you need an immediate correction for any of these defects, please contact the InterSystems Worldwide Response Center.

They will be fixed in a future maintenance release.


Important Caché News, Alerts and Advisories
From time to time, InterSystems publishes items of immediate importance to users of our software. These include alerts, mission critical issues, important updates, fixes, and releases of Caché.

The most current list can be obtained from the InterSystems Website.

Users should check this list periodically to obtain the latest information on issues that may have an effect on the operation of their site.


Online Documentation
As a convenience to our users, InterSystems provides online access to documentation for recent versions of Caché at the InterSystems Website.

From the home page choose the "Caché" tab, and on the "Downloads" menu, select "Documentation and Help Updates" or follow this link.


Description of a Change Report
To help you assess the impact of these changes on your applications, each change description contains a more detailed explanation of the modification.
All changes include a table giving pertinent information on the issue's likelihood, impact of the change, and whether this has already been used successfully in production by other customers. In order to make the information easy to assimilate visually, the tabular information has been simplified to a keyword or two and a value. The full explanation of the keyword meanings are:
Critical Changes In This Release



Category: Misc
Platforms: All
DevKey: RJW970
Summary: Cstat shows a dead process as alive if Windows has reused the process id

Description:

Prior to this change, it was possible for cstat to show a dead process as alive (that is, no "D" indicator in the pid table display) if the process Id had been reused by the operating system for a new process.

Cstat now performs further tests to insure that the process is running cache.exe from the configuration's bin directory before considering it a valid Caché process in the current configuration.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Misc
Platforms: All
DevKey: SAP388
Summary: Correct access violation in mailbox broadcast

Description:

This change corrects a situation where, under certain circumstances, an attempt to send a broadcast message to all mailboxes could result in an access violation error.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Object
Platforms: All
DevKey: DLP1445
Summary: %IsModified and IDKey Integers

Description:

A correction has been made for the situation where an object ID based on a simple integer property might be inappropriately detected as modified when set to itself. For example, 'set obj.Prop=6' would report the object as modified when the original value of obj.Prop had previously been 6.

Likelihood Low
Risk Low
Ad Hoc Yes
Enhancement No



Category: Object.Class Compiler
Platforms: All
DevKey: MAK804
Summary: If an error occurs when importing an XML class definition, keep the old class

Description:

Prior to this change, if you had a class on your system, and then an attempt to import another version of that class failed, Caché would delete the existing class. Now it correctly leaves the existing class present if there during import.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Object.Storage
Platforms: All
DevKey: DLP1353
Summary: EXTENTSIZE loading restored

Description:

A prior change discarded the value of the EXTENTSIZE parameter when loading a class from XML or CDL. This change reverses that. If you are replacing an existing class with XML or CDL that does NOT contain EXTENTSIZE the EXTENTSIZE of the replaced class will be retained.

Likelihood Low
Risk Low
Ad Hoc Yes
Enhancement No



Category: Object.Storage.Default
Platforms: All
DevKey: DLP1319
Summary: Optional OID uniqueness checking added

Description:

A new configuration option now makes it possible to validate system-assigned ID values for new instances of objects. The option is activated by
SET ^%SYS("dbms","validate system-assigned id") = 1
Classes using default storage and system-assigned IDs do not normally check for the existence of an object with the newly assigned ID value. That check is, under normal circumstances, not necessary as the global reference used for the system ID counter is updated each time a new object is inserted into the extent. However, in very rare cases, it is possible for this counter to contain an incorrect value. This can happen if the user modifies the value manually; if objects are inserted into the extent without using the object or SQL filer; or system recovery efforts modify this value and are subject to errors.

By setting the configuration option, the class compiler will generate a uniqueness check on insert for the ID value. If at runtime the uniqueness constraint fails, an error, IDKeyCounterNotValid, will be returned to the caller and a message will be written to the console log. Each failure will also cause the ID counter to be incremented so it is possible that the problem will correct itself over time. It is important to review the console log when this error is reported .

In certain deeply nested object models, it is possible that the underlying error message will not be reported. Rather, a cyclical dependency error could be reported from %Save(). This is not the usual case but, when a cyclical dependency error is reported, one possible cause might be the IDKeyCounterNotValid condition.

When an IDKeyCounterNotValid error message is reported it will be necessary to bring the ID counter back into sync with the data. It is the responsibility of the application developer or administrator to determine how the counter became invalid (manually set by a user or by code not using object encapsulation, bad recovery of a journal file, disk failure, etc.). The correction for the error condition depends on how the data and counter were caused to be out of sync.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: SQL
Platforms: All
DevKey: DPV2289
Summary: For SQL INSERT, Start transaction prior to default value allocations

Description:

During SQL INSERT, if the SQL filer needs to start a transaction, the transaction will now start earlier in the filer than it used to. The transaction will now start before any default values are assigned, including the $Increment(^glo) default value of the RowID field (if applicable). This allows the $Increment of any globals in default values to be recorded in the journal file.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: SQL
Platforms: All
DevKey: DPV2301
Summary: Conditionally report error if RowID counter is out-of-synch

Description:

This is the SQL counterpart to DLP1319. Please see that item for details.

The condition will be reported as an error code of -119.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: SQL
Platforms: All
DevKey: DPV2419
Summary: %r and default parameter for device

Description:

The default file parameters when sending the output of %r to a file are now "WNS".

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: SQL
Platforms: All
DevKey: DPV2422
Summary: Correct duplicate cached query problem

Description:

A problem has been corrected where under certain rare circumstances the same cached query routine could be associated with and invoked by two different SQL statements.

Likelihood Low
Risk Low
Ad Hoc Yes
Enhancement No



Category: SQL.Query Processing
Platforms: All
DevKey: PVA080
Summary: Join condition following IN type condition on each of its operands produces wrong result

Description:

An error has been fixed where certain queries could return the wrong answer. The type of query affected contains these phrases:

and also the condition, col1 = col2, is true.

The problem may occur whether col1 and col2 come from the same table or different tables. Also, the IN condition could also be "(col1=? or col1=? or ...)" and similarly for col2.

Other conditions can occur before or after these, or in between them. However, if the join condition occurs before at least one of the IN conditions, the problem doesn't happen.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Studio
Platforms: All
DevKey: AGC304
Summary: Studio COS Parser - support $ZLIST and other legacy functions

Description:

The Studio COS parser now colors legacy list functions: $ZLENGTH, $ZLIST, $ZELEMENT, and $ZSUBLIST.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Studio
Platforms: All
DevKey: DVU1044
Summary: New menu item: Add to Source Control

Description:

Added Tools->Source Control->Add to the Source Control menu item which will cause to add the active document to source control.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Studio
Platforms: All
DevKey: JN289
Summary: Support #[]# syntax in CacheHTML

Description:

A previous change introduced support for the new #[]# syntax, which allows ObjectScript commands to be embedded. This adds it to the &html(...) processor.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Studio
Platforms: All
DevKey: MAK1002
Summary: Two periods appear in mac file when load from XML

Description:

In prior versions, importing a routine from Studio was not working correctly because Studio lost the extension type of the item it had imported. The item would be imported correctly but it would not get compiled. This is now fixed.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Studio
Platforms: All
DevKey: MAK1082
Summary: Improve error message from Studio GetStatus hook

Description:

When an attempt to lock an item calls the studio hook in the 'GetStatus' method, Caché now uses more information in returning an error code to the caller.

Prior to this, Caché would always report that the item was not checked out of source control. Now it only reports this is if the 'isinsourcecontrol' argument is true; otherwise it just reports that this item is not editable.

Also if a username is returned from the GetStatus call, this is displayed as part of the error text.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Studio
Platforms: All
DevKey: MAK1145
Summary: BAS routines not compiled on load from Studio

Description:

This change fixes a problem importing and compiling a BAS routine. It also improves support for importing large numbers of items into Studio.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Studio
Platforms: All
DevKey: MAK1205
Summary: Allow open dialog to respond faster in namespace with huge numbers of routines

Description:

The Studio Open dialog displays items sorted case insensitively. When a user opens up a namespace with a huge number of routines, Studio must scan the whole list to find the correct order to place these routines in. This can cause delays when there are hundreds of thousands of routines in a namespace. In order to allow these namespaces to be usable you can now set a flag:
Set ^SYS("Studio","CaseInsensitive")=1
This will force Studio in this namespace to work in a case insensitive manner which allows it to list the items as they are found rather than having to sort them all first. The routines are all listed at the root level rather than the standard approach which is the list routines from a class compile along with that class.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Studio
Platforms: All
DevKey: MAK974
Summary: Improvements to source control hooks

Description:

This change modifies the import/export functions so that they will also call the source control hooks when a user imports items. This permits the source control hooks to export them to a source control system.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement Yes



Category: System
Platforms: All
DevKey: CDS388
Summary: Ignore $HALT for error HALTs

Description:

When a process has set $HALT, it should be effective only for normal process termination. This fix corrects a problem that caused the system to attempt to locate and run the $HALT routine in situations such as RESJOB and system errors when the process should be halted immediately without attempting the $HALT.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: CDS656
Summary: Fix %STACK $ZU(41,n) when routine has changed

Description:

The %STACK debugger utility could display unprintable characters if the routine object code is modified while the routine is being debugged. This is no longer the case.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: CDS659
Summary: Fix bad routine context after $HALT trap

Description:

If a routine sets $HALT to an entry point in a different routine, and the halt trap returns back to the original routine because of a QUIT command or a trapped error, the original routine context is not restored correctly. Prior to this change, this situation could cause invalid execution results or memory access violations.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: CDS665
Summary: Fix error processing crash when routine source unavailable

Description:

A memory access violation could occur during error processing if there was an unexpected additional error while trying to read the routine source. With this fix, the system will continue without providing source information about the original error.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: JO1909
Summary: Fix deadly embrace in system function

Description:

This changes corrects a rare problem where Caché may get suspended in a system function while holding database blocks under a lock.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: JO1926
Summary: Eliminate <EDITED> error for changed callers

Description:

A problem which could cause an exception (core file, dump file, etc) where an <EDITED> error should have been generated has been resolved. This involved cases where the program is returning after evaluating the result of an indirection that involved invoking another routine and the routine it is returning to has been recompiled. An example of where this could occur is a reference of the form:
 Set str="name($$ent(123))"
 Set x=@str
where $$ent goes off to another routine which causes the calling routine to be recompiled.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: Windows
DevKey: LFT1371
Summary: Handle Windows process table expansion correctly

Description:

This fixes possible access violations during shutdown in situations where the process table has been expanding. This is on Windows only.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: LFT1446
Summary: Fix Unicode problem in $zobjexport

Description:

This correct a problem in $zobjexport with exporting long strings in a Unicode encoding.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: LRS771
Summary: New $System.Device methods

Description:

New $System.Device class methods have been implemented. Descriptions are available in the %SYSTEM package class documentation. In summary:


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: UNIX, Linux
DevKey: LRS947
Summary: Fix startup node name detection on UNIX for DHCP

Description:

A problem with the Caché node name recognition has been fixed. This only affected UNIX/Linux systems which connect to a DHCP name server. After an abnormal system shutdown, Caché startup could believe the instance was still in use by another node.

Correct utilization of the unique node name mechanism requires that the 'ccontrol nodename <name>' command be used to assign a unique name to the local node/machine, and that no instance of Caché should be active when the node name is assigned or modified.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: RFD097
Summary: Allow "0" process count in PATROL

Description:

Allow users to select "0" process count for less overhead in collection.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: RFD101
Summary: Enable system-only MONITOR statistics for ^PATROL

Description:

This change corrects issues with interactions between ^PATROL and ^PERFMON (MONITOR), and also removes unnecessary overhead (STATISTICS resource locking) when running PATROL.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: RFD118
Summary: Add ECP statistics to MONITOR utility

Description:

This change adds ECP operations to the MONITOR (i.e. ^PERFMON and $System.Monitor) network statistics.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement Yes



Category: System
Platforms: All
DevKey: RFD137
Summary: Fix server name for ECP MONITOR statistics

Description:

This change displays the correct client name for server statistics in MONITOR. ECP shows the name of client, as opposed to the address for DCP statistics.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: RFD138
Summary: Fixes for ECP/DCP MONITOR statistics

Description:

This change corrects network MONITOR statistics, including proper display of ECP and DCP node names.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: RFD140
Summary: Add all metrics for ECP MONITOR statistics

Description:

This change adds all network related counters (total requests, cache hits/misses for client, etc.) to the ECP MONITOR metrics. They now parallel DCP metrics.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: Windows
DevKey: SAP247
Summary: Cforce works for any error getting events

Description:

This corrects a situation where, on Windows XP after the Control Process has crashed, the system can not be cleanly halted, even by cforce.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: SAP261
Summary: Fix mailbox send hang when destination process is hung in %HALT

Description:

A process performing %SS or any mailbox send may hang forever if the destination process has gotten in a state where the mailbox lock is permanently held. With this change, the calling process will exit the mailbox code after trying and failing to get the mailbox lock 10 times (total wait of 1 second).

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: Windows
DevKey: SAP289
Summary: Use correct thread handle for priorities on Windows

Description:

This corrects a situation where, if you change the priority of one process other than the current one, using $SYSTEM.Util.SetPrio(prio, processid), then all process priorities may be changed by the same amount. This will not happen if the current process priority is changed, using ^PRIO or $system.Util.SetPrio(n).

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: SAP392
Summary: Correct segmentation fault in the signal handler of $VIEW(-1)

Description:

This corrects a problem where a fault could occur during use of the $VIEW function to view data in the process partition.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System
Platforms: All
DevKey: SML471
Summary: Add a Clean daemon to take over from Control Daemon clean task

Description:

This change adds a new daemon called the 'Clean Daemon' (CLNDMN). This daemon wakes up every 10 minutes to scan the system pid table to see if any dead jobs are pending. It will reclaim any dead job pid slot it finds. This daemon takes over the duty used to be done by Control Daemon.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement Yes



Category: System
Platforms: All
DevKey: JLC740
Summary: Support 64-bit dllids in $ZF(-4) and $ZF(-5)

Description:

This change fixes a potential problem on 64-bit platforms where trying to load a user DLL or shared library via $ZF(-4)/$ZF(-5) might result in an error depending on previous memory allocations.

Likelihood Low
Risk Medium
Ad Hoc No
Enhancement No



Category: System.Backup/Restore
Platforms: All
DevKey: HYY1038
Summary: Add an option to ignore default journal directories during journal restore

Description:

This change adds an option to remove default directories (for searching for journal files to dejournal) when setting up noncluster journal restore. (The mechanism/interface for locating journal files in cluster journal restore is different.)

Prior to this change, the prompt for specifying journal directories along its help text looked like this:

Files to dejournal will be looked for in:
d:\Cache51\mgr\journal\

Specify other directories to search: <return when done>
There was no way to remove "d:\cache51\mgr\journal\" from the list of directories to search for journal files.

With this change, the prompt looks like this:

Files to dejournal will be looked for in:
     d:\cache51\mgr\journal\
in addition to any directories you are going to specify below, UNLESS
you enter a minus sign ('-' without quotes) at the prompt below,
in which case ONLY directories given subsequently will be searched

Directory to search: <return when done> -
     [Directory search list is emptied]
Directory to search: <return when done> d:\cache51\mgr\journal\
Directory to search: <return when done>
Here is a list of directories in the order they will be searched for files:
     d:\cache51\mgr\journal\
Note that there must be at least one entry on the directory search list or Caché will issue a warning:
** WARNING ** Directory search list must NOT be empty
and the setup will keep prompting.
Directory to search: <return when done>
unless one hits Ctrl-C to abort journal restore.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement Yes



Category: System.I/O
Platforms: All
DevKey: LRS778
Summary: Implement sequential file sharing/locking option in OPEN

Description:

A new sequential file OPEN option has been added, to provide exclusive write access to a file. This provides a way of blocking simultaneous updates of a given file by various processes. The "L" option may be combined with "R" and "W" options as follows:

Under Caché/Windows, shared access for read and write is the default, so "RL" does not alter the behavior. Exclusive mode interacts with file accesses by non-Caché applications on the system.

Under Caché/UNIX, the share mode mechanism employs file locks, so "RL" is necessary to coordinate with "WL" usages. If the "L" option is not specified on OPEN, file locking neither affects nor is affected by processes that do not employ it.

Under Caché/OpenVMS, files opened for write access use exclusive mode (no sharing), and those opened for read use shared GET mode. This behavior is not affected by the current change, hence the "L" option is not used.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement Yes



Category: System.I/O
Platforms: All
DevKey: LRS836
Summary: Avoid file deletion if user confuses keyword syntax

Description:

To avoid accidental deletion of a sequential file due to incorrect keyword syntax specification in the OPEN command, this change nows causes a syntax error to be reported if there is a "/" (slash) anywhere in the mode parameter string (the first positional device parameter).

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: System.StartUp
Platforms: All
DevKey: SAP351
Summary: File associations are confused when a multivolume DB fail to mount

Description:

In previous releases, if one of the extensions after the first volume of a multi-volume DB fails to mount during startup, then those extensions that successfully mounted before the failure are not cleared, and are assigned instead to the next DB in the list of databases in the config file.

For example, suppose there are two databases, "Multi" and "Single". Multi has primary and 3 extensions stored in these files:

Further suppose that the cache.ext in c:\v4 is deleted and Caché is started.

In this case, the DB Multi is not mounted because extension v4 fails to mount. But the DB Single will be started as a multi-volume DB, with extensions in


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Utilities
Platforms: All
DevKey: RFA019
Summary: In %Buttons, do not delete cstat output file(s) if not appended to the HTML report

Description:

An error was corrected in %Buttons where the cstat output and/or cconsole.log files were being deleted even if they were not copied to the HTML output file.

%Buttons does not include these two files if they are larger than 5MB or if appending either one of them will make the HTML output file larger than 5MB. In this case, a pointer to the original location of the cstat and/or cconsole.log is written to the HTML file.


Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Utilities
Platforms: All
DevKey: SAP123
Summary: %FREECNT performance enhancements

Description:

In calculating free space, this change causes Caché to examine secondary map blocks first to determine which maps are full maps. This avoids the need to read in those blocks for maps that are known to be full.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement Yes



Category: Utilities
Platforms: All
DevKey: STC498
Summary: Allow rebuildindex to work with implied namespaces

Description:

This change allows $$RebuildIndex^%R(impliednamespacereference) to work correctly. Prior to this, it would return an error.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Utilities.Globals
Platforms: All
DevKey: SAP379
Summary: %FREECNT for 2K Databases fails for large databases

Description:

This changes corrects errors in looking at the bitmaps on big-endian databases.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Weblink
Platforms: All
DevKey: CMT173
Summary: Make WebLink compliant with HTTP v1.1 response headers

Description:

With this change, WebLink is now fully compliant with HTTP v1.1 response headers.

In particular it is possible to take advantage of v1.1 KeepAlive connectivity in WebLink applications. Unlike HTTP v1.0, KeepAlive connectivity is 'on' by default in v1.1. If KeepAlive connectivity is not required the 'Connection: close' header directive must be added. For example:

HTTP/1.1 200 OK
Content-type: text/html
Connection: close
If KeepAlive is used, a 'content length' header field must be supplied. If the response header generated by the application indicates that KeepAlive should be used but does not contain a 'content length', WebLink will automatically buffer the response content, determine its size, and insert the length header before dispatching the whole response to the client.

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No



Category: Weblink
Platforms: All
DevKey: CMT267
Summary: Introduce full support for HTTP 'Keep-Alive' connectivity

Description:

This change allows HTTP 'Keep-Alive' connectivity to be used in WebLink applications, for example,

Minimal HTTP/1.0 response header without keep-alive:

HTTP/1.0 200 OK
Content-Type: text/html
Minimal HTTP/1.0 response header with keep-alive:
HTTP/1.0 200 OK
Content-Type: text/html
Connection: keep-alive
Minimal HTTP/1.1 response header without keep-alive:
HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Minimal HTTP/1.1 response header with keep-alive:
HTTP/1.1 200 OK
Content-Type: text/html
Note that the default behavior is for keep-alive to be 'off' in HTTP v 1.0 but 'on' for HTTP v1.1.

When Keep-Alive connectivity is used it is necessary to include a 'Content-Length' response header. If the application does not include this field in a response for which keep-alive is required (as is the case in the examples above), WebLink will cache the response data to determine its size and add the length field before dispatching the final response headers. However, better performance will be achieved if the application is able to add this field. For example:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 123

Likelihood Low
Risk Low
Ad Hoc No
Enhancement No