2011-10-18 19 views
8

Chúng tôi đã phát triển một ứng dụng Ruby on Rails. Gần đây, chúng tôi đã triển khai lại ứng dụng này phía sau proxy Apache sử dụng HTTPS.IE tuyên bố không nhận ra văn bản/javascript Loại MIME

Kể từ khi chúng tôi đã thực hiện điều này một số người dùng của chúng tôi được gửi đến các trang sau khi cố gắng sử dụng các ứng dụng: http://shell.windows.com/fileassoc/mimeassoc.asp?mime=text/javascript, mà nói:

MIME Type: text/javascript 
Description: UnKnown 
Windows does not recognize this MIME type. 

Có ai biết trong hoàn cảnh nào IE sẽ tuyên bố không biết phải làm gì với tệp text/javascript? Nó chỉ là một người dùng này cho đến nay.

Windows 7/IE 8 và XPSP2/IE8

EDIT Thêm HTTP response đầy đủ mà IE barfs trên

HTTP/1.1 200 OK 
Date: Mon, 24 Oct 2011 00:31:27 GMT 
Server: Apache/2.2.3 (CentOS) 
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.9 
ETag: "a6d7d64e3ca943eabc73db920baa7d76" 
Cache-Control: max-age=0, private, must-revalidate 
X-UA-Compatible: IE=Edge,chrome=1 
X-Runtime: 0.003257 
Status: 200 
Content-Type: text/javascript; charset=utf-8 
Connection: close 

window.location.href='https://xx.xx.org.au/AED/sessions/new' 
+0

là người sử dụng truy cập vào url qua https ... là có bất kỳ thông điệp cảnh báo như "tải một số tài nguyên không được bảo đảm" ... nạp qua http, mà người dùng có thể nhấp vào "không" ? – r0ast3d

+0

Chỉ cần cho đá, loại bỏ tất cả các tiêu đề của bạn ngoại trừ 'Content-Type'. (Bạn có thể sử dụng Fiddler để đặt điểm ngắt khi tải và xóa chúng mà không thay đổi cấu hình máy chủ hoặc trang web của bạn.) Hãy đảm bảo một trong các tiêu đề khác không gây ra mọi thứ trở nên bối rối. Nếu cách đó không hiệu quả, hãy thử xóa khai báo ký tự. – Brad

+0

Thanh công cụ IE nào mà người dùng của bạn đã cài đặt? –

Trả lời

0

IE nên nhận text/javascript (xem for example, 'text/javascript 'được đề cập ở đó). Các yếu tố khác phải được chơi. Bạn có thể thử:

(1) bạn có thể xác định loại trực tiếp trong thẻ script

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

(2) Là javascript đến từ cùng một trang web với cùng một giao thức? Người dùng có thể chặn nội dung không được bảo mật khi đến từ một địa chỉ không an toàn và IE có thể chỉ cho bạn một thông báo lỗi gây hiểu lầm.

(3) Vì bây giờ bạn đang ở phía sau apache, có bất kỳ tiêu đề nào khác có thể gây nhầm lẫn cho IE không?

(4) Tôi đặt cược bạn đã kiểm tra xem Rails có đặt đúng vị trí cho tài nguyên không (nghĩa là nó sử dụng máy chủ proxy, apache, chứ không phải đường ray).

1

Ok. Có vẻ như chúng tôi đã tìm ra. Đó là lỗi trong ứng dụng của chúng tôi khiến ứng dụng gửi một số JavaScript không hợp lệ đến trình duyệt. Có vẻ như Rails xử lý trang đổi hướng của phiên không được thẩm định đến trang đăng nhập bằng cách gửi một chút đoạn JS trông như thế này:

window.location.href='https://blah.blah.org.au/APP/sessions/new' 

Chúng tôi đã có một lỗi đánh máy trong ERB cho tập tin này đã làm cho nó gửi thông điệp này thay vì:

' %> 
window.location.href='https://blah.blah.org.au/APP/sessions/new' 

Điều thú vị là chỉ một số phiên bản của IE bị nhầm lẫn bởi điều này.

+0

Hình như tôi đã nói quá sớm - Javascript là ngay bây giờ nhưng chúng tôi vẫn nhận được lỗi trên một vài máy XP/IE8. – AndrewR

0

làm tiêu đề phản hồi http chỉ định X-Content-Type-Options: nosniff? nếu có, tức là9 sẽ không thực thi bất kỳ tập lệnh nào cho đến khi bạn làm như vậy

3

Bạn nên thử application/javascript.

+1

theo wikipedia, IE 6 đến 8 không nhận ra điều này http://en.wikipedia.org/wiki/Client-side_JavaScript – MarianP

+0

theo câu trả lời của riêng mình, nó không phải là do 'văn bản/javascript' đã không được công nhận. 'ứng dụng/javascript' không phải là câu trả lời đúng vì câu trả lời này có thể không được nhận dạng bởi một số phiên bản của IE trước nhận xét trước của tôi. – MarianP

+0

Tôi đã downvoted câu trả lời của bạn và sau đó hủy bỏ downvote sau này vì tôi rất nhiều không thích được downvoted cho cố gắng để giúp đỡ với những câu hỏi khó hiểu hoặc phức tạp. không phải là câu trả lời đúng anyway. – MarianP

0

Nghi ngờ của tôi là nội dung javascript của bạn không chính xác hoặc không chính xác là "IE". :-)

Trước hết, nếu bạn đang nói UTF-8, bạn có chắc chắn đây là những gì bạn đang phục vụ không? Phù hợp với lời khuyên của Brad, hãy bỏ định nghĩa bộ ký tự và xem liệu hành vi có thay đổi hay không.

Cũng lấy một bản sao của javascript đang được trả lại và cố gắng xác thực nó ở đâu đó. Tôi đã nhìn thấy những người khác báo cáo các vấn đề mà javascript đã bị hỏng theo một số cách cụ thể mà chỉ gây ra một số phiên bản của IE để phá vỡ.Bạn đang nối nhiều tập tin js hay bất cứ thứ gì như thế? Một ví dụ khác là thẻ%> ngẫu nhiên trong tệp javascript của bạn sẽ gây nhầm lẫn cho một số trình duyệt.

Bằng cách lấy mặt khách hàng có giá trị trả lại bằng công cụ phát triển Chrome hoặc Chrome, bạn có thể chắc chắn proxy không sửa đổi tiêu đề hoặc mã hóa (bao gồm gzip).

Tôi cũng đã nghe nói rằng một số phiên bản cũ hơn của IE không xử lý các mimetypes đúng cách trong iframe. Bạn có đang sử dụng iframe không?

Cuối cùng nhưng không kém phần quan trọng, một số phần mềm chống vi-rút/bảo mật sẽ sửa đổi yêu cầu gửi Chấp nhận tiêu đề (không đẹp lắm?) Lừa máy chủ xem trình duyệt không hỗ trợ gzip hay gì đó. Bạn có thể lấy một bản sao của yêu cầu gửi đi cho javascript không? Bạn muốn kiểm tra các tiêu đề yêu cầu đã sửa đổi.

+0

Vâng. Tôi nghi ngờ rằng IE đang làm một số phân tích cú pháp trên kịch bản trả về để thử và xác định xem nó thực sự là JS hay không, nhưng tôi không biết chính xác những gì nó không thích về nó được nêu ra. – AndrewR

0

Bạn có thể thả thuộc tính type của thẻ script. HTML5 không yêu cầu nó, và tất cả các trình duyệt hiểu nó là "hương vị địa phương của JavaScript", đó là những gì bạn muốn. Trang của bạn sẽ không xác thực đối với loại tài liệu HTML4, nhưng miễn là bạn biết tại sao trang đó không xác thực, tôi nghĩ điều đó không sao. Quan trọng hơn để làm việc hơn là xác thực.

+0

Đây không phải là tài liệu HTML. Nó không có loại nội dung 'text/html' cũng không phải thẻ' doctype'. – eaj

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