ฉันจะตั้งค่าส่วนหัวการหมดอายุสำหรับ CSS, JS และรูปภาพได้อย่างไร


38

ฉันเพิ่งวิเคราะห์เว็บไซต์ของฉันด้วยการเพิ่ม pagepeed บน firebug แนะนำให้ฉันตั้งค่าหมดอายุบน CSS, JS และไฟล์รูปภาพ

ฉันสงสัยว่าฉันจะทำเช่นนี้ได้อย่างไร

คำตอบ:


37

อัปเดตการกำหนดค่า Apache ของคุณเพื่อรวมคำสั่งด้านล่างเป็นส่วนหนึ่งของการกำหนดค่าหลักของคุณ:

# 
# associate .js with "text/javascript" type (if not present in mime.conf)
# 
AddType text/javascript .js

# 
# configure mod_expires
# 
# URL: http://httpd.apache.org/docs/2.2/mod/mod_expires.html
# 
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType image/x-icon "access plus 2692000 seconds"
    ExpiresByType image/jpeg "access plus 2692000 seconds"
    ExpiresByType image/png "access plus 2692000 seconds"
    ExpiresByType image/gif "access plus 2692000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2692000 seconds"
    ExpiresByType text/css "access plus 2692000 seconds"
    ExpiresByType text/javascript "access plus 2692000 seconds"
    ExpiresByType application/x-javascript "access plus 2692000 seconds"
    ExpiresByType text/html "access plus 600 seconds"
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>

# 
# configure mod_headers
# 
# URL: http://httpd.apache.org/docs/2.2/mod/mod_headers.html
# 
<IfModule mod_headers.c>
    <FilesMatch "\\.(ico|jpe?g|png|gif|swf|css|js)$">
        Header set Cache-Control "max-age=2692000, public"
    </FilesMatch>
    <FilesMatch "\\.(x?html?|php)$">
        Header set Cache-Control "max-age=600, private, must-revalidate"
    </FilesMatch>
    Header unset ETag
    Header unset Last-Modified
</IfModule>

ฉันได้รับข้อผิดพลาด 500 Internal Server เมื่อฉันวางไว้ในไฟล์. htaccess ของฉัน
KoolKabin

การตั้งค่า Apache ของคุณอาจไม่รองรับตัวเลือกทั้งหมดที่ระบุไว้ข้างต้น ฉันจะอัปเดตคำตอบนี้ในไม่ช้าเพื่อช่วยแก้ปัญหานี้
John Conde

Drupal ของฉันมีการอ้างอิง javascript / css เช่น: www.example.com/misc/jquery.js?v=1.4.4 หรือ www.example.com/sites/all/modules/nice_menus/css/nice_menus.css?mtu293 ดูเหมือนจะไม่ทำงานกับไฟล์ดังกล่าว มันอัพเดทเป็นของวันนี้?
AgA

2
@JohnConde เหตุใดทั้งสองจึงหมดอายุและมีส่วนหัว นอกจากนี้เมื่อทำการอัพเดตอิมเมจหรือ css เช่นจำเป็นต้องเปลี่ยนชื่อไฟล์หรือไม่? หรือไฟล์ css ที่เวอร์ชันใช้งานได้: test.css? 123?
เพิ่มขึ้น

14

คุณสามารถใส่สิ่งนี้ลงใน htaccess ของคุณ:

<FilesMatch "(?i)^.*\.(ico|flv|jpg|jpeg|png|gif|js|css)$">
ExpiresActive On
ExpiresDefault A2592000
</FilesMatch>

มันจะกำหนดเป้าหมายไฟล์ด้วยส่วนขยายเหล่านั้น (ico, flv, jpg และอื่น ๆ ) และตั้งค่าส่วนหัว Expires ให้เป็นเวลาเข้าถึง (A) บวก 30 วัน (2592000 วินาที) คุณสามารถเพิ่มสิ่งนี้ได้ในระดับเซิร์ฟเวอร์หากคุณสามารถเข้าถึงได้


2

ขึ้นอยู่กับโฮสต์และวิธีที่คุณใช้เซิร์ฟเวอร์กับสิ่งเหล่านี้ ตัวเลือกที่ 1) ถ้าคุณควบคุมเซิร์ฟเวอร์ให้ apache เพิ่มส่วนหัวที่หมดอายุในการตอบสนองตัวเลือกที่ 2) ถ้าคุณไม่ได้ควบคุมเว็บเซิร์ฟเวอร์หรือคุณเซิร์ฟเวอร์อิมเมจ / js / css / etc คุณสามารถตั้งค่าส่วนหัวเหล่านี้ได้จากสคริปต์ เซิร์ฟเวอร์พวกเขา

โปรดทราบว่าคำแนะนำเหล่านี้เป็นคำแนะนำที่ดี แต่ไม่เป็นความจริงเด็ดขาด พวกเขามีมากกว่าที่จะช่วยให้คุณประหยัดแบนด์วิดธ์กว่าที่จะเพิ่มความเร็วเว็บไซต์ของคุณ ดังนั้นหากคุณมีอัตราการเข้าชมเว็บไซต์ของคุณต่ำไม่ต้องกังวลกับเรื่องนี้มากนัก


ฉันอยู่กับตัวเลือก 2 ฉันจะตั้งค่าส่วนหัวเหล่านี้จากสคริปต์ได้อย่างไร สคริปต์หมายถึง PHP หรืออันไหน
KoolKabin

คุณสามารถตรวจสอบstackoverflow.com/questions/2185449/…นี่เป็นตัวอย่างของ python แต่ถ้าคุณคุ้นเคยกับการเขียนโปรแกรมฉันคิดว่าคุณจะเข้าใจ ใน php คุณจะต้องใช้ส่วนหัว () แต่โปรดจำไว้ว่าในกรณีนี้ไฟล์ "คงที่" ทั้งหมดจะต้องถูกใช้งานสคริปต์ซึ่งจะเพิ่มโควต้า CPU ของคุณ ตอนนี้มาถึงฉันว่ามีตัวเลือกที่ 3 ใช้ CDN สำหรับไฟล์เหล่านี้
Ilian Iliev

2

การตั้งค่าหมดอายุใน Lightspeed Web Server

ล็อกอินเข้าสู่คอนโซลผู้ดูแลระบบจากนั้น> เซิร์ฟเวอร์ -> ทั่วไป -> การตั้งค่าหมดอายุ -> หมดอายุตามประเภท

เพิ่มรายการต่อไปนี้:

text/css=A604800, text/javascript=A604800, application/javascript=A604800, application/x-javascript=A604800, application/x-shockwave-flash=A604800, image/gif=A604800, image/jpg=A604800, image/jpeg=A604800, image/png=A604800, image/ico=A604800, image/icon=A604800

604800เป็นวินาทีของการหมดอายุซึ่งควรจะเหมาะสำหรับความต้องการของคุณตั้งแต่ 168 ชั่วโมงซึ่งเป็น 7 วัน นอกจากนี้ Light Speed ​​Server ใช้ htaccess ซึ่งคุณต้องเพิ่มบรรทัดต่อไปนี้:

ExpiresActive On

อีกวิธีหนึ่งถ้าคุณไม่มีสิทธิ์การเข้าถึงคอนโซลผู้ดูแลระบบให้ลองใช้ไฟล์. htaccess ต่อไปนี้:

  ExpiresByType image/png A604800
  ExpiresByType image/gif A604800
  ExpiresByType image/jpg A604800
  ExpiresByType image/jpeg A604800
  ExpiresByType text/javascript A604800
  ExpiresByType application/x-javascript A604800
  ExpiresByType text/css A604800
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.