{"id":6243,"date":"2014-01-03T12:00:24","date_gmt":"2014-01-03T11:00:24","guid":{"rendered":"https:\/\/ingmarverheij.com\/?p=6243"},"modified":"2014-07-18T08:49:12","modified_gmt":"2014-07-18T06:49:12","slug":"citrix-netscaler-cache-microsoft-app-v-sequences","status":"publish","type":"post","link":"https:\/\/ingmarverheij.com\/en\/citrix-netscaler-cache-microsoft-app-v-sequences\/","title":{"rendered":"Citrix NetScaler: Cache Microsoft App-V sequences"},"content":{"rendered":"<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Diagram.png\"><img loading=\"lazy\" decoding=\"async\" style=\"float: right; margin: 0px 0px 0px 5px; display: inline;\" title=\"Citrix NetScaler: Cache Microsoft App-V sequences\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Diagram_thumb.png\" alt=\"Citrix NetScaler: Cache Microsoft App-V sequences\" width=\"106\" height=\"150\" align=\"right\" \/><\/a>Recently I wrote about <a href=\"https:\/\/ingmarverheij.com\/en\/microsoft-app-v-5-0-streaming-via-http\/\" target=\"_blank\">streaming App-V 5 packages via HTTP<\/a>. Using caching in IIS performance can be enhanced while resource consumption on the SMB share are minimized. Since we\u2019re using HTTP for streaming it\u2019s not unlikely a load balancer is used to divide the traffic to multiple App-V streaming servers adding another hop.<\/p>\n<p>When a Citrix NetScaler is used to load balancing App-V Streaming Servers you could use <a href=\"https:\/\/support.citrix.com\/proddocs\/topic\/ns-optimization-10-map\/ns-IC-gen-wrapper-10-con.html\" target=\"_blank\">Integrated Caching<\/a> to cache resources. When resources are cached on the load balancer less network traffic is generated. Integrated Caching is part of the <a href=\"https:\/\/www.citrix.nl\/products\/netscaler-application-delivery-controller\/features\/editions.html\" target=\"_blank\">Platinum or Enterprise edition with Caching option<\/a>.<\/p>\n<p><!--more--><\/p>\n<h1>Communication scenario<\/h1>\n<p>In a regular scenario where an App-V client downloads a package via HTTP, via a load balanced web server,\u00a0 <strong>six<\/strong> steps are involved:<\/p>\n<ol>\n<li>The App-V Client requests a file from the load balancer<\/li>\n<li>The load balancer\u00a0 forwards the request to the App-V Streaming Server<\/li>\n<li>The App-V Streaming server requests the file via SMB to the SMB server<\/li>\n<li>The SMB server sends the file to the App-V Streaming Server (retrieved from disk)<\/li>\n<li>The App-V Streaming Server sends the file to the load balancer<\/li>\n<li>The load balancer sends the file to the App-V Client<\/li>\n<\/ol>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Caching-None1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Caching - None\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Caching-None_thumb1.png\" alt=\"Caching - None\" width=\"504\" height=\"89\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>By enabling the <a href=\"https:\/\/ingmarverheij.com\/en\/microsoft-app-v-5-0-streaming-via-http\/\" target=\"_blank\">caching feature (and increasing the cache size)\u00a0 in IIS<\/a> all subsequent request are reduced to <strong>four<\/strong> steps:<\/p>\n<ol>\n<li>The App-V Client requests a file from the load balancer<\/li>\n<li>The load balancer\u00a0 forwards the request to the App-V Streaming Server<\/li>\n<li>The App-V Streaming Server sends the file to the load balancer (retrieved from cache)<\/li>\n<li>The load balancer sends the file to the App-V Client<!--EndFragment--> <!--EndFragment--><\/li>\n<\/ol>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Caching-IIS1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Caching - IIS\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Caching-IIS_thumb1.png\" alt=\"Caching - IIS\" width=\"504\" height=\"89\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>When the Integrated Cache of the Citrix NetScaler is configured the steps could be reduces to <strong>two <\/strong>steps:<\/p>\n<ol>\n<li>The App-V Client requests a file from the load balancer<\/li>\n<li>The load balancer sends the file to the App-V Client (retrieved from cache)<\/li>\n<\/ol>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Caching-NetScaler-Integrated-Caching1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Caching - NetScaler Integrated Caching\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Caching-NetScaler-Integrated-Caching_thumb1.png\" alt=\"Caching - NetScaler Integrated Caching\" width=\"504\" height=\"89\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Packet Processing Flow<\/h1>\n<p>A Citrix NetScaler processes packets in a pre-defined order. When traffic flows through a NetScaler it evaluates its feature sets, logging matching policy actions.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Packet-Processing-Flow-Diagram.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Packet Processing Flow Diagram\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Packet-Processing-Flow-Diagram_thumb.png\" alt=\"Packet Processing Flow Diagram\" width=\"504\" height=\"148\" border=\"0\" \/><\/a><\/p>\n<p>As can be seen in the diagram a packet is evaluated when it travels from the client to the server and again when it travels back from the client to the server. The last process is caching the returned object.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Packet-Processing-Flow-Diagram-HTTP-Response-Caching.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Packet Processing Flow Diagram - HTTP Response Caching\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Packet-Processing-Flow-Diagram-HTTP-Response-Caching_thumb.png\" alt=\"Packet Processing Flow Diagram - HTTP Response Caching\" width=\"504\" height=\"148\" border=\"0\" \/><\/a><\/p>\n<p>Typically the NetScaler system applies all matching actions after processing is complete, with integrated caching as one exception. This means that once a requested object is cached all other actions are no longer evaluated or applied. Keep this in mind if you need to apply for instance <strong>Request Rewrite <\/strong>of <strong>Response Rewrite<\/strong>\u00a0 as they won\u2019t be applied to cached objects.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Packet-Processing-Flow-Diagram-HTTP-Request-Caching.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Packet Processing Flow Diagram - HTTP Request Caching\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Packet-Processing-Flow-Diagram-HTTP-Request-Caching_thumb.png\" alt=\"Packet Processing Flow Diagram - HTTP Request Caching\" width=\"504\" height=\"148\" border=\"0\" \/><\/a><\/p>\n<p>.<\/p>\n<p>&nbsp;<\/p>\n<h1>Configuring the NetScaler<\/h1>\n<p>Here\u2019s an example of how\u00a0 you can configure a Citrix NetScaler to cache App-V packages using Integrated Caching.<\/p>\n<p>&nbsp;<\/p>\n<h6>Basic Features<\/h6>\n<p>The Integrated Caching features needs to be enabled, by default it\u2019s disabled. In the <strong>Configuration<\/strong> tab go to <strong>Sytem <\/strong>&gt; <strong>Settings<\/strong> and click on <strong>Configure basic features. <\/strong>Select the <strong>Integrated Caching<\/strong> feature and click <strong>OK.<\/strong><\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-System-Settings-.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configuration - System - Settings \" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-System-Settings-_thumb.png\" alt=\"Configuration - System - Settings \" width=\"254\" height=\"180\" border=\"0\" \/><\/a><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Basic-Features-Integrated-Caching.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configure Basic Features - Integrated Caching\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Basic-Features-Integrated-Caching_thumb.png\" alt=\"Configure Basic Features - Integrated Caching\" width=\"201\" height=\"180\" border=\"0\" \/><\/a><\/p>\n<p>Or via CLI<\/p>\n<pre>enable ns feature ic<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h6>Global Cache settings<\/h6>\n<p>To accommodate for large files to be cached the cache settings needs to be adjusted.Since App-V files are relatively large the memory usage limit should be sufficient to hold the App-V packages you want to cache. A Citrix NetScaler has 50% of it\u2019s memory available for caching, so it\u2019s vital the NetScaler has sufficient resources.<\/p>\n<p>Besides having sufficient resources the limit should be configured so enable Integrated Caching to use the available memory. In the <strong>Configuration <\/strong>tab go to <strong>Optimization <\/strong>&gt; <strong>Integrated Caching <\/strong>and click on\u00a0 <strong>Change cache settings<\/strong>.At <strong>Memory Usage Limit (MB)<\/strong> enter the amount of memory that Integrated Caching is allowed to use.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Optimization-Integrated-Caching-Change-cache-settings.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configuration - Optimization - Integrated Caching - Change cache settings\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Optimization-Integrated-Caching-Change-cache-settings_thumb.png\" alt=\"Configuration - Optimization - Integrated Caching - Change cache settings\" width=\"254\" height=\"147\" border=\"0\" \/><\/a><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Cache-Global-Settings.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Cache Global Settings\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Cache-Global-Settings_thumb.png\" alt=\"Cache Global Settings\" width=\"135\" height=\"147\" border=\"0\" \/><\/a><\/p>\n<p>Or via CLI<\/p>\n<pre>set cache parameter -memLimit 828<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h6>Content Group<\/h6>\n<p>Cached files are stored in a content group, each content group has it\u2019s own configuration specifics. For the App-V sequences we\u2019re creating a separate content group with a memory limit of 64GB (the maximum) and a maximum resource size of 2GB (the maximum).\u00a0 <em>You might want to adjust this to your needs<\/em>.<\/p>\n<p>In the <strong>Configuration <\/strong>tab go to <strong>Optimization<\/strong> &gt; <strong>Integrated Caching<\/strong> &gt; <strong>Content Groups <\/strong>and click on <strong>Add<\/strong>. Name the Content Group logically (for instance AppVContentGroup), select tab <strong>Memory<\/strong> and enter <strong>1994752<\/strong> the <strong>Do not cache, if size exceeds<\/strong> and <strong>65535 <\/strong>as the <strong>Maximum memory usage limit.<\/strong><\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Optimization-Integrated-Caching-Content-Groups-Add.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configuration - Optimization - Integrated Caching - Content Groups - Add\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Optimization-Integrated-Caching-Content-Groups-Add_thumb.png\" alt=\"Configuration - Optimization - Integrated Caching - Content Groups - Add\" width=\"254\" height=\"130\" border=\"0\" \/><\/a><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Cache-Content-Group-Expiry-Method.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configure Cache Content Group - Expiry Method\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Cache-Content-Group-Expiry-Method_thumb.png\" alt=\"Configure Cache Content Group - Expiry Method\" width=\"112\" height=\"130\" border=\"0\" \/><\/a><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Cache-Content-Group-Memory.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configure Cache Content Group - Memory\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Cache-Content-Group-Memory_thumb.png\" alt=\"Configure Cache Content Group - Memory\" width=\"112\" height=\"130\" border=\"0\" \/><\/a><\/p>\n<p>Or via CLI (the CLI allows a larger amount for <strong>Do not cache, if size exceeds)<\/strong><\/p>\n<pre>add cache contentgroup AppVContentGroup -maxResSize 2097151 -memLimit 65535<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h6>Cache Policy<\/h6>\n<p>As described earlier the processed packets are evaluated to determine if an action needs to be applied. To ensure App-V packages are cached a Cache Policy is created that caches files with the extension <strong>.appv<\/strong>.<\/p>\n<p>In the <strong>Configuration<\/strong> tab go to <strong>Optimization <\/strong>&gt; <strong>Integrated Caching<\/strong> &gt; <strong>Policies<\/strong> and click on <strong>Add<\/strong>. Name the Cache Policy logically (for instance _cacheAppV5), set the action <strong>CACHE<\/strong> and store the object in the Content Group <strong>AppVContentGroup<\/strong> (created in the previous step). The Expression is set to <strong>HTTP.REQ.URL.PATH_AND_QUERY.ENDSWITH(.\u201dappv\u201d)<\/strong> to ensure all request that end with .appv are cached.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Optimization-Integrated-Caching-Policies-Add.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configuration - Optimization - Integrated Caching - Policies - Add\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Optimization-Integrated-Caching-Policies-Add_thumb.png\" alt=\"Configuration - Optimization - Integrated Caching - Policies - Add\" width=\"254\" height=\"149\" border=\"0\" \/><\/a><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Cache-Policy.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configure Cache Policy\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Cache-Policy_thumb.png\" alt=\"Configure Cache Policy\" width=\"186\" height=\"149\" border=\"0\" \/><\/a><\/p>\n<p>Or via CLI<\/p>\n<pre>add cache policy _cacheAppV5 -rule \"HTTP.REQ.URL.PATH_AND_QUERY.ENDSWITH(\\\".appv\\\")\" -action CACHE -storeingroup AppVContentGroup<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h6>Bind to load balancing Virtual Server<\/h6>\n<p>Finally the Cache Policy needs to be bound to one or more load balancing Virtual Server(s). Only packets that are load balanced via this Virtual Server will cache the objects that match the expression in the Cache Policy.<\/p>\n<p>In the <strong>Configuration <\/strong>tab go to <strong>Traffic Management <\/strong>&gt; <strong>Load Balancing <\/strong>&gt; <strong>Virtual Servers <\/strong>select the Virtual Server where objects needs to be cached (for instance App-V Streaming Servers) and click on <strong>Open<\/strong>.<\/p>\n<p>In the tab <strong>Policies <\/strong>select <strong>Cache (Request)<\/strong> and click on <strong>Insert Policy<\/strong>. Select the policy _cacheAppV5 (created in the previous step) and click on <strong>OK<\/strong>.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Traffic-Management-Load-Balancing-Virtual-Servers-Open.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configuration - Traffic Management - Load Balancing - Virtual Servers - Open\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Traffic-Management-Load-Balancing-Virtual-Servers-Open_thumb.png\" alt=\"Configuration - Traffic Management - Load Balancing - Virtual Servers - Open\" width=\"419\" height=\"94\" border=\"0\" \/><\/a><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Virtal-Server-Load-Balancing.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"Configure Virtal Server (Load Balancing)\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configure-Virtal-Server-Load-Balancing_thumb.png\" alt=\"Configure Virtal Server (Load Balancing)\" width=\"132\" height=\"94\" border=\"0\" \/><\/a><\/p>\n<p>Or via CLI<\/p>\n<pre>bind lb vserver \"APP-V STREAMING SERVERS\" -policyName _cacheAppV5 -priority 1 -type REQUEST<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Proof of the pudding<\/h1>\n<p>Now if I download the same App-V package (250Mb) as I did in the <a href=\"https:\/\/ingmarverheij.com\/en\/microsoft-app-v-5-0-streaming-via-http\/\" target=\"_blank\">IIS caching article<\/a> three times using a browser the statistics (via <strong>Optimization <\/strong>&gt; <strong>Integrated Caching<\/strong> &gt; <strong>Statistics<\/strong>) shows us 1 miss (the first request, which needed to be cached) and 2 hits (the subsequent requests) resulting in a Hit ratio of<strong> 66,67%<\/strong>.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Optimization-Integrated-Caching-Statistics.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Configuration - Optimization - Integrated Caching - Statistics\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Configuration-Optimization-Integrated-Caching-Statistics_thumb.png\" alt=\"Configuration - Optimization - Integrated Caching - Statistics\" width=\"504\" height=\"142\" border=\"0\" \/><\/a><\/p>\n<p>If we look at the Cache Objects (via <strong>Optimization <\/strong>&gt; <strong>Integrated Caching <\/strong>&gt; <strong>View Cached Objects<\/strong>) the cached object is visible (Google Chrome.appv)<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Cache-objects1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;\" title=\"Cache objects\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2014\/01\/Cache-objects_thumb1.png\" alt=\"Cache objects\" width=\"354\" height=\"223\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Recently I wrote about streaming App-V 5 packages via HTTP. Using caching in IIS performance can be enhanced while resource consumption on the SMB share are minimized. Since we\u2019re using HTTP for streaming it\u2019s not unlikely a load balancer is used to divide the traffic to multiple App-V streaming servers adding another hop. When a [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[294,502],"tags":[599,82,603,638,503],"class_list":["post-6243","post","type-post","status-publish","format-standard","hentry","category-microsoft-app-v","category-netscaler","tag-app-v","tag-caching","tag-iis","tag-integrated-cache","tag-netscaler-2"],"_links":{"self":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/6243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/comments?post=6243"}],"version-history":[{"count":9,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/6243\/revisions"}],"predecessor-version":[{"id":6892,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/6243\/revisions\/6892"}],"wp:attachment":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/media?parent=6243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/categories?post=6243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/tags?post=6243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}