Need Help With Expires Headers For Yslow

Need expires headers to satisfy yslow on GMetrix.  I am on an Apache 2.4 Linux system.

When I use this code I get an 500 Internal Server Error

# Optimize cache-control
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault “access plus 1 month”
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
ExpiresByType image/jpg “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
ExpiresByType text/html “access plus 3 days”
ExpiresByType text/xml “access plus 1 seconds”
ExpiresByType text/plain “access plus 1 seconds”
ExpiresByType application/xml “access plus 1 seconds”
ExpiresByType application/rss+xml “access plus 1 seconds”
ExpiresByType application/json “access plus 1 seconds”
ExpiresByType text/css “access plus 1 week”
ExpiresByType text/javascript “access plus 1 week”
ExpiresByType application/javascript “access plus 1 week”
ExpiresByType application/x-javascript “access plus 1 week”
ExpiresByType image/x-ico “access plus 1 year”
ExpiresByType image/x-icon “access plus 1 year”
ExpiresByType application/pdf “access plus 1 month”
<IfModule mod_headers.c>
Header unset ETag
Header unset Pragma
Header unset Last-Modified
Header append Cache-Control “public, no-transform, must-revalidate”
Header set Last-modified “Mon, 1 Oct 2018 10:10:10 GMT”

Open in new window

my headers in htaccess looks like this

<IfModule mod_headers.c>
Header always set Content-Security-Policy "upgrade-insecure-requests;"

Open in new window

The log says
[Sun Dec 23 12:59:33.053088 2018] [core:alert] [pid 7617:tid 140692416341760] [client] /data/web/ ExpiresDefault takes one argument, an expiry date code

Open in new window

Seems everything on the internet and the plugins are not suited for Apache 2.4.  Please help.

Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

David FavorLinux/LXD/WordPress/Hosting SavantCommented:
Post the full 500 error from your /var/log/apache2/error.log or equivalent file.
David FavorLinux/LXD/WordPress/Hosting SavantCommented:
Also keep in mind, if you're using LetsEncrypt auto renewal for your SSL certs, you may find the following can get you in a bind where you can't renew your certs...

Header always set Content-Security-Policy "upgrade-insecure-requests;"

Open in new window

If you do force add this header, likely best to use Acme V2 DNS challenges for renewals, for 100% renewal success.
sharingsunshineAuthor Commented:
I don't do automatic renewals so that isn't a factor.
Your Guide to Achieving IT Business Success

The IT Service Excellence Tool Kit has best practices to keep your clients happy and business booming. Inside, you’ll find everything you need to increase client satisfaction and retention, become more competitive, and increase your overall success.

David FavorLinux/LXD/WordPress/Hosting SavantCommented:
Attach a copy of your full /data/web/ file as looks like something else is slightly broken.
sharingsunshineAuthor Commented:
# BEGIN WP Rocket v3.3.2
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset UTF-8
# Force UTF-8 for a number of file formats
<IfModule mod_mime.c>
AddCharset UTF-8 .atom .css .js .json .rss .vtt .xml
# FileETag None is not enough for every server.
<IfModule mod_headers.c>
Header unset ETag
# Since we’re sending far-future expires, we don’t need ETags for static content.
FileETag None
<IfModule mod_alias.c>
<FilesMatch "\.(html|htm|rtf|rtx|txt|xsd|xsl|xml)$">
<IfModule mod_headers.c>
Header set X-Powered-By "WP Rocket/3.3.2"
Header unset Pragma
Header append Cache-Control "public"
Header unset Last-Modified
<FilesMatch "\.(css|htc|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$">
<IfModule mod_headers.c>
Header unset Pragma
Header append Cache-Control "public"
# Expires headers (for better cache control)
<IfModule mod_expires.c>
        ExpiresActive on
        # Perhaps better to whitelist expires rules? Perhaps.
        ExpiresDefault                              "access plus 1 month"
        # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
        ExpiresByType text/cache-manifest           "access plus 0 seconds"
        # Your document html
        ExpiresByType text/html                     "access plus 0 seconds"
        # Data
        ExpiresByType text/xml                      "access plus 0 seconds"
        ExpiresByType application/xml               "access plus 0 seconds"
        ExpiresByType application/json              "access plus 0 seconds"
        # Feed
        ExpiresByType application/rss+xml           "access plus 1 hour"
        ExpiresByType application/atom+xml          "access plus 1 hour"
        # Favicon (cannot be renamed)
        ExpiresByType image/x-icon                  "access plus 1 week"
        # Media: images, video, audio
        ExpiresByType image/gif                     "access plus 4 months"
        ExpiresByType image/png                     "access plus 4 months"
        ExpiresByType image/jpeg                    "access plus 4 months"
        ExpiresByType image/webp                    "access plus 4 months"
        ExpiresByType video/ogg                     "access plus 1 month"
        ExpiresByType audio/ogg                     "access plus 1 month"
        ExpiresByType video/mp4                     "access plus 1 month"
        ExpiresByType video/webm                    "access plus 1 month"
        # HTC files  (css3pie)
        ExpiresByType text/x-component              "access plus 1 month"
        # Webfonts
        ExpiresByType font/ttf                      "access plus 4 months"
        ExpiresByType font/otf                      "access plus 4 months"
        ExpiresByType font/woff                     "access plus 4 months"
        ExpiresByType font/woff2                    "access plus 4 months"
        ExpiresByType image/svg+xml                 "access plus 1 month"
        ExpiresByType application/ "access plus 1 month"
        # CSS and JavaScript
        ExpiresByType text/css                      "access plus 1 year"
        ExpiresByType application/javascript        "access plus 1 year"
# Gzip compression
<IfModule mod_deflate.c>
# Active compression
SetOutputFilter DEFLATE
# Force deflate for mangled headers
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
# Don’t compress images and other uncompressible content
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png|rar|zip|exe|flv|mov|wma|mp3|avi|swf|mp?g|mp4|webm|webp|pdf)$ no-gzip dont-vary
# Compress all output labeled with one of the following MIME-types
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
                                          application/javascript \
                                          application/json \
                                          application/rss+xml \
                                          application/ \
                                          application/x-font-ttf \
                                          application/xhtml+xml \
                                          application/xml \
                                          font/opentype \
                                          image/svg+xml \
                                          image/x-icon \
                                          text/css \
                                          text/html \
                                          text/plain \
                                          text/x-component \
<IfModule mod_headers.c>
Header append Vary: Accept-Encoding
# END WP Rocket
# BEGIN WpFastestCache
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^
# Start WPFC Exclude
# End WPFC Exclude
# Start_WPFC_Exclude_Admin_Cookie
RewriteCond %{HTTP:Cookie} !wordpress_logged_in_[^\=]+\=algol|business-woo|gilles|rocket2
# End_WPFC_Exclude_Admin_Cookie
RewriteCond %{HTTP_HOST} ^
RewriteCond %{HTTP_USER_AGENT} !(facebookexternalhit|Twitterbot|LinkedInBot|WhatsApp|Mediatoolkitbot)
RewriteCond %{HTTP_USER_AGENT} !(WP\sFastest\sCache\sPreload(\siPhone\sMobile)?\s*Bot)
RewriteCond %{REQUEST_URI} !(\/){2}$
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{QUERY_STRING} !.+
RewriteCond %{HTTP:Cookie} !comment_author_
RewriteCond %{HTTP:Cookie} !safirmobilswitcher=mobil
RewriteCond %{HTTP:Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/all/$1/index.html -f [or]
RewriteCond /data/web/$1/index.html -f
RewriteRule ^(.*) "/wp-content/cache/all/$1/index.html" [L]
<FilesMatch "index\.(html|htm)$">
AddDefaultCharset UTF-8
<ifModule mod_headers.c>
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Mon, 29 Oct 1923 20:30:00 GMT"
# END WpFastestCache
RedirectMatch 301 https?://$
RewriteBase /
#RedirectMatch 301 /index\.html$ /index.php
RedirectMatch 301 /SFN/(.+)\.html$ /$1-2
RewriteCond %{QUERY_STRING} controller=product [NC]
RewriteCond %{QUERY_STRING} id_product=784 [NC]
RewriteRule ^/?index\.php$ /product/sunshine_heroes_elderberry_immune_p_851/? [NC,L,R=301]
RedirectMatch 301 /pdf/hawthorn.pdf$ /wp-content/uploads/2019/03/hawthorn.pdf
RedirectMatch 301 /Focus_Attention_90_capsules_p_497.html$ /product/focus_attention_90_capsules_p_2011/
RedirectMatch 301 /Food_Enzymes_Capsules_p_136.html$ /product/food_enzymes_capsules_p_1174/
RedirectMatch 301 /c_x_p_182.html$ /product/cxp182/
RedirectMatch 301 /5_HTP_Power_p_460.html$ /product/5_htp_power_p_1914/
RedirectMatch 301 /hydrangea\.html$ /product/hydrangea_p_414/
RedirectMatch 301 /petsupp\.html$ /pet_catalog_sp_210/
RedirectMatch 301 /product/boneskinpoulticep167.html$ /product/bone_skin_poultice_p_167/
RedirectMatch 301 /news.html$ /free_email_newsletters_sp_209/
RedirectMatch 301 /N_Acetyl_Cysteine_250mg._p_520.html$ /product/n-acetyl-cysteine-300mg/
RedirectMatch 301 /Para_Cleanse_w_Paw_Paw_p_245.html$ /product/para_cleanse_w_pawpaw_p_245/
RedirectMatch 301 /The_Importance_of_Water_sp_170.htmlbr$ /the_importance_of_water_sp_170/
RewriteCond %{REQUEST_URI} !(images|media|image|thumbs|ATNblog|cgi-bin) [NC]
# force url to lowercase if upper case is found
RewriteCond %{REQUEST_URI} [A-Z]
# ensure it is not a file on the drive first
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*).html strtolower.php?rewrite-strtolower-url=/product/$1 [QSA,L]
RedirectMatch 301 /donna_430/home.php$ /
RedirectMatch 301 /ATNblog/atn\.html$ /a_touch_of_nature_newsletter_sp_40/
RedirectMatch 301 /product/herbasaurs_page_1_c_90$ /product-category/home/children_page_1_c_4/sunshine_heroes_page_1_c_122/
RedirectMatch 301 /product/essential_oil_singles_page_1_c_33$ /product-category/home/essential_oils_100_pure_page_1_c_1/essential_oils_page_1_c_33/
RedirectMatch 301 /product/paracleansewpawpawp245/$ /product/para_cleanse_w_pawpaw_p_245/
RewriteCond %{QUERY_STRING} p=2 [NC]
RewriteRule ^/?83-Female_page_1_c_73$ /product-category/home/female_page_1_c_73/page/2/? [NC,L,R=301]
RedirectMatch 301 /The_Herbal_Medicine_Ch$ /the_herbal_medicine_chest_sp_17/
RedirectMatch 301 /wisdom\.html$ /wisdoml_sp_220/
RedirectMatch 301 /isearch2/admin/phpinfo.php$ /product/cleanstartcleansedetoxprogramwildberryp357/
RedirectMatch 301 /cgi-bin/asp(donna)?/sample\.html$ /contact7
RedirectMatch 301 /contact-us$ /contact7
######### Missing Gallery Elements and Endings ########
RewriteRule ^gallery(2(\.3)?)?/v/travel_7/costarica/(.+)\.html [R=301,L]
RewriteRule ^gallery(2(\.3)?)?/v/bluebirdcove/(.+)\.html [R=301,L]
RewriteRule ^gallery(2(\.3)?)?/v/travel_7/(.+)\.html [R=301,L]
RewriteRule ^gallery(2(\.3)?)?/v/familyfriends/(.+)\.html [R=301,L]
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^gallery(2(\.3)?)? [R=301,L]
RewriteRule ^gallery(2(\.3)?)? [R=301,L]
############ End Gallery Rewrites ############
RewriteCond %{QUERY_STRING} pageid=59 [NC]
RewriteRule ^/?pages\.php$ /research_topics_for_children_sp_16/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} pageid=36 [NC]
RewriteRule ^/?pages\.php$ /bandit-s-heartworm-program/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=product [NC]
RewriteCond %{QUERY_STRING} id_product=411 [NC]
RewriteRule ^/?index\.php$ /index.php?controller=product&id_product=462 [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=product [NC]
RewriteCond %{QUERY_STRING} id_product=79 [NC]
RewriteRule ^/?index\.php$ /index.php?controller=product&id_product=851 [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=cms [NC]
RewriteCond %{QUERY_STRING} id_cms=83 [NC]
RewriteRule ^/?index\.php$ /a_natural_solution_4_you_newsletter_sp_83/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=cms [NC]
RewriteCond %{QUERY_STRING} id_cms=117 [NC]
RewriteRule ^/?index\.php$ /be_free_from_headaches_sp_117/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=category [NC]
RewriteCond %{QUERY_STRING} id_category=100 [NC]
RewriteRule ^/?index\.php$ /product-category/home/children_page_1_c_4/sunshine_heroes_page_1_c_122/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=cms [NC]
RewriteCond %{QUERY_STRING} id_cms=239 [NC]
RewriteRule ^/?index\.php$ /mens_health_sp_302/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=cms [NC]
RewriteCond %{QUERY_STRING} id_cms=5 [NC]
RewriteRule ^/?index\.php$ /home_spa_party_plan_sp_5/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=cms [NC]
RewriteCond %{QUERY_STRING} id_cms=9 [NC]
RewriteRule ^/?index\.php$ /contents_of_quot_a_more_excellent_way_quot_by_pastor_henry_wright_sp_18/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=cms [NC]
RewriteCond %{QUERY_STRING} id_cms=314 [NC]
RewriteRule ^/?index\.php$ /ahmmydoing/? [NC,L,R=301]
RedirectMatch 301 /heartprevent.html$ /heartworm_prevention_sp_104/
RedirectMatch 301 /Una_De_Gato_Cats_Claw_p_269.html$ /product/una_de_gato_cats_claw_p_1496/
RedirectMatch 301 /Silver_Shield_Colloidal_Silver_14_ppm_p_484.html$ /product/silvershieldaquasoltechnologycolloidalsilver18ppmp730/
#RewriteRule ^/CleanStart_Cleanse_Detox_Program_p_356\.html$ /product/cleanstartcleansedetoxprogramapplecinnamonp356/ [NC,L,R=301]
RewriteCond %{QUERY_STRING} pageid=202 [NC]
RewriteRule ^/?pages\.php$ /essential_oil_recipes_pets_sp_181/ [NC,L,R=301]
RedirectMatch 301 /home/(\d+)-(.+)_(.+)_(.+)_p_(\d+)\.html$ /product/$2_$3_$4_p_$5/
RedirectMatch 301 /(.+)_(.+)?_(.+)_fl\._oz\._p_(\d+)\.html$ /product/$1-$2-$3-fl-oz/
RedirectMatch 301 /(.+)_(.+)?_(.+)\.?_p_(\d+)\.html$ /product/$1-$2-$3/
RedirectMatch 301 /(.+)_(.+)?_(.+)_p_(\d+)\.html$ /product/$1_$2_$3_p_$4/
RedirectMatch 301 /(.+)_(.+)?_(.+)_(.+)_(.+)_p_(\d+)\.html$ /product/$1_$2_$3_$4_$5_p_$6/
RedirectMatch 301 /(.+)_(.+)?_(.+)_p_(\d+)\.html$ /product/$1$2$3p$4/
#RedirectMatch 301 /home/(\d+)?-(.+)_(.+)_(.+)_(.+)?_(.+)?_(.+)?_p_(\d+)\.html$ /product/$2$3$4$5$6$7p$8/
#RedirectMatch 301 /Dieter_s_Cleanse_p_563.html$ /product/dieterscleansep563/
RedirectMatch 301 /personalcarepage1c17/352-sunshine_brite_toothpaste_p_352.html$ /product/xylibrite_toothpaste_p_773/
RedirectMatch 301 /content/198-chronicfatigueamoreexcellentwaysp199$ /chronic_fatigue_a_more_excellent_way__sp_199/
RedirectMatch 301 /essentialoils100purepage1c1/44-neroli_100_pure_essential_oil_p_44.html$ /product/neroli-organic-5-ml-100-pure-essential-oil/
RedirectMatch 301 /Lecithin_p_507.html$ /product/lecithinp507/
RedirectMatch 301 /natures_noni_juice_2_32_fl._oz._each_p_128.html$ /product/nature-s-noni-juice-2-32-fl-oz-each/
RedirectMatch 301 /home/\d+-(.+)$ /product/$1
RedirectMatch 301 /Intestinal_System_page_1_c_37.html$ /product-category/home/intestinal-system-category-page/
RedirectMatch 301 ^/herbasaurs_elderberry_plus_chewable_tablets_p_79.html$ /product/sunshine_heroes_elderberry_immune_p_851/
RedirectMatch 301 ^/CleanStart_Cleanse_Detox_Program_p_356\.html$ /product/cleanstartcleansedetoxprogramapplecinnamonp356/
RewriteCond %{QUERY_STRING} controller=product [NC]
RewriteCond %{QUERY_STRING} id_product=26 [NC]
RewriteRule ^/?index\.php$ /product/geranium-15-ml-100-pure-essential-oil/? [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=cms [NC]
RewriteCond %{QUERY_STRING} id_cms=([0-9]+)\%3F [NC]
RewriteRule ^/?index\.php$ /index.php?controller=cms&id_cms=%1 [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=product [NC]
RewriteCond %{QUERY_STRING} id_product=([0-9]+)\%3F [NC]
RewriteRule ^/?index\.php$ /index.php?controller=product&id_product=%1 [NC,L,R=301]
RewriteCond %{QUERY_STRING} controller=category [NC]
RewriteCond %{QUERY_STRING} id_category=([0-9]+)\%3F [NC]
RewriteRule ^/?index\.php$ /index.php?controller=category&id_category=%1 [NC,L,R=301]
<IfModule mod_headers.c>
Header always set Content-Security-Policy "upgrade-insecure-requests;"
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
# BEGIN ShortPixelWebp
# END ShortPixelWebp
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

Open in new window

David FavorLinux/LXD/WordPress/Hosting SavantCommented:
You .htaccess is valid.

I dropped your .htaccess onto a random server + can see .htaccess being ingested into Apache with no 500 errors in the Apache error log.

Provide the entire 500 error from your Apache error log. Likely /var/log/apache2/error.log or similar.

If you have wp-config.php WP_DEBUG set, then your errors will emit into your WordPress debug log.
sharingsunshineAuthor Commented:
In the original question I gave the 500 log entry.  Now, when I look at yslow I am getting a B for a grade and this seems to be the only thing that is tripping it up.
David FavorLinux/LXD/WordPress/Hosting SavantCommented:
If you're still seeing a 500 error, this must be fixed before performance testing will have any meaning.

Best to open another question regards performance.

Pull your .htaccess file into vi + do this:

:set nobomb

Open in new window

Then do this...

:set list

Open in new window

To see any stray, non-printable characters in your .htaccess file on the ExpiresDefault line.

Also, actually attach your .htaccess file (rather than cut + paste) for testing.

Remember: Attaching the file will only be useful if you use SFTP, SSH, rsync or similar to pull a copy of your file. If you cut + past your file to move it between machines, this destroys all non-printable characters.
sharingsunshineAuthor Commented:
I am not still seeing the 500 error.  Now the only help I need is the header line in the screenshot above is lowering my grade in can you help with that?
David FavorLinux/LXD/WordPress/Hosting SavantCommented:
If the 500 error has been fixed, please provide a comment about exactly how you fixed the problem.

Then close this questions.

Then open a new question about effecting GTMetrix grading as this is a complex subject + very different than fixing 500 errors.

In your new question provide your actual URL for testing.

Tip: Sometimes GTMetrix gives useful feedback, sometimes completely wrong feedback. Where "wrong" means if you follow their direction, like removing version strings from assets, you'll profoundly change (and likely break) site behavior.

So striving for 100% score on GTMetrix will cause more problems than benefits.

And doing some suggested fixes will be highly useful.

Generally I stick with fix suggests as these are all useful... well... except there's a current bug in WebPageTest which shows an "F" score for sub second serving of the HTML asset... so if you have a 100ms time to generate + serve your HTML component (typical with WordPress + static sites), then to me you have an "A" score, as there's no way to speed up raw packet speed going down the wire.

Open a new question + likely you'll have a great deal of practical advice for speeding up your site.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
sharingsunshineAuthor Commented:
That error was back in December so I can't say how it was fixed.  However, I took your suggestion and used GtMetrix and got all A's.  So I am good for now.
David FavorLinux/LXD/WordPress/Hosting SavantCommented:

Good luck!
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.