ОБНОВЛЕНИЕ: Как отметил TimK, в jquery 1.5.2 это больше не требуется. Но если вы хотите добавить пользовательские заголовки или разрешить использование учетных данных (имя пользователя, пароль или файлы cookie и т. Д.), Читайте дальше.
Я думаю, что нашел ответ! (4 часа и много ругательств позже)
//This does not work!!
Access-Control-Allow-Headers: *
Вам нужно вручную указать все заголовки, которые вы примете (по крайней мере, так было в FF 4.0 и Chrome 10.0.648.204).
Метод jQuery $ .ajax отправляет заголовок "x-required-with" для всех кросс-доменных запросов (я думаю, что это единственный кросс-домен).
Итак, отсутствующий заголовок, необходимый для ответа на запрос OPTIONS:
//no longer needed as of jquery 1.5.2
Access-Control-Allow-Headers: x-requested-with
Если вы передаете какие-либо не «простые» заголовки, вам нужно будет включить их в свой список (я отправляю еще один):
//only need part of this for my custom header
Access-Control-Allow-Headers: x-requested-with, x-requested-by
Итак, чтобы собрать все воедино, вот мой PHP:
// * wont work in FF w/ Allow-Credentials
//if you dont need Allow-Credentials, * seems to work
header('Access-Control-Allow-Origin: http://www.example.com');
//if you need cookies or login etc
header('Access-Control-Allow-Credentials: true');
if ($this->getRequestMethod() == 'OPTIONS')
{
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Max-Age: 604800');
//if you need special headers
header('Access-Control-Allow-Headers: x-requested-with');
exit(0);
}