2012-02-29 15 views
7

Tôi đang sử dụng máy chủ tích hợp trên MacBook của mình.Nếu tôi sử dụng các tệp JavaScript được nén, tôi nhận được các lỗi ký tự/mã thông báo bất hợp pháp trong cả Chrome và Firefox

Giả sử tập lệnh của tôi là foo.js. Này hoạt động trong cả hai trình duyệt thử nghiệm của tôi (Firefox 10, Chrome 17):

<script type="text/javascript" src="foo.js"></script> 

Nếu tôi gzip tập tin, tuy nhiên, cả hai trình duyệt sẽ cho tôi một lỗi thẻ/ký tự không hợp sau khi tôi thay đổi dòng trên như sau:

<script type="text/javascript" src="foo.js.gz"></script> 

Điều gì mang lại? Liệu loại cần phải được thay đổi quá hay một cái gì đó? Loại thực hành này được viết ở đâu? Bất cứ khi nào tôi nhìn thấy nó được đề cập trên web để "nén tập lệnh của bạn!", Không ai có thể bận tâm đến việc bạn cần phải làm bất cứ điều gì đặc biệt với các liên kết.

+1

Việc này nên được thực hiện trong cấu hình máy chủ trung tâm, sau đó bạn không phải xử lý các tệp được nén theo cách thủ công. Bạn không chắc liệu nó có ý nghĩa nhiều với một máy chủ dev cục bộ không? –

Trả lời

7

Máy chủ web cần thông báo cho trình duyệt biết rằng nội dung được gzipped. Điều này được thực hiện bằng cách sử dụng tiêu đề content-encoding. Có thể bạn có thể cấu hình máy chủ web của mình để cung cấp tiêu đề này với các tệp kết thúc bằng .gz.

Thay vì nén các tệp tĩnh, nó cũng phổ biến cho máy chủ web có chức năng nén tài liệu khi đang di chuyển. Điều này có nghĩa là bạn đặt tệp foo.js bình thường vào thư mục gốc của tài liệu và định cấu hình máy chủ web để nén nó khi gửi nó cho máy khách.

+0

Đây có vẻ là câu trả lời đúng. Thật không may, tôi dường như không thể cấu hình lại máy chủ để gửi tiêu đề chính xác. Tôi uncommented dòng AddEncoding trong /etc/apache2/httpd.conf và khởi động lại máy chủ, nhưng hành vi của nó đã không thay đổi. –

+1

lý do tại sao nén nội dung tĩnh động? nó có ý nghĩa gì không? nén chúng trong quá trình xây dựng. –

2

Lỗi này cũng có thể xảy ra nếu cài đặt gzip của bạn quá cao. Tôi đã thử gzip -9 và ngay cả khi gửi Mã hóa nội dung chính xác, tôi đã gặp lỗi này. Khi tôi chạy một gzip thông thường, thông qua gzip file.js, nó hoạt động chính xác.

+1

huh thú vị, tôi sẽ cố gắng –

1

Tôi có loại lỗi tương tự. Kiểm tra trong tab mạng tương ứng với foo.js. Trong tiêu đề phản hồi, tiêu đề được yêu cầu phải có Mã hóa nội dung: gzipLoại nội dung: application/javascript. Nếu không, trình duyệt sẽ không giải nén tệp của bạn. Trình duyệt nên biết loại mã hóa nội dung nào được thực hiện trên tệp.

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