2013-07-16 4 views
2

Ошибка запроса AJAX с локально обслуживаемой страницы на удаленный сервер, хотя кажется, что все заголовки CORS присутствуют. Это JavaScript:Ошибка AJAX, даже если присутствуют заголовки CORS

$.ajax({url: 'http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyJlbWFpbCI6IiIsInNhbHQiOiJ6eTVzbnV0ams5MWY5YTRpIn0%3D', headers: {"X-Endpoint": "http://sqs.us-east-1.amazonaws.com"}})

И это завиток командной строки, которая делает то же самое:

curl -vH 'X-Endpoint: http://sqs.us-east-1.amazonaws.com' 'http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyJlbWFpbCI6IiIsInNhbHQiOiJ6MTc3ZHk4cDUyaXlzeXZpIn0%3D'

Если запустить выше команду, вы можете увидеть ответа CORS заголовки являются максимально разрешительный:

< HTTP/1.1 200 OK 
< Access-Control-Allow-Credentials: true 
< Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Endpoint,Accept,Origin,Referer,X-Something 
< Access-Control-Allow-Methods: GET, POST, OPTIONS 
< Access-Control-Allow-Origin: * 

Вот заголовки посылаемые вместе с запросом:

Request Headersview source 
Accept: */* 
Origin: http://localhost:3000 
Referer: http://localhost:3000/upload 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36 
X-Endpoint: http://sqs.us-east-1.amazonaws.com 

Однако я до сих пор видим запрос сбой в сетевой консоли хрома:

XMLHttpRequest cannot load http://prox.tum.lt/420663719182/test-upload?Action=SendMessage&Version=2012-11-05&MessageBody=eyJlbWFpbCI6IiIsInNhbHQiOiJ6eTVzbnV0ams5MWY5YTRpIn0%3D. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin. 

Не следует заголовок Access-Control-Allow-Origin: * получить браузер, чтобы разрешить это до конца?

Я также вижу запрос о предполетной проверке в сетевой консоли, который, кажется, преуспевает с 204 и теми же разрешительными заголовками CORS, что и выше. Вот скриншот из предполетной заголовков запросов и ответов:

http://i.imgur.com/TMRPUPG.png

+0

Можете ли вы также показать заголовки запросов? Они потенциально важны и должны пролить свет на вашу проблему. –

+0

@RayNicholus Добавлены заголовки запросов. Также добавлена ​​заметка о том, что я вижу, что браузер выдает предполетную запись для этого запроса, что странно, потому что это запрос GET. Тем не менее, ответ на предполетный просмотр выглядит так, что он должен разрешить запрос AJAX. –

+0

Существует несколько различных факторов, определяющих, должен ли пользовательский агент предварять запрос. Наличие нестандартных заголовков является одним из факторов. Ваш заголовок X-Endpoint запускает предполетную запись. –

ответ

1

Я вижу, что вы используете Chrome, который, как известно, не очень хорошо с LOCALHOST CORS запросов. Попробуйте использовать такой домен, как vcap.me (который указывает на 127.0.0.1), или запустите хром с флагом --disable-web-security.

+0

Использование альтернативного домена все еще не работает, однако --disable-web-security работает. Не совсем решение, к сожалению :( –

+0

Yup, это известная ошибка, открытая с 2010 года: https://code.google.com/p/chromium/issues/detail?id=67743 – jesal

+0

Однако она по-прежнему не работает с vcap.me или альтернативный домен, чтобы это не выглядело проблемой. –

0

Если вы используете Access-Control-Allow-Credentials, то вы не можете использовать «*» для Access-Control-Allow-Origins - его необходимо указать как конкретное происхождение.

+0

Даже после удаления заголовка ACAC, я все равно получаю ту же ошибку, так что это не так. –

+0

Я просто говорю вам, что говорит спецификация. См. 6.2.7: http : //www.w3.org/TR/cors/#resource-preflight-requests –

+0

Брок прав, вы не можете иметь оба одновременно – Nick

Смежные вопросы