Как работает этот запрос кросс-доменного ajax? - PullRequest
6 голосов
/ 08 января 2012

Я смотрю на этот вопрос и в нем есть ссылка на http://hacks.mozilla.org/2011/03/the-shortest-image-uploader-ever/, которая имеет следующий код:

var fd = new FormData();
fd.append("image", file); // Append the file
fd.append("key", "6528448c258cff474ca9701c5bab6927");
// Get your own key: http://api.imgur.com/

// Create the XHR (Cross-Domain XHR FTW!!!)
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://api.imgur.com/2/upload.json"); // Boooom!
xhr.onload = function() {
    // Big win!
    // The URL of the image is:
    JSON.parse(xhr.responseText).upload.links.imgur_page;
 }
 // Ok, I don't handle the errors. An exercice for the reader.
 // And now, we send the formdata
 xhr.send(fd);

Как работает этот междоменный запрос? Я думал, что, как правило, существуют ограничения безопасности, которые мешают людям делать именно это.

Ответы [ 2 ]

3 голосов
/ 08 января 2012

Сервер отвечает с установленным Access-Control-Allow-Origin для разрешения междоменных запросов

Response Headers
Access-Control-Allow-Origin: *  
Cache-Control   max-age=604800
Connection  keep-alive
Content-Length  494
Content-Type    application/json

http://www.w3.org/TR/cors/#access-control-allow-origin-response-hea

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors

1 голос
/ 08 января 2012

Imgur внедряет обмен ресурсами между источниками (CORS).

Стандарт CORS работает путем добавления новых заголовков HTTP, которые позволяют серверам обслуживать ресурсы разрешенных доменов происхождения. Браузеры поддерживают эти заголовки и применять ограничения, которые они устанавливают. Дополнительно для Методы HTTP-запроса, которые могут вызвать побочные эффекты для пользовательских данных (в в частности, для методов HTTP, отличных от GET, или для использования POST с определенные типы MIME), спецификация обязывает браузеры «Предварительный» запрос, запрашивая поддерживаемые методы с сервера с заголовком запроса HTTP OPTIONS, а затем, после «одобрения» сервер, отправляющий фактический запрос с актуальным HTTP-запросом метод. Серверы также могут уведомлять клиентов о наличии «учетных данных» (включая файлы cookie и данные HTTP-аутентификации) следует отправлять с запросы.

См. http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ для получения дополнительной информации.

...