Сразу оговорюсь, что выполняю кросс-доменный запрос. Использую Mozilla 3.5.5. Там это реализовано.
Задача отправить на сервер XML данные.
Самое интересное, когда формируешь запрос с того же самого домена, все в порядке, когда с другого - код не работает.
ЗАГОЛОВКИ ПРИ РАБОЧЕЙ ОТПРАВКЕ (с того же адреса)
http://a.b.c:8080/index.htm
POST /index.htm HTTP/1.1
Host: a.b.c:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: text/xml; charset=UTF-8
Referer: http://a.b.c/sendform.htm
Content-Length: 143
Cookie: CONTENT=1; LANG=ru
Pragma: no-cache
Cache-Control: no-cache
<?xml version="1.0" encoding="UTF-8"?>...
HTTP/1.x 200 OK
Server: (сервер)
Connection: Keep-Alive
Content-Type: text/xml
Access-Control-Allow-Origin: *
Content-Length: 228
...(продолжение ответа)
ПРИ ОТПРАВКЕ СДРУГОГО АДРЕСА ВОТ ТАКИЕ ЗАГОЛОВКИhttp://a.b.c:8080/index.htm
OPTIONS /index.htm HTTP/1.1
Host: a.b.c:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Origin: http://anotherdomain
Access-Control-Request-Method: POST
HTTP/1.x 200 OK (тут конец)
Может, проблема и в другом, но почему меняется
POST на
OPTIONS? А если проблема в другом, то в чем?
Код стандартный для спецификации XMLHttpRequest 2.
<script language="javascript">
var request = false;
var url = "http://a.b.c:8080/index.htm";
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else if(window.XDomainRequest) {
request = new window.XDomainRequest;
}
if (request.overrideMimeType) {
request.overrideMimeType('text/xml');
}
...
function getsid(){
var postxml = '<?xml version="1.0" encoding="UTF-8"?>...';
request.onreadystatechange = function() {getanswer(request)};
request.open('POST', url, true);
request.setRequestHeader("Content-Type", "text/xml");
request.setRequestHeader("Content-Length", postxml.length);
request.setRequestHeader("Connection", "close");
request.send(postxml);
}
...
function getanswer(request) {
if (request.readyState == 4) {
if (request.status == 200) {
...
}
}
}
getsid();
</script>
Сервер не совсем стандартный там на порт 8080 зацеплена служба, которая анализирует и заносит данные в БД. Но проблема скорее всего не в нем, так как запросы, все-таки, принимаются, хоть и со своего домена.