Фреймы + странности Internet Explorer

Я сталкиваюсь с очень странным поведением в отношении фреймов и Internet Explorer.

Ситуация такая:

  • У меня есть веб-приложение на www.webapp.com
  • У меня есть клиент, который хочет иметь окно входа в мой www.webapp.com на своем веб-сайте: www.vendor.com
  • The vendor his website is setup by his webdesigner at www.vendor.com. It consists of 2 frames:
    • First frame spans 100% height and width and it's location is at www.webdedesigner.com/clients/vendor
    • Второй кадр охватывает 0,0 и ни на что не указывает

Поле входа на удаленном сайте указывает на мое веб-приложение. И публикует логин + имя пользователя и т. Д. Причина, по которой веб-сайт клиента настроен с помощью фреймов, заключается в том, что адресная строка URL-адреса браузера всегда сохраняется на www.vendor.com. (Тьфу, даже не заводи меня).

Проблема в том, что когда я захожу с www.vendor.com в свое веб-приложение, и мое веб-приложение загружается во фрейме, все мои CSS и Javascript не загружаются.

Это происходит только в IE7/8, я тестировал его в Firefox, Chrome, Opera и Safari, и каждый из них действительно загружает мои файлы CSS и JS так, как должен.

Вот как выглядит мой заголовок:

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="nl" xmlns:xf="http://www.w3.org/2002/xforms"> 
  <head> 
    <title>My Webapp</title> 
    <meta http-equiv="Content-Type" content="text/html" /> 
    <link rel="icon" href="/img/favicon.ico" /> 
    <link rel="shortcut icon" href="/img/favicon.ico" /> 
    <link rel="stylesheet" type="text/css" href="/css/css.php?css=public" /> 
    <script type="text/javascript" src="/js/js.php?js=public"></script> 
  </head> 
  <body> 

Я подозреваю, что IE неправильно обрабатывает реляционные URL-адреса CSS/JS...

Есть еще более странная вещь! Если я очищаю кеш просмотра IE и сначала вхожу на www.webapp.com через этот домен, а затем выхожу из системы и вхожу через www.vendor.com в IE, CSS/JS загружается! Что за...? Все мое веб-приложение находится на HTTPS, поэтому оно не должно кешировать какие-либо ресурсы...

Я ошеломлен, поэтому я прибегаю к размещению здесь .. кто-нибудь знает, что случилось?

Изменить

Хорошо, после того, как я установил правильный инструмент отладки для Internet Explorer (вместо стандартного), я смог проверить отправляемые заголовки HTTP. Итак, я сравнил IE и Firefox и получил следующие результаты:

Запрос IE на вход в мое веб-приложение

(Request-Line):POST /?portal&returnurl=www.vendor.com HTTP/1.1
Accept:application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Content-Type:application/x-www-form-urlencoded
Accept-Encoding:gzip, deflate
Host:www.webapp.nl
Content-Length:40
Connection:Keep-Alive
Cache-Control:no-cache

Ответ IE

(Status-Line):HTTP/1.1 200 OK
Date:Wed, 14 Jul 2010 10:35:34 GMT
Server:Apache
X-Powered-By:PHP/5.1.6
**Set-Cookie:PHPSESSID=uiluornfipr2dk294iro09tgg6; path=/**
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma:no-cache
Set-Cookie:lang=0
Set-Cookie:lang=0
Connection:close
Transfer-Encoding:chunked
Content-Type:text/html; charset=UTF-8

Запрос IE CSS:

(Request-Line):GET /css/css.php?css=portal HTTP/1.1
Accept:*/*
Host:www.webapp.nl
Connection:Keep-Alive

Ответ IE CSS

(Status-Line):HTTP/1.1 200 OK
Date:Wed, 14 Jul 2010 10:35:35 GMT
Server:Apache
X-Powered-By:PHP/5.1.6
**Set-Cookie:PHPSESSID=pe2cio1vhu0shq2i497bjh5oa4; path=/**
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma:no-cache
Content-Length:0
Connection:close
Content-Type:text/html; charset=UTF-8

Запрос Firefox на вход в мое веб-приложение

Host    www.webapp.nl
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language nl,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive

Ответ FF

Date    Wed, 14 Jul 2010 10:38:57 GMT
Server  Apache
X-Powered-By    PHP/5.1.6
**Set-Cookie    PHPSESSID=re10rmqq7u723ht3719o9q5el3; path=/ lang=0 lang=0**
Expires Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma  no-cache
Connection  close
Transfer-Encoding   chunked
Content-Type    text/html; charset=UTF-8

Запрос CSS для FF

Host    www.webapp.nl
Accept  text/css,*/*;q=0.1
Accept-Language nl,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
**Cookie    PHPSESSID=re10rmqq7u723ht3719o9q5el3; lang=0**

Ответ FF CSS

Date    Wed, 14 Jul 2010 10:38:57 GMT
Server  Apache
X-Powered-By    PHP/5.1.6
Expires Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma  no-cache
Connection  close
Transfer-Encoding   chunked
Content-Type    text/css; charset=utf-8

(Некоторые удалены для краткости)

Разница очевидна. IE не отправляет файл cookie вместе с запросом CSS, несмотря на то, что он получил набор файлов cookie из ответа на вход. Firefox отправил cookie вместе с запросом CSS. И мое веб-приложение не возвращает CSS/Script, если не установлен действительный файл cookie.

Итак, любой гуру фреймов / файлов cookie знает, почему IE не отправляет файлы cookie, полученные в первом ответе, в дальнейших запросах ресурсов для загружаемой страницы?

Цитата


person Kwaak    schedule 14.07.2010    source источник


Ответы (2)


По умолчанию IE блокирует куки-файлы со сторонних сайтов, вы должны отметить в строке состояния, что окно конфиденциальности становится активным и сообщает, что он заблокировал куки-файлы на вашем сайте.

person AlfonsoML    schedule 14.07.2010
comment
Хм, похоже, это так, после входа в систему появляется окно конфиденциальности. --- Хотя я этого не понимаю. Настройка файла cookie должна выполняться для домена www.webapp.com, независимо от того, отображается ли адресная строка браузера непосредственно www.webapp.com или он отображает www.webapp.com через набор фреймов. --- Я понимаю, что мне не разрешено устанавливать куки для домена www.vendor.com, но почему IE думает, что я хочу это сделать? (И все другие браузеры этого не делают, они понимают, что я установил файл cookie для домена www.webapp.com)? - person Kwaak; 14.07.2010
comment
IE знает, что вы хотите установить файлы cookie для своего домена webapp.com, но эта страница является фреймом внутри vendor.com. Поскольку эти домены разные, конфигурация IE по умолчанию блокирует запросы домена webapp.com на установку любого файла cookie. IIRC вы можете обойти это, используя некоторый заголовок P3P, когда вы устанавливаете файл cookie. - person AlfonsoML; 14.07.2010

Разве ?js=public не отключается?

person Run CMD    schedule 14.07.2010