2015-09-23 3 views
2

Мой запрос, отображаемый в инструменте Chrome Network XHR.401 Ошибка предполетного режима при обращении Ajax к другому домену URL

General: 
Remote Address:127.0.0.1:80 
Request URL:http://ws.uvx/app_dev.php/api/venuelogin 
Request Method:OPTIONS 
Status Code:400 Bad Request 

Response Headers: 
view source 
Access-Control-Allow-Headers:x-custom-auth 
Access-Control-Allow-Methods:POST, PUT, GET, DELETE, OPTIONS 
Access-Control-Allow-Origin:http://localhost:8383 
Access-Control-Max-Age:3600 
Cache-Control:no-cache, max-age=604800 
Connection:close 
Content-Encoding:gzip 
Content-Length:52 
Content-Type:text/html; charset=UTF-8 
Date:Wed, 23 Sep 2015 07:59:04 GMT 
Expires:Wed, 30 Sep 2015 07:59:04 GMT 
Server:Apache 
Vary:Accept-Encoding 
X-Debug-Token:8cd64c 
X-Debug-Token-Link:/_profiler/8cd64c 
X-Powered-By:PHP/5.5.10 

Request Headers: 
view source 
Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:es-ES,es;q=0.8,en;q=0.6 
Access-Control-Request-Headers:accept, content-type, p 
Access-Control-Request-Method:GET 
Cache-Control:no-cache 
Connection:keep-alive 
Host:ws.uvx 
Origin:http://localhost:8383 
Pragma:no-cache 
Referer:http://localhost:8383/UVox%20Mobile/jwt-demo/venuelogin.html 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 

Мой Ajax вызов:

jQuery.ajax({ 
    url: "http://ws.uvx/app_dev.php/api/venuelogin", 
    type: "GET", 
    headers: { 
     "p": "1441", 
     "Content-type": "application/json" 
    } 
}) 

И Symfony2 CORS конфигурации:

nelmio_cors: 
    defaults: 
     allow_credentials: false 
     allow_origin: [] 
     allow_headers: [] 
     allow_methods: [] 
     expose_headers: [] 
     max_age: 0 
     hosts: [] 
     origin_regex: false 
    paths: 
     '^/api/': 
      allow_origin: ['*'] 
      allow_headers: ['X-Custom-Auth'] 
      allow_methods: ['POST', 'PUT', 'GET', 'DELETE','OPTIONS'] 
      max_age: 3600 

Если я изменяю allow_headers: [ 'X-заказ Auth'] для allow_headers: [» * '] Тогда я получаю 500 ошибок.

Я также попытался использовать Content-Type: application/octet-stream, как было предложено PAW, приложение OSX, где я проверяю свои запросы API. Фактически, этот запрос 200 OK от PAW.

Также, используя CURL, я получаю JSON с 200 OK.

Что мне не хватает? Большое спасибо.

ответ

1

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

Второй шаг на приложение (в моем случае Symfony):

а) Мой FOSRESTBundle конфигурации был в том числе HTML до JSON в следующей строке:

format_listener: 
    rules: 
     - { path: ^/, priorities: [ json, xml, html ], fallback_format: json, prefer_extension: true } 

Так что я был вынужден приставкой url с .json или обновить строку, как показано ниже, в противном случае сервер пытался вернуть html, а потому, что я не создал для него шаблон, тогда я получил ошибку 500.

b) Последним шагом было исключение объявления маршрута «индивидуально» в routing.yml и включение его в качестве аннотации маршрута «fosrestbundle» на контроллере, используемом на маршруте типа отдыха.

api_venues: 
    type:  rest 
    resource: Acme\DemoBundle\Controller\Api\VenueController 
1

Если я изменяю allow_headers: [ 'X-заказ Auth'] для allow_headers: [ '*'] Тогда я получаю ошибку 500 вместо

Вы не можете использовать подстановочные * для значения заголовка Access-Control-Allow-Headers. Он может содержать только явные имена заголовков.

См. the section of the Fetch spec that outlines what the Access-Control-* header syntax is.

Access-Control-Allow-Origin является единственным среди них, позволяющим содержать подстановочный знак.