2012-09-11 29 views
6

Tôi có một tệp JavaScript khá lớn ở đây mà tôi muốn nhúng vào trang web của mình. Máy chủ HTTP đủ thông minh để GZIP tệp trước khi phân phối cho trình duyệt.Tại sao Safari không chấp nhận nén GZIP?

Tuy nhiên, tôi đã thử nghiệm với Google Chrome và Safari.

Trên Chrome, nó hoạt động rất tốt. 400K đi xuống nén lên khoảng 100k:

first

second

NHƯNG trên nén Safari không hoạt động:

third

fourth

lần thứ hài hước ing là, trong gz2b.png bạn có thể thấy rõ ràng rằng mã hóa nội dung được đặt thành "gzip".


Lưu ý: Tôi đã đọc lên trên GZIP-Bug trong Safari nơi các tập tin không thể kết thúc vào "gz" hoặc Safari sẽ không chấp nhận GZIP. Kể từ khi tập tin của tôi không kết thúc trên .gz vấn đề này không phải là một vấn đề.

+0

Tiêu đề yêu cầu bạn nhận được trên safari cho biết nội dung là GZIP'ed và chiều dài của nó là 119406 byte. Bạn có chắc công cụ bạn đang sử dụng đang nói cho bạn biết sự thật không? – nos

+0

@nos Đó là công cụ tương tự. Tôi chỉ sử dụng trình kiểm tra web được tích hợp sẵn cho cả hai trình duyệt. – Timo

+0

@nos Bạn đã đúng. Wireshark hiển thị rõ ràng rằng tệp nhỏ hơn rất nhiều so với kích thước ban đầu. Nếu bạn muốn đăng bình luận của bạn như một câu trả lời, tôi sẽ sẵn sàng đánh dấu nó là "câu trả lời đúng". – Timo

Trả lời

7

Tiêu đề HTTP được gửi tới Safari nói rằng nó được nén (Nó có tiêu đề gzip Content-Encoding: và nội dung là Chiều dài nội dung là 119406 byte) - Tôi tin tưởng nhiều hơn số đậm cho biết 430.61 trong Thanh tra Web. Làm thế nào nó xác định cả những con số trong cột trên cùng, tôi không biết.

Bạn có thể nhận được xác minh về số lượng byte sẽ vượt qua dây nếu bạn đánh cắp yêu cầu HTTP bằng công cụ Wireshark.

9

Tôi cũng đã gặp sự cố này, trong khi cố gắng tối ưu hóa thời gian tải của một trang web trên iOS7 Safari dành cho thiết bị di động.

  • Encoded = nén filesize, từ máy chủ
  • Giải mã = ​​nén filesize, địa phương
  • Chuyển = nén kích thước tập tin + tiêu đề gửi và nhận
  • Content-Length = file gửi nén, từ máy chủ

Safari đã chọn cách thực sự kỳ lạ để biểu thị các số này trong trình gỡ lỗi của chúng.

1

Đây là một thời gian trước nhưng tôi đã gặp một vấn đề rất giống hoặc có thể là nguồn gốc của vấn đề này. Khi bạn nén dữ liệu với gzip cho safari như thế này:

gzip jquery.min.js 

Bạn sẽ kết thúc với một jquery.min.js.gz đó sẽ thất bại trong Safari ngay cả khi quy định một cách chính xác như gzip mã hóa dòng tập tin và cũng có khi đổi tên thành jquery.jgz như đã đề cập trong rất nhiều chủ đề khác về vấn đề này. Điều này có vẻ là do tên tệp được mã hóa trong tệp gzip.

Nếu bạn mã hóa một file gzip như thế này:

cat jquery.min.js | gzip > jquery.jgz 

Sau đó, bạn sẽ có một tập tin đó là một vài byte nhỏ hơn và không làm việc một cách hoàn hảo với Safari.

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