====== Server Push is Supported on LiteSpeed Web Server ======
[[https://en.wikipedia.org/wiki/HTTP/2_Server_Push | Server Push ]] is a method of information delivery whereby a server pushes a resource directly to the client without first receiving a request to do so. By doing this, the server can attempt to anticipate client requests and pre-push them into the client’s cache in an effort to avoid the usual request-response round trip delay.
===== Requirements =====
- LiteSpeed Enterprise 5.2+
- [[https://www.litespeedtech.com/products/litespeed-web-server/features/http-2-support/enabling-https | HTTPS]] enabled
- HTTP/2 supported by the browser
**NOTE**: This article focuses on HTTP/2 server push, but server push may also be used with HTTP/3, assuming the browser supports it.
===== Setup and Verification=====
We are going to introduce how to verify Server Push with WordPress+LSCache, and then with Cloudflare.
If you would like to try server push and file making from scratch, please see [[https://www.smashingmagazine.com/2017/04/guide-http2-server-push/ |this guide]] to learn how.
====Install WordPress and LSCache ====
- [[litespeed_wiki:cache:common_installation | Server Cache Setup]]
- [[litespeed_wiki:installation:wordpress_installation | WordPress Installation]]
- [[litespeed_wiki:cache:lscwp:installation | LSCache for WordPress]]
====Verify Browser Supports HTTP/2 ====
There are two easy ways to verify your browser has HTTP/2 support:
- Check your browser version against the table at [[http://caniuse.com/#search=http2 | this link]]. (Use [[http://caniuse.com/#search=http3 | this link]] for HTTP/3.) \\ {{:litespeed_wiki:config:push-6.png?|}}
- Visit the [[ https://http2.akamai.com/demo | Akamai online tool]] and let it auto-detect your browser's support. \\ {{:litespeed_wiki:config:push-7.png?|}}
====Configure LSCache to use Server Push====
- From the WordPress Dashboard, navigate to **LiteSpeed Cache > Page Optimization > CSS Settings** and set **CSS HTTP/2 Push** to ''ON''
- Switch to the **JS Settings** tab and set **JS HTTP/2 Push** to ''ON''
====Verify Server Push is Active ====
We are going to use the [[https://developers.google.com/web/tools/chrome-devtools/network-performance/reference | Chrome developer tool]] as our verification tool.
* If you only enabled **CSS HTTP/2 Push**, the response header will look like this: \\ {{:litespeed_wiki:config:push-1.png?|}} \\
* If you enabled both **CSS HTTP/2 Push** and **JS HTTP/2 Push**, the response header will look like this: \\ {{:litespeed_wiki:config:push-2.png?|}} \\
CSS and JS files will show as ''Push / Other'':
{{:litespeed_wiki:config:ls_severpush.png?800|}}
====Configure CDN to Use Server Push====
Next we'll try it with [[https://www.cloudflare.com/ | Cloudflare]]. Cloudflare supports HTTP/2 Server Push with the ''link'' header field on all plan levels. Cloudflare will look for the ''link'' header field, in response headers from the origin server and extract URI-references with parameters ''rel=preload''. These URI will be pushed to the client. \\
Follow this LiteSpeed blog to [[https://blog.litespeedtech.com/2017/10/11/wpw-content-delivery-network-support/ | Set up CDN from LSCache]] \\
* If you only enabled **CSS HTTP/2 Push**, the response header will look like this: \\ {{:litespeed_wiki:config:push-3.png?|}} \\
* If you enabled both **CSS HTTP/2 Push** and **JS HTTP/2 Push**, the response header will look like this: \\ {{:litespeed_wiki:config:push-4.png?|}} \\
==== Alternate Verification Method ====
- Point your browser to ''chrome://net-internals/#http2''
- Refresh your test site
- You will see **HTTP/2 sessions** \\ {{:litespeed_wiki:config:push-9.png?|}}
- Click the hyperlink of your test site's ID
- The **Events** tab will open, and you will see **HTTP2_SESSION**. Enable the checkbox. \\ {{:litespeed_wiki:config:push-10.png?|}}
- Check the **HTTP2_SESSION_RECV_HEADERS -> link** section, which will look like this: \\ rel=preload; as=style,; rel=preload; as=style,;
We welcome your feedback on our [[https://www.litespeedtech.com/support/forum/ | forum]].
==== Disable ls_smartpush cookie for a particular domain ====
If you want to disable the ''ls_smartpush'' cookie for a particular domain, you can use the ''SmartPush no-cookie'' directive in ''.htaccess'' starting from LSWS v5.4.2.
SmartPush no-cookie
{{ :litespeed_wiki:config:ls_smartpush_cookie.png?800 |}}
{{ :litespeed_wiki:config:ls_smartpush_cookie_2.png?800 |}}
After you make changes to ''.htaccess'', you will need to restart your browser to avoid getting a cached version. After that, you should see something like the following:
{{ :litespeed_wiki:config:ls_smartpush_cookie_disable_cookie.png?800 |}}