Rails 4 перенаправляет на "данные:" в Chrome
В Google Chrome существует странное поведение, которое также описано в этом вопросе: рельсы перенаправляются на 'data:,
Когда создается новый ресурс и мой контроллер перенаправляется на действие show, chrome инициирует загрузку пустой страницы с 'data:,'
в адресной строке. Ответ автора, который задал вышеупомянутый вопрос, следующий:
Это функция безопасности, содержимое HTML на новой странице соответствует содержимому HTML представленной формы, которое блокирует Chrome.
Однако никаких объяснений о том, как его исправить, не последовало. Поведение присутствует только в браузере Chrome.
Ответы
Ответ 1
Я искал его и обнаружил, что редактирование сообщений с iframe в Rails 4.0 вызывает перенаправление на "data:,"
Rails 4 теперь устанавливает заголовок X-XSS-Protection для всех запросов, поэтому iframe отключает защиту XSS в Chrome после отправки формы. (https://github.com/elektronaut/sugar/issues/41#issuecomment-25987368)
Решение, добавьте его в контроллер:
before_filter :disable_xss_protection
protected
def disable_xss_protection
# Disabling this is probably not a good idea,
# but the header causes Chrome to choke when being
# redirected back after a submit and the page contains an iframe.
response.headers['X-XSS-Protection'] = "0"
end
Ответ 2
Хорошо, думаю, я знаю, что это. Вы можете указать изображения и текст внутри протокола данных: я считаю, что Chrome видит экранированный HTML и думает, что это данные. Поскольку тип mime не указан, он оставляет тип mime пустым после двоеточия и просто печатает запятую.
http://guides.rubyonrails.org/security.html#redirection
Rails 4 автоматически ускользает от HTML, поэтому, если вы пытаетесь отобразить HTML, вам нужно указать, чтобы избежать его. Посмотрите варианты рендера:
http://guides.rubyonrails.org/security.html#redirection
Вы можете использовать raw()
для визуализации прямого HTML.
http://www.webbydude.com/posts/9-the-h-helper-in-rails-3
Ответ 3
Я не уверен, что это связано с проблемой mimetype. У меня есть эта проблема, когда пользователь публикует запись в блоге с фреймами в своем контенте. Когда запись сохраняется, она перенаправляется на действие "показать", которое будет содержать пользовательский контент (raw/html_safe). Chrome отобразит страницу в течение секунды секунды, а затем по какой-либо причине снова перенаправит на пустую страницу "данные:" (в истории она оставит только данные: и страницу отправки).
вот заголовки ответов, которые я зарегистрировал:
Ruby 2.0.0/Rails 4 перенесенное приложение с неправильным поведением (промежуточным сервером)
Cache-Control:max-age=0, no-cache, no-store
Cache-Control:max-age=0, private, must-revalidate
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:25359
Content-Type:text/html; charset=utf-8
Date:Thu, 23 Jan 2014 16:37:11 GMT
ETag:"6d9d4961ea2df12de67f8a92c43579fb"
Server:Apache
Set-Cookie: _**********_session_dev=1774518c571bf4e65189d607b276e65e; domain=*********.com; path=/; expires=Thu, 23 Jan 2014 18:37:11 -0000; HttpOnly
Status:200 OK
Vary:Accept-Encoding
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Mod-Pagespeed:1.6.29.7-3566
X-Request-Id:9f5314a5-ad01-4aec-bd0f-04e8afd9bdac
X-UA-Compatible:chrome=1
X-XSS-Protection:1; mode=block
Ruby 1.8.7/Rails 2 приложение с правильным поведением (prod-сервер)
HTTP/1.1 200 OK
Date: Thu, 23 Jan 2014 16:32:53 GMT
Server: Apache
ETag: "f12135ddd373205352f9754328368217"
Cache-Control: private, max-age=0, must-revalidate
Status: 200
X-Mod-Pagespeed: 1.4.26.5-3533
Cache-Control: max-age=0, no-cache, no-store
Vary: Accept-Encoding
Content-Length: 27167
X-Cnection: close
Content-Type: text/html; charset=utf-8
Connection: Keep-Alive
Content-Encoding: gzip
также пытался иметь это как начальный html:
<!DOCTYPE html>
<html>
<head>...
а также просто (как случайные тесты для определения того, что может быть неправильно)
<!DOCTYPE html>
<head>...
Все, что я знаю, это то, что если в представленном контенте есть iframe, при переадресации на страницу блога "показать" хром странное поведение вступает.