{"id":28736,"date":"2015-10-21T17:08:06","date_gmt":"2015-10-21T11:38:06","guid":{"rendered":"https:\/\/tothenewco.pro\/blog\/?p=28736"},"modified":"2015-10-21T17:08:06","modified_gmt":"2015-10-21T11:38:06","slug":"enable-grails-application-to-serve-resources-through-cdn","status":"publish","type":"post","link":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/","title":{"rendered":"Enable Grails application to serve resources through CDN"},"content":{"rendered":"<p>In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on <a href=\"https:\/\/en.wikipedia.org\/wiki\/Content_delivery_network\">CDN fundamentals<\/a> or how to set it up.<\/p>\n<p>In this post, I am just mentioning the highlights and important points in context to a Grails application considering security issues.<\/p>\n<h3>Changes around \u201cResources\u201d plugin.<\/h3>\n<p>I know there are alternates too (like <a href=\"https:\/\/grails.org\/plugin\/asset-pipeline\">asset-pipeline<\/a>), but we were using <a href=\"http:\/\/grails.org\/plugin\/resources\">resources<\/a> plugin already.<\/p>\n<ol>\n<li>We need to setup and enable the baseurl &#8211; see the following configs.<br \/>\n      [code]<br \/>\n        grails.resources.mappers.baseurl.enabled = true<br \/>\n        grails.resources.mappers.baseurl.default = &quot;http:\/\/xxx.cloudfront.net\/app\/static&quot;<br \/>\n      [\/code]<br \/>\n      <strong>grails.resources.mappers.baseurl.default<\/strong> is the base URL to your CDN server, as you can see AWS CloudFront link is used for the CDN service. You can configure multiple servers for serving the different modules. Here\u2019s a link for <a href='http:\/\/grails-plugins.github.io\/grails-resources\/ref\/Mappers\/baseurl.html'>baseurl mappers<\/a>.\n  <\/li>\n<li>\n    Ensure that the following config is either commented out or turned off<br \/>\n[code]grails.resources.debug = false[\/code]<br \/>\nThis is very important &#8211; it will let the resources plugin generate a dynamic link using hash of the resource&#8217;s content. Let\u2019s say you redeploy the build with changes in a file&#8217;s content, so this will be treated as a different file and CDN&#8217;s older cache won\u2019t come into the picture.<\/p>\n<p>Grails resources plugin already handles the cache headers in a very mature way, so as a good practice you can always configure your CDN to use the response headers only for the caching strategy  (at the CDN side). In case you have some very special requirement you can configure your CDN differently.\n  <\/li>\n<li>\nEnsure that following config is all set (in case you want different types of resources to be processed through CDN\/resources plugin).<br \/>\n[code]<br \/>\ngrails.resources.adhoc.patterns =[&quot;\/images\/*&quot;, &quot;*.css&quot;, &quot;*.js&quot;,&quot;*.swf&quot;]<br \/>\n[\/code]\n  <\/li>\n<li>\n    If you are using secure pages (HTTPS), you will need to setup the SSL certificate at the CDN side.\n  <\/li>\n<li>\n    In case you face any cross domain issues for loading some resources, you can install CORS plugin. https:\/\/grails.org\/plugin\/cors<br \/>\n    [code]<br \/>\ncors.url.pattern = [&#8216;\/static\/*&#8217;]<br \/>\n    [\/code]\n  <\/li>\n<\/ol>\n<h3>In case Spring security plugin is setup<\/h3>\n<ul>\n<li>\nFollowing will let the security plugin bypass the responses if resource\/page NOT FOUND (404).<br \/>\n[code]<br \/>\ngrails.plugins.springsecurity.rejectIfNoRule = false<br \/>\n\/\/ following is true by default, so not required<br \/>\ngrails.plugin.springsecurity.fii.rejectPublicInvocations = true<br \/>\n[\/code]<\/p>\n<p>This is very important step to ensure your Grails application will send 404 response code when a requested page\/resources was not found. Otherwise, (depending upon your default settings) &#8211; you may receive login page with 200 status code. So you can understand the ultimate bad effects of this thing.\n    <\/li>\n<\/ul>\n<p>The above changes are suggested on a personal discretion and learning that I&#8217;ve had from the recent work &#8211; however it might not fit into all the use cases. I hope it will help you. \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on CDN [&hellip;]<\/p>\n","protected":false},"author":606,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":3,"footnotes":""},"categories":[1174,7],"tags":[2645,1216,4840,2646,672],"class_list":["post-28736","post","type-post","status-publish","format-standard","hentry","category-aws-2","category-grails","tag-cdn","tag-cloudfront","tag-grails","tag-resources-plugin","tag-spring-security"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on CDN\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Salil Kumar\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"Enable Grails application to serve resources through CDN | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on CDN\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Enable Grails application to serve resources through CDN | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on CDN\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#article\",\"name\":\"Enable Grails application to serve resources through CDN | TO THE NEW Blog\",\"headline\":\"Enable Grails application to serve resources through CDN\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/salil-3\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-10-21T17:08:06+05:30\",\"dateModified\":\"2015-10-21T17:08:06+05:30\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#webpage\"},\"articleSection\":\"AWS, Grails, cdn, Cloudfront, Grails, resources-plugin, spring security\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"position\":2,\"name\":\"Grails\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#listItem\",\"name\":\"Enable Grails application to serve resources through CDN\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#listItem\",\"position\":3,\"name\":\"Enable Grails application to serve resources through CDN\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/salil-3\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/salil-3\\\/\",\"name\":\"Salil Kumar\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#authorImage\",\"url\":\"https:\\\/\\\/newersworld-sf-static.tothenew.net\\\/prod\\\/profilePicFolder\\\/487d6b33-0950-4f6b-b106-a51c27f3e8ca_salil.kumar@tothenew.com.jpg\",\"width\":96,\"height\":96,\"caption\":\"Salil Kumar\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/\",\"name\":\"Enable Grails application to serve resources through CDN | TO THE NEW Blog\",\"description\":\"In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\\\/CSS\\\/etc). I hope most of the people understand CDN already. So, I\\u2019m not covering any information on CDN\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/enable-grails-application-to-serve-resources-through-cdn\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/salil-3\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/salil-3\\\/#author\"},\"datePublished\":\"2015-10-21T17:08:06+05:30\",\"dateModified\":\"2015-10-21T17:08:06+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Enable Grails application to serve resources through CDN | TO THE NEW Blog","description":"In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on CDN","canonical_url":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#article","name":"Enable Grails application to serve resources through CDN | TO THE NEW Blog","headline":"Enable Grails application to serve resources through CDN","author":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/salil-3\/#author"},"publisher":{"@id":"https:\/\/tothenewco.pro\/blog\/#organization"},"datePublished":"2015-10-21T17:08:06+05:30","dateModified":"2015-10-21T17:08:06+05:30","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#webpage"},"isPartOf":{"@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#webpage"},"articleSection":"AWS, Grails, cdn, Cloudfront, Grails, resources-plugin, spring security"},{"@type":"BreadcrumbList","@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog#listItem","position":1,"name":"Home","item":"https:\/\/tothenewco.pro\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/grails\/#listItem","name":"Grails"}},{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/grails\/#listItem","position":2,"name":"Grails","item":"https:\/\/tothenewco.pro\/blog\/category\/grails\/","nextItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#listItem","name":"Enable Grails application to serve resources through CDN"},"previousItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#listItem","position":3,"name":"Enable Grails application to serve resources through CDN","previousItem":{"@type":"ListItem","@id":"https:\/\/tothenewco.pro\/blog\/category\/grails\/#listItem","name":"Grails"}}]},{"@type":"Organization","@id":"https:\/\/tothenewco.pro\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/tothenewco.pro\/blog\/"},{"@type":"Person","@id":"https:\/\/tothenewco.pro\/blog\/author\/salil-3\/#author","url":"https:\/\/tothenewco.pro\/blog\/author\/salil-3\/","name":"Salil Kumar","image":{"@type":"ImageObject","@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#authorImage","url":"https:\/\/newersworld-sf-static.tothenew.net\/prod\/profilePicFolder\/487d6b33-0950-4f6b-b106-a51c27f3e8ca_salil.kumar@tothenew.com.jpg","width":96,"height":96,"caption":"Salil Kumar"}},{"@type":"WebPage","@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#webpage","url":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/","name":"Enable Grails application to serve resources through CDN | TO THE NEW Blog","description":"In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on CDN","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/tothenewco.pro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/#breadcrumblist"},"author":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/salil-3\/#author"},"creator":{"@id":"https:\/\/tothenewco.pro\/blog\/author\/salil-3\/#author"},"datePublished":"2015-10-21T17:08:06+05:30","dateModified":"2015-10-21T17:08:06+05:30"},{"@type":"WebSite","@id":"https:\/\/tothenewco.pro\/blog\/#website","url":"https:\/\/tothenewco.pro\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/tothenewco.pro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"Enable Grails application to serve resources through CDN | TO THE NEW Blog","og:description":"In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on CDN","og:url":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/","og:image":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"Enable Grails application to serve resources through CDN | TO THE NEW Blog","twitter:description":"In a recent project we were required to move our static content files to some CDN because servers were getting millions of hits every hour and many of the resources on the main page were static (like JS\/CSS\/etc). I hope most of the people understand CDN already. So, I\u2019m not covering any information on CDN","twitter:image":"https:\/\/tothenewco.pro\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"28736","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":"","og_description":"","og_object_type":"blog","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":"","og_article_tags":"","twitter_use_og":false,"twitter_card":"summary","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2021-04-29 14:09:13","updated":"2024-02-29 09:05:35","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/tothenewco.pro\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/tothenewco.pro\/blog\/category\/grails\/\" title=\"Grails\">Grails<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tEnable Grails application to serve resources through CDN\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/tothenewco.pro\/blog"},{"label":"Grails","link":"https:\/\/tothenewco.pro\/blog\/category\/grails\/"},{"label":"Enable Grails application to serve resources through CDN","link":"https:\/\/tothenewco.pro\/blog\/enable-grails-application-to-serve-resources-through-cdn\/"}],"_links":{"self":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts\/28736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/users\/606"}],"replies":[{"embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/comments?post=28736"}],"version-history":[{"count":0,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/posts\/28736\/revisions"}],"wp:attachment":[{"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/media?parent=28736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/categories?post=28736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tothenewco.pro\/blog\/wp-json\/wp\/v2\/tags?post=28736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}