Как Facebook устанавливает междоменные куки для iFrames на страницах холста?

Я просматривал документацию по документам в формате PDF, в которой я рассказывал о приложениях для холста, и я наткнулся на пример приложения: http://developers.facebook.com/docs/samples/canvas. Однако, когда я прочитал их пример, я очень смутил их использование файлов cookie в приложении iframe.

Небольшая предыстория...

Я уже играл с использованием iframes для встраиваемых виджетов (не связанных с Facebook), и я узнал, что несколько браузеров (Chrome, Safari и т.д.) имеют строгие политики файлов cookie и не разрешают использование междоменных файлов cookie в iframe (Firefox, с другой стороны, позволяет iframes устанавливать междоменные куки в iframe). Например, если foo.com имеет iframe с src="http://bar.com/widget", то виджет iframe не сможет устанавливать какие-либо файлы cookie для bar.com и, следовательно, будет иметь проблемы с сохранением состояния в iframe: bar.com будет интерпретировать каждый запрос (включая ajax запросы) от виджета в виде нового запроса без установленного сеанса. Я боролся и нашел способ обойти это, используя JSONP и javascript для установки файлов cookie для foo.com, а не...

... и так?

Хорошо, я смотрел пример canvas iframe Facebook application, и я заметил, что их приложение (размещенное на runwithfriends.appspot.com) может установить cookie u с текущим идентификатором пользователя вместе с несколькими другие параметры для домена runwithfriends.appspot.com. Он отправляет этот файл cookie с каждым запросом... и он работает как в Chrome, так и в Firefox! WTF? Как Facebook обходит ограничения для файлов cookie между доменами в Chrome?

(Я уже знаю ответ сейчас, но я думал, что это может быть полезно для всех, кто пытается понять то же самое - я отправлю ответ ниже.)

Ответ 1

Таким образом, iFrame фактически не устанавливает cookie u для домена runwithfriends.appspot.com. Что делает Facebook, он создает форму, <form action="runwithfriends.appspot.com/..." target="name_of_iframe" method="POST"> и использует javascript для отправки формы при загрузке страницы. Поскольку целью формы является iframe, она не перезагружает страницу... она просто загружает iframe с ответом POST. По-видимому, даже Chrome и другие браузеры со строгими политиками cookie устанавливают файлы cookie для междоменных запросов, если они являются запросами POST...