2011-10-18 9 views
8

Rozwijamy aplikację Ruby on Rails. Niedawno ponownie wdrożyliśmy tę aplikację za serwerem proxy Apache, który używa protokołu HTTPS.IE twierdzi, że nie rozpoznaje tekstu/javascript typu MIME

Ponieważ zrobiliśmy to jeden z naszych użytkowników zostanie wysłana do następnej strony, gdy próbuje korzystać z aplikacji: http://shell.windows.com/fileassoc/mimeassoc.asp?mime=text/javascript, który mówi:

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

Czy ktoś wie, w jakich okolicznościach IE nie zastrzeżenia wiesz, co zrobić z plikiem text/javascript? To tylko ten jeden użytkownik do tej pory.

Windows 7/IE 8 i XPSP2/IE8

EDIT Dodawanie odpowiedź pełną HTTP IE barfs na

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

jest łatwy dostęp do adresu URL za pomocą https ... czy są jakieś komunikaty ostrzegawcze, takie jak „load niektóre zasoby nie są zabezpieczone” ... ładowany przez HTTP, które użytkownik może kliknięciu „nie” ? – r0ast3d

+0

Tylko dla kopnięć usuń wszystkie nagłówki z wyjątkiem 'Content-Type'. (Możesz użyć Fiddlera , aby ustawić punkt przerwania podczas ładowania i usunąć je bez zmiany konfiguracji witryny lub serwera.) Upewnijmy się, że jeden z innych nagłówków nie powoduje rzeczy, które można pomylić. Jeśli to nie zadziała, spróbuj usunąć deklarację zestawu znaków. – Brad

+0

Jakie paski narzędzi IE zainstalował twój użytkownik? –

Odpowiedz

0

IE powinien rozpoznać text/javascript (patrz for example „text/javascript "jest tam wspomniany). Inne czynniki muszą być w grze. można spróbować:

(1) można określić typ bezpośrednio w tagu script

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

(2) Czy javascript pochodzących z tego samego miejsca z tego samego protokołu? Użytkownik może zablokować zawartość, która nie jest zabezpieczona, gdy przychodzi z niezabezpieczonego adresu, a IE może po prostu otrzymać mylący komunikat o błędzie.

(3) Ponieważ teraz znajdujesz się za apache, czy istnieją inne nagłówki, które mogą wprowadzać w błąd IE?

(4) Założę się, że sprawdziłeś, czy Railsy ustawiają odpowiednie miejsce dla zasobów (to znaczy, że używa hosta proxy, apache, nie szyny).

1

Ok. Wygląda na to, że to rozgryzliśmy. Błąd w naszej aplikacji spowodował wysłanie do przeglądarki nieprawidłowego kodu JavaScript. Wydaje Rails obsługuje przekierowania z nieuwierzytelnionych sesji do strony logowania wysyłając trochę JS fragment, który wygląda tak:

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

mieliśmy literówkę w ERB dla tego pliku, który wydał to wysłać to zamiast:

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

Co ciekawe, tylko niektóre wersje IE są zdezorientowane.

+0

Wygląda na to, że mówiłem za wcześnie - JavaScript jest teraz, ale wciąż otrzymujemy błąd na kilku komputerach XP/IE8. – AndrewR

0

czy nagłówki odpowiedzi HTTP określają X-Content-Type-Options: nosniff? Jeśli tak, to ie9 nie wykona żadnego skryptu, dopóki tego nie zrobisz,

3

Powinieneś spróbować application/javascript.

+1

według wikipedia, IE od 6 do 8 nie rozpoznaje tego http://en.wikipedia.org/wiki/Client-side_JavaScript – MarianP

+0

według własnej odpowiedzi, nie było to spowodowane tym, że "text/javascript" nie został rozpoznany. "application/javascript" nie jest poprawną odpowiedzią, ponieważ ta wersja może nie być rozpoznawana przez niektóre wersje IE-a, od mojego poprzedniego komentarza. – MarianP

+0

Potraktowałem twoją odpowiedź, a następnie anulowałem zdanie końcowe, ponieważ bardzo nie podoba mi się, że zostałem odrzucony za próbę pomocy w mylących lub złożonych pytaniach. i tak nie jest to właściwa odpowiedź. – MarianP

0

Podejrzewam, że zawartość JavaScript jest nieprawidłowa lub po prostu nie "IE". :-)

Przede wszystkim, jeśli mówisz, że jego kodowanie UTF-8 jest pewne, to właśnie służysz? Zgodnie z radą Brada, upuść definicję zestawu znaków i zobacz, czy zachowanie się zmienia.

Złap kopię zwróconego javascript i spróbuj go gdzieś sprawdzić. Widziałem, jak inni zgłaszali problemy, w których skrypt javascript był uszkodzony w pewien określony sposób, który powodował uszkodzenie tylko niektórych wersji IE.Czy łączenie wielu plików JS lub coś podobnego? Innym przykładem jest przypadkowy tag%> w twoim pliku javascript, który zmyli niektóre przeglądarki.

Przechwytując stronę ze zwracaną wartością za pomocą narzędzi firebug lub chrome developer, możesz mieć pewność, że proxy nie przekręca nagłówków ani kodowania (w tym gzip).

Słyszałem również, że niektóre starsze wersje IE nie obsługują właściwie typów MIME w elementach iframe. Czy w ogóle korzystasz z elementu iframe?

Wreszcie niektóre programy antywirusowe/zabezpieczające zmodyfikują żądanie wychodzące Zaakceptuj nagłówki (niezbyt miłe?) Oszukując serwer w przekonaniu, że przeglądarka nie obsługuje gzip lub czegoś podobnego. Czy możesz pobrać kopię wychodzącej prośby o javascript? Chcesz sprawdzić zmodyfikowane nagłówki żądań.

+0

Tak. Podejrzewam, że IE robi pewne parsowanie na zwróconym skrypcie, aby spróbować określić, czy rzeczywiście jest to JS, czy nie, ale nie wiem dokładnie, co jeszcze nie lubi. – AndrewR

0

Można usunąć atrybut type znacznika script. HTML5 tego nie wymaga, a wszystkie przeglądarki rozumieją, że jest to "ich lokalny smak JavaScript", czyli tego, czego potrzebujesz. Twoja strona nie będzie sprawdzać poprawności w stosunku do dokumentu w formacie HTML4, ale dopóki wiesz, dlaczego nie zatwierdza, myślę, że to w porządku. Ważniejsze do pracy niż do zatwierdzenia.

+0

To nie jest dokument HTML. Nie ma w sobie typu zawartości 'text/html' ani tagu' doctype'. – eaj

Powiązane problemy