{"id":54566,"date":"2019-12-29T00:00:00","date_gmt":"2019-12-28T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj"},"modified":"2020-02-18T14:02:35","modified_gmt":"2020-02-18T11:02:35","slug":"samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj","title":{"rendered":"Self-hosting third-party resources: good, bad, ugly","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In recent years, more and more frontend optimization platforms have been offering options for self-hosting or proxying third-party resources. Akamai allows you to set <noindex><a rel=\"nofollow\" href=\"https:\/\/community.akamai.com\/customers\/s\/article\/5-ways-to-prevent-slow-3rd-party-front-end-services?language=en_US\">specific parameters<\/a><\/noindex> for self-generated URLs. Cloudflare has Edge Workers technology. Fasterzine can <noindex><a rel=\"nofollow\" href=\"https:\/\/www.fasterize.com\/en\/blog\/https-the-impact-on-your-loading-times\/\">rewrite<\/a><\/noindex> URLs on pages so that they point to third-party resources located on the main domain of the website.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/481574\/\"><img decoding=\"async\" alt=\"Self-hosting third-party resources: good, bad, ugly\" src=\"\/wp-content\/uploads\/2019\/12\/61f87db89ba8c5f4bf030a4004df56f3.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>If you know that the third-party services used in your project do not change frequently and that their delivery process can be improved, you are likely considering proxying such services. With this approach, you can effectively \"bring\" these resources closer to users and gain more control over their caching on the client side. Additionally, this allows you to protect users from issues caused by the \"failure\" of a third-party service or degradation of its performance.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Good: performance improvement<\/h2>\n<p>\nSelf-hosting external resources improves performance in a quite obvious way. The browser does not need to make an unnecessary DNS call, establish a TCP connection, or perform a TLS handshake on a third-party domain. The impact of self-hosting external resources on performance can be observed by comparing the two following illustrations.<\/p>\n<p><img decoding=\"async\" alt=\"Self-hosting third-party resources: good, bad, ugly\" src=\"\/wp-content\/uploads\/2019\/12\/ee0a0ccb712a873d10b8de0dbc7ef84a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Third-party resources are loaded from external sources (taken <noindex><a rel=\"nofollow\" href=\"https:\/\/csswizardry.com\/2019\/05\/self-host-your-static-assets\/\">from here<\/a><\/noindex>)<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Self-hosting third-party resources: good, bad, ugly\" src=\"\/wp-content\/uploads\/2019\/12\/e9ee0b858dbb1aa7c6476d8bf954fc62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Third-party resources are stored together with the other materials of the site (taken <noindex><a rel=\"nofollow\" href=\"https:\/\/csswizardry.com\/2019\/05\/self-host-your-static-assets\/\">from here<\/a><\/noindex>)<\/i><\/p>\n<p>The situation is further improved by the fact that the browser will utilize the multiplexing and prioritization capabilities of the HTTP\/2 connection, which is already established with the main domain.<\/p>\n<p>If you do not host third-party resources, since they will be loaded from a domain different from the main one, you will not be able to prioritize them. This will result in them competing with each other for the client\u2019s bandwidth. This can lead to the loading time of resources that are critical for page rendering being significantly longer than the time achievable under ideal circumstances. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=nOW-i6bbRdo\">Here<\/a><\/noindex> The presentation on HTTP\/2 prioritization explains all this very well.<\/p>\n<p>It can be assumed that using attributes such as <code>preconnect<\/code> in links to external resources will help address the issue. However, if there are too many links to different domains, this could actually overload the connection line at crucial moments.<\/p>\n<p>If you host external resources yourself, you can control how these resources are delivered to the client. Specifically, it involves the following:<\/p>\n<ul>\n<li>You can ensure the use of a data compression algorithm that is best suited for each browser (Brotli\/gzip).<\/li>\n<li>You can increase the caching time for resources, which is often not particularly long even with the most well-known providers (for example, the relevant value for the GA tag is set to 30 minutes).<\/li>\n<\/ul>\n<p>\nYou can even extend the TTL for a resource, for example, up to a year by incorporating relevant materials into your caching management strategy (URL hashes, versioning, and so on). We will discuss this further below.<\/p>\n<h3>\u258dProtection against interruptions from third-party services or their shutdown<\/h3>\n<p>\nAnother interesting aspect of self-hosting third-party resources is that it helps mitigate the risks associated with interruptions from third-party services. Suppose that the third-party solution you use for A\/B testing is implemented as a blocking script loaded in the header section of the page. This script loads slowly. If the corresponding script fails to load, the page will be blank. If it takes a long time to load, the page will appear with significant delays. Or, suppose a library is being used from a third-party CDN resource. Imagine this resource experiencing an outage or being blocked in a certain country. Such a situation will cause disruption in the site's functionality.<\/p>\n<p>To find out how your site performs under the unavailability of some external service, you can use the SPOF section on <noindex><a rel=\"nofollow\" href=\"https:\/\/www.webpagetest.org\/\">webpagetest.org<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Self-hosting third-party resources: good, bad, ugly\" src=\"\/wp-content\/uploads\/2019\/12\/0ffa0b44054ccd16bab33c6b7beff049.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>The SPOF section on webpagetest.org<\/i><\/p>\n<h3>\u258dWhat about caching issues for materials in browsers? (Hint: it's a myth)<\/h3>\n<p>\nOne might think that using public CDNs will automatically lead to better resource performance, as these services have sufficiently high-quality networks and are distributed worldwide. However, things are actually a bit more complicated.<\/p>\n<p>Let's say we have a few different websites: website1.com, website2.com, website3.com. All these websites use the jQuery library. We connect it via a CDN, for instance \u2014 googleapis.com. One would expect the browser to load and cache the library once, and then use it while interacting with all three websites. This could reduce network load. It might save some resources and help improve performance. From a practical standpoint, however, things look different. For example, Safari has implemented a feature called <noindex><a rel=\"nofollow\" href=\"https:\/\/webkit.org\/blog\/7675\/intelligent-tracking-prevention\/\">Intelligent Tracking Prevention<\/a><\/noindex>: in the cache, double keys are used based on the source of the document and the source of the third-party resource. <noindex><a rel=\"nofollow\" href=\"https:\/\/andydavies.me\/blog\/2018\/09\/06\/safari-caching-and-3rd-party-resources\/\">Here<\/a><\/noindex> a good article on this topic.<\/p>\n<p>Older studies <noindex><a rel=\"nofollow\" href=\"https:\/\/yuiblog.com\/blog\/2007\/01\/04\/performance-research-part-2\/\">Yahoo<\/a><\/noindex> and <noindex><a rel=\"nofollow\" href=\"https:\/\/code.facebook.com\/posts\/964122680272229\/web-performance-cache-efficiency-exercise\/\">Facebook<\/a><\/noindex>, as well as a more recent <noindex><a rel=\"nofollow\" href=\"https:\/\/discuss.httparchive.org\/t\/analyzing-resource-age-by-content-type\/1659\">study<\/a><\/noindex> by Paul Calvano, show that resources are not stored in browser caches as long as we might expect: \"There is a significant gap between the caching time of project\u2019s own resources and third-party resources. This refers to CSS and web fonts. Specifically, the caching period for 95% of the project's own fonts exceeds a week, while the caching period for 50% of third-party fonts is less than a week! This gives web developers compelling reasons to self-host font files!\".<\/p>\n<p>As a result, if you host third-party materials, you will not notice performance issues caused by browser caching.<\/p>\n<p>Now that we\u2019ve looked at the strengths of self-hosting third-party resources, let\u2019s discuss how to distinguish a good implementation of this approach from a bad one.<\/p>\n<h2>Bad: the devil is in the details<\/h2>\n<p>\nMoving third-party resources to your own domain cannot be done automatically without ensuring proper caching of such resources.<\/p>\n<p>One of the main issues here is caching time. For instance, version information is included in the names of third-party scripts like this: <code>jquery-3.4.1.js<\/code>Such a file will not change in the future, which will not cause any caching issues.<\/p>\n<p>However, if a version control scheme is not applied when working with files, cached scripts whose content changes with the same file name can become outdated. This can become a serious problem, as it does not allow for automated security fixes in the scripts that should be delivered to clients as soon as possible. The developer will have to make an effort to update such scripts in the cache. Furthermore, this can cause application failures due to the fact that the code used on the client side from the cache is different from the fresh version of the code intended for the server part of the project.<\/p>\n<p>However, when it comes to materials that are updated frequently (tag managers, A\/B testing solutions), caching them with CDN tools is a task that, while solvable, is already much more complex. Services like Commanders Act use webhooks when publishing new versions. This allows for organizing cache refreshes on the CDN or, even better, the ability to invoke a hash or URL version update.<\/p>\n<h3>\u258dAdaptive material delivery to clients<\/h3>\n<p>\nMoreover, when we talk about caching, we must also consider that the caching settings used on the CDN may not be suitable for certain third-party resources. For example, such resources may use user agent sniffing technology (user agent sniffing, adaptive serving) to deliver specific browser-optimized versions of materials. These technologies rely on regular expressions or a database that gathers information about HTTP headers to determine browser capabilities. <code>User-Agent<\/code>. Once they know which browser they are dealing with, they deliver materials tailored to it.<\/p>\n<p>Two services come to mind. The first is googlefonts.com. The second is polyfill.io. The Google Fonts service provides various CSS code for a given resource, depending on the browser\u2019s capabilities (linking to woff2 resources, using <code>unicode-range<\/code>).<\/p>\n<p>Here are the results of a couple of requests to Google Fonts made from different browsers.<\/p>\n<p><img decoding=\"async\" alt=\"Self-hosting third-party resources: good, bad, ugly\" src=\"\/wp-content\/uploads\/2019\/12\/5078ce754cc324e42261a1749e96a445.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Result of the Google Fonts request made from Chrome<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Self-hosting third-party resources: good, bad, ugly\" src=\"\/wp-content\/uploads\/2019\/12\/103de3c523a05fdfa230ada49842f124.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Result of the Google Fonts request made from IE10<\/i><\/p>\n<p>Polyfill.io provides the browser only with the polyfills it needs. This is done for performance reasons.<\/p>\n<p>For example, let\u2019s see what happens if the following request is made from different browsers: <noindex><a rel=\"nofollow\" href=\"https:\/\/polyfill.io\/v3\/polyfill.js?features=default\">https:\/\/polyfill.io\/v3\/polyfill.js?features=default<\/a><\/noindex><\/p>\n<p>In response to such a request made from IE10, 34 KB of data will be returned. The response from Chrome will be empty.<\/p>\n<h2>Malicious: some considerations about privacy<\/h2>\n<p>\nThis point is last in order, but not in importance. It concerns the fact that self-hosting third-party resources on the main domain of the project or on its subdomain can jeopardize user privacy and negatively impact the main web project.<\/p>\n<p>If your CDN system is misconfigured, it may end up that you\u2019re sending your domain cookies to a third-party service. If proper filtering is not organized at the CDN level, your session cookies, which normally cannot be accessed in JavaScript (with the attribute <code>httponly<\/code>), may be sent to an external host.<\/p>\n<p>This is exactly what can happen with trackers like Eulerian or Criteo. Third-party trackers could set a unique identifier in cookies. If they were part of site materials, they could read the identifier at will during the user's interaction with various web resources.<\/p>\n<p>Nowadays, most browsers include protection against such tracker behavior. As a result, trackers now use the technology <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/nextdns\/cname-cloaking-the-dangerous-disguise-of-third-party-trackers-195205dc522a\">CNAME Cloaking<\/a><\/noindex>, disguising themselves as their own scripts of various projects. Specifically, trackers suggest that website owners add CNAME settings for some domain, the address of which usually looks like a random set of characters.<\/p>\n<p>Although it is not recommended to make the website cookies accessible to all subdomains (for example \u2014 *.website.com), this is done on many sites. In such cases, these cookies are automatically sent to the disguised third-party tracker. As a result, any talk of privacy becomes irrelevant.<\/p>\n<p>Moreover, the same thing happens with the HTTP headers <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.google.com\/web\/updates\/2015\/09\/automating-resource-selection-with-client-hints\">Client-Hints<\/a><\/noindex>, which are sent only to the main domain, as they can be used to create <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/httpwg\/http-extensions\/issues\/767\">digital fingerprint<\/a><\/noindex> of the user. Ensure that the CDN service you are using properly filters such headers.<\/p>\n<h2>Summary<\/h2>\n<p>\nIf you are planning to implement self-hosting for third-party resources soon, let me give you a few tips:<\/p>\n<ul>\n<li>Host your most important JS libraries, fonts, and CSS files yourself. This will reduce the risk of site failure or decreased performance due to a resource essential for the site's operation becoming unavailable because of a third-party service.<\/li>\n<li>Before caching third-party resources on a CDN, make sure that a versioning system is used for their file names, or that you can manage the lifecycle of these resources by manually or automatically clearing the CDN cache upon publishing a new version of the script.<\/li>\n<li>Pay close attention to CDN settings, proxy servers, and cache. This will prevent the sending of your project cookies or headers <code>Client-Hints<\/code> to third-party services.<\/li>\n<\/ul>\n<p>\n<b>Dear readers!<\/b> Are you hosting third-party materials on your servers that are critical to the operation of your projects?<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/ru-rub\"><img decoding=\"async\" alt=\"Self-hosting third-party resources: good, bad, ugly\" src=\"\/wp-content\/uploads\/2019\/12\/30212b2008a5ed0b51a4469d885b9e91.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/ru-rub\/#order\"><img decoding=\"async\" alt=\"Self-hosting third-party resources: good, bad, ugly\" src=\"\/wp-content\/uploads\/2019\/12\/7117788d4bd0ef7de47d98a372b72ae7.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/481574\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. Akamai \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 URL. \u0423 Cloudflare \u0435\u0441\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f Edge Workers. Fasterzine \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c URL \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u0431\u044b \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043e\u043c\u0435\u043d\u0435 \u0441\u0430\u0439\u0442\u0430. \u0415\u0441\u043b\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54566","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432: \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u043f\u043b\u043e\u0445\u043e\u0439, \u0437\u043b\u043e\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-28T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Self-hosting third-party resources: good, bad, ugly | ProHoster","description":"In recent years, more and more platforms for frontend project optimization have offered options for self-hosting or proxying third-party resources.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432: \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u043f\u043b\u043e\u0445\u043e\u0439, \u0437\u043b\u043e\u0439 | ProHoster","og:description":"\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0433\u043e\u0434\u044b \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/samostoyatelnyj-hosting-storonnih-resursov-horoshij-plohoj-zloj","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-28T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54566","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","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":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","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":"","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,"seo_analyzer_scan_date":"2026-01-24 11:52:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:02:46","updated":"2026-08-11 12:50:28","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/54566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=54566"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/54566\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=54566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=54566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=54566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}