2009-03-18 39 views
9

Tôi đang cố gắng thu hẹp một số điều kỳ lạ xảy ra với các cuộc gọi AJAX của mình. Tập lệnh PHP của tôi có điều này lúc bắt đầu:Mã hóa gzip có tương thích với JSON không?

ob_start("ob_gzhandler"); 

Hoạt động tốt với HTML. Nhưng có bất kỳ vấn đề nào khi thực hiện nó với dữ liệu ứng dụng/dữ liệu json không? Bất kỳ trình duyệt nào mà mọi người đều biết?

+0

Làm việc tốt cho tôi. Nó chính xác gửi dữ liệu json với gzip mã hóa nội dung trong php 5.5.15 –

Trả lời

7

Tôi không nghĩ vậy ... Tôi đã sử dụng các tệp tĩnh được lưu trữ dưới dạng JSON được nén trước đây và nó hoạt động tốt với AJAX.

chỉnh sửa: Tôi đã kiểm tra kịch bản php của tôi và điều duy nhất đặc biệt tôi đã là bao gồm những tiêu đề:

Content-Encoding: gzip 
Content-Type: text/plain 

Nếu tôi nhớ đúng, bất cứ khi nào tôi đã cố gắng để thay đổi Content-Type để cái gì đó sẽ chỉ ra JSON, ứng dụng khách gặp sự cố.

+0

Thats thú vị. Tôi sử dụng ứng dụng/json cos Tôi nghĩ thats những gì bạn nên làm cho json. – Jordie

+0

Tôi đang cố ghi nhớ chính xác vấn đề tôi có. Nó có thể là phần AJAX không quan tâm, nhưng để gỡ lỗi nó là một nỗi đau lớn bởi vì Firefox không biết làm thế nào để hiển thị ứng dụng/JSON, trong khi nó hoạt động tốt với văn bản/đồng bằng. –

+0

(bằng cách "gỡ lỗi" Tôi muốn xem trực tiếp url JSON trong trình duyệt của tôi, thay vì đặt điểm ngắt/đăng nhập vào phần AJAX của ứng dụng của tôi) –

2

Bạn có thể đưa ra nội dung bị nén bất cứ khi nào trình duyệt chỉ định gzip trong tiêu đề yêu cầu Accept-Encoding. Trong trường hợp đó, không có sự khác biệt giữa JSON và HTML và không có vấn đề gì sẽ gây ra.

3

Một số trình duyệt cũ hơn, như một số phiên bản IE6 nhất định, nén nội dung gzipped, đặc biệt là nội dung js.

Chỉ cần kiểm tra xem máy chủ của bạn gửi tiêu đề nội dung mã hóa thích hợp, đó là

Content-Encoding: gzip 

Bạn cũng nên kiểm tra các tiêu đề được gửi bởi trình duyệt cho phù hợp Accept-Encoding tiêu đề trước khi gửi nội dung đã giải nén ... đó là ,

Accept-Encoding: gzip,deflate 
+0

Nhưng đây là những gì ob_gzhandler đang làm đúng? – Jordie

+0

Đó là ý tưởng với ob_gzhandler – Jayrox

1

Thay vì cho phép nén trong PHP, tôi sẽ cho phép nén trong Apache (sử dụng mod_deflate) để bạn có thể kiểm tra cho các trình duyệt không tương thích khác nhau và chỉ gửi dữ liệu nén cho các trình duyệt mà chấp nhận nó và xử lý nó đúng ly.

http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

+1

Đó là những gì ob_gzhandler làm. Tôi thích kiểm soát có lập trình. – Jordie

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