2009-09-17 33 views
18

Tôi có trang web và tôi đã thêm tiêu đề hết hạn trên tất cả các trang/hình ảnh và tập lệnh nhưng tôi không biết cách thêm tiêu đề hết hạn vào tập lệnh ngoài.Làm cách nào để thêm tiêu đề hết hạn cho tập lệnh không có trên máy chủ của tôi?

Ví dụ: Google Analytics - nó đã hết hạn tiêu đề được đặt thành 1 ngày.

Google là vấn đề của tôi, một số tập lệnh khác từ các trang web bên ngoài là vấn đề thực sự, chúng không hết hạn tiêu đề.

Trả lời

19

Bạn chỉ có thể thêm trường tiêu đề trong câu trả lời cho các yêu cầu truy cập vào máy chủ của riêng bạn. Nếu yêu cầu đến máy chủ khác, hãy nói máy chủ của Google, máy chủ của Google trả lời yêu cầu.

Vì vậy, giải pháp duy nhất cho vấn đề của bạn là lưu trữ tài nguyên bên ngoài trên máy chủ của riêng bạn. Nhưng điều đó chỉ có thể nếu tài nguyên đó tĩnh, không thay đổi từ yêu cầu để yêu cầu và không phụ thuộc vào những thứ khác.

0

Bạn không thể.

Hãy thử gửi thư điện tử cho (các) người lưu trữ tệp và cố gắng yêu cầu họ áp dụng các tiêu đề hết hạn cho nó.

2

Không thể.

Không được đề xuất (và không phải lúc nào cũng có thể): Nếu nội dung tĩnh, hãy tìm nạp trước bằng tập lệnh và đặt tiêu đề của riêng bạn.

2

Bạn có thể tải động các trang bên ngoài bằng cách sử dụng PHP, vì vậy bạn có thể gửi tiêu đề trước khi xuất dữ liệu gốc. Đây không phải là một giải pháp lý tưởng nhưng nếu bạn thực sự có để bạn có thể muốn sử dụng nó.

<?php 
header('expire-header'); 

echo file_get_contents('http://www.extern.al/website/url'); 
+0

chí này không hoạt động cho tất cả các tập lệnh bên ngoài, tôi đã thử một trang web Magento nhưng không hoạt động đúng cách. – prajosh

19

Cách duy nhất là tạo tập lệnh tải xuống nội dung từ trang web bên ngoài và sau đó thêm tiêu đề cần thiết.

<script type="text/javascript" src="http://external.example.com/foo.js"></script> 

Để

<script type="text/javascript" src="external.php?url=http://external.example.com/foo.js"></script> 

Và external.php là một cái gì đó giống như

<?php 
header("Expire-stuff: something"); 
echo file_get_contents($_GET['url']); 

Tất nhiên điều này có lỗ hổng bảo mật vì vậy tôi muốn khuyên bạn nên sử dụng các chuỗi nhận dạng như external.php tập tin? = foo.js và sau đó sử dụng

$files = array('foo.js' => 'http://external/...'); 
if(isset($files[$_GET['file']])) 
{ 
    echo file_get_contents($files[$_GET['file']]); 
} 

file_get_contents() tất nhiên sẽ mất một số băng thông của bạn vì vậy nó sẽ được đề nghị để cache kết quả cũng có.

+0

Thú vị! Điều này có bất kỳ tác động tốc độ nào không? – v3nt

-9

Bạn có thể thêm tham số chuỗi truy vấn để đánh lừa trình duyệt nghĩ rằng nó yêu cầu một tài nguyên khác. Ví dụ: nếu bạn muốn trình duyệt không bao giờ lưu vào bộ nhớ cache một CSS, bạn có thể thêm dấu chấm hỏi theo sau là một số ngẫu nhiên vào cuối URL. Điều này thường hoạt động nhưng có thể được thực hiện để không hoạt động bởi máy chủ lưu trữ tệp. Hãy thử nó và xem.

+0

cần tuân thủ các tiêu chuẩn thay vì các thủ thuật giá rẻ. –

0

Các mục sau có thể hữu ích cho bạn.

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" 

+1

Không. Bạn chỉ có thể thêm điều này cho tệp js của riêng bạn. Bạn không thể thêm tệp này cho tệp js bên ngoài. –

0

Tôi đã thực hiện một phiên bản của mã mà cho phép bạn chỉ định hết hiệu lực ngày khác nhau cho mỗi kịch bản:

<?php 

$files = array(
    'ga.js' => 'https://ssl.google-analytics.com/ga.js', 
    'bsa.js' => 'https://s3.buysellads.com/ac/bsa.js', 
    'pro.js' => 'https://s3.buysellads.com/ac/pro.js' 
); 

if(isset($files[$_GET['file']])) { 
    if ($files[$_GET['file']] == 'ga.js'){ 
     header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + ((60 * 60) * 48))); // 2 days for GA 
    } else { 
     header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + (60 * 60))); // Default set to 1 hour 
    } 

    echo file_get_contents($files[$_GET['file']]); 
} 

?> 

Thông tin thêm: https://www.catswhocode.com/blog/php-how-to-add-expire-headers-for-external-scripts

Các vấn đề liên quan