Solicitud de verificación previa de CORS que devuelve HTTP 405

Estoy tratando de crear un servicio web RESTful y me he quedado atascado en la implementación de solicitudes PUT. He intentado y no he seguido otras respuestas en este sitio y varios artículos de Mozilla.

La solicitud se genera desde el dominio.wwwtest.dev-box y va atest.dev-box (Básicamente, una aplicación de aplicaciones para el usuario que llama a la aplicación de servicios de fondo). Aquí están los encabezados que he capturado de los encabezados HTTP en vivo:

http://test.dev-box/resource/v1/data/user/1

OPTIONS /resource/v1/data/user/1 HTTP/1.1
Host: test.dev-box
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://wwwtest.dev-box
Access-Control-Request-Method: PUT
Connection: keep-alive

HTTP/1.1 405 Method Not Allowed
Date: Wed, 16 Oct 2013 16:15:58 GMT
Server: Apache/2.2.15 (Red Hat)
x-powered-by: PHP/5.3.27
Access-Control-Allow-Origin: http://wwwtest.dev-box
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS
Access-Control-Max-Age: 1728000
Content-Length: 0
Allow: PUT
Cache-Control: no-cache
Connection: close
Content-Type: text/html; charset=UTF-8

Estoy usando un marco para que todo se enrute a web.php, que contiene el siguiente código en la parte superior de la página (tomado deeste artículo de MDN):

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header('Access-Control-Allow-Origin: http://wwwtest.dev-box');
    header('Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS');
    header('Access-Control-Max-Age: 1728000');
    header("Content-Length: 0");
    header("Content-Type: text/plain");
} else {
    header("HTTP/1.1 403 Access Forbidden");
    header("Content-Type: text/plain");
}

Antes de que mi código realice la solicitud PUT, primero envía la solicitud OPCIONES de verificación previa de CORS (como puede ver en la captura anterior). Los encabezados necesarios deben adjuntarse a la respuesta e informar al solicitante que PUT está permitido. Desafortunadamente, como se puede ver en los encabezados de respuesta anteriores, todavía se está devolviendo 405 Método no permitido aunque PUT está en la respuesta acceso-control-permitir-métodos.

Este es el archivo .htaccess para el marco que estoy usando (Silex):

<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ web.php [QSA,L]
</IfModule>

Respuestas a la pregunta(2)

Su respuesta a la pregunta