2015-02-03 2 views
2

Я пытаюсь выполнить запрос POST с HttpRequest (dart: html), чтобы вызвать службу отдыха, обеспеченную базовой аутентификацией.DART HttpRequest не предоставляет заголовок авторизации для запроса CORS OPTIONS

HttpRequest request = new HttpRequest(); // create a new XHR 
var url = "http://localhost:8082/xyz"; 
request.open("POST", url, async: false); // POST the data to the server 

String username = "foo"; 
String password = "bar"; 
final auth = CryptoUtils.bytesToBase64(UTF8.encode("$username:$password")); 

request.setRequestHeader('authorization',"Basic $auth"); 
request.setRequestHeader('content-type',"application/json"); 
request.setRequestHeader("accept", "application/json"); 
String jsonData = '{"language":"dart"}'; // etc... 

request.send(jsonData); //exception 401 Unauthorized 


Перед выполнением POST называют Парам.вызов выполняются (выдаются дротик: HTML) без заголовка авторизации. Это приводит к 401 Несанкционированному ответу.

заголовок запроса:

Accept: */*
Accept-Encoding: GZIP, выкачать, SDCH
Accept-Language: ан-США, ан; д = 0,8
Подтверждение-запрос-заголовок: авторизация, тип контента, принимаю
Метод-контроль-запрос-метод: POST
Cache-Control: макс возраста = 0
соединения: Keep-Alive
хоста: LOCALHOST: 8082
Происхождение: http://localhost:63342
Referer: http://localhost:63342/dart_client/test/all_test.html
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537,36 (KHTML, как Gecko) Chrome/38.0.2125.0 (Dart) Safari/537,36

réponse Заголовок:

Content-Length: 0
Дата : пн, 2 февраля 2015 23:33:58 GMT
Сервер: Jetty (9.2.7.v20150116)
WWW-Authenticate: Основная область = "xyzrealm"


Есть ли способ предоставить заголовок авторизации для вызова OPTIONS?

Любые предложения были бы замечательными. Thanks

ответ

1

OPTIONS запрос сделан автоматически, и вы не можете изменить этот запрос. Серверу необходимо разрешить запрос preflight OPTIONS без проверки подлинности.

См. http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0 Учетные данные пользователя исключены.

+0

Спасибо! Вы были правы, запрос OPTIONS сделан браузером. Чтобы включить запрос предварительной проверки, мне нужно создать новый SecurityHandler для Jetty Server. В качестве примера см. [Link] (https://code.launchpad.net/~nwilliams/akiban-server/cors-preflight-no-auth/+merge/161690) –

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