У мене на локальному LAN (machineA) є машина, яка має два веб-сервери. Перший - це вбудований у XBMC (на порт 8080) і відображає нашу бібліотеку. Другий сервер - це сценарій python CherryPy (порт 8081), який я використовую для запуску перетворення файлів на вимогу. Перетворення файлів ініціюється запитом AJAX POST зі сторінки, що подається з сервера XBMC.
- Перейдіть на http: // machineA: 8080, який відображає бібліотеку
- Відображається бібліотека
- Користувач натискає посилання "конвертувати", яке видає таку команду -
jQuery Ajax Запит
$.post('http://machineA:8081', {file_url: 'asfd'}, function(d){console.log(d)})
- Браузер видає запит HTTP OPTIONS із наступними заголовками;
Запит заголовка - ВАРІАНТИ
Host: machineA:8081
User-Agent: ... Firefox/4.01
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
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://machineA:8080
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with
- Сервер відповідає наступним чином;
Заголовок відповіді - ВАРІАНТИ (СТАТУС = 200 ОК)
Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:40:29 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1
- Потім розмова припиняється. Теоретично браузер повинен надіслати запит POST, коли сервер відповів правильними (?) Заголовками CORS (Access-Control-Allow-Origin: *)
Для усунення несправностей я також видав ту саму команду $ .post від http://jquery.com . Ось де я наткнувся, з jquery.com, запит на пошту працює, запит OPTIONS надсилається після POST. Заголовки цієї транзакції нижче;
Запит заголовка - ВАРІАНТИ
Host: machineA:8081
User-Agent: ... Firefox/4.01
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
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://jquery.com
Access-Control-Request-Method: POST
Заголовок відповіді - ВАРІАНТИ (СТАТУС = 200 ОК)
Content-Length: 0
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: text/html;charset=ISO-8859-1
Заголовок запиту - POST
Host: machineA:8081
User-Agent: ... Firefox/4.01
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://jquery.com/
Content-Length: 12
Origin: http://jquery.com
Pragma: no-cache
Cache-Control: no-cache
Заголовок відповіді - POST (STATUS = 200 ОК)
Content-Length: 32
Access-Control-Allow-Headers: *
Access-Control-Max-Age: 1728000
Server: CherryPy/3.2.0
Date: Thu, 21 Apr 2011 22:37:59 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Content-Type: application/json
Я не можу розібратися, чому один і той же запит буде працювати з одного сайту, а не з іншого. Я сподіваюся, що хтось міг би вказати на те, що мені не вистачає. Спасибі за вашу допомогу!