Firefox не разрешает междоменный GET-запрос Ajax с библиотекой Prototype js - PullRequest
1 голос
/ 24 ноября 2011

Я пытаюсь выполнить междоменный ajax-запрос и заполнить содержимое в DIV на моей странице JSP. Я использую следующий метод javascript:

function fetchImgLeads(){
        var myAjax =  new Ajax.Request(
                    'http://someotherdomain:8080/imghtml?img=100',
                    {   method:'GET', 
                        parameters:{},
                        requestHeaders :["Access-Control-Allow-Origin","*","Access-Control-Allow-Methods","POST, GET, OPTIONS","Access-Control-Allow-Headers", "X-PINGOTHER","Access-Control-Max-Age","1728000"],
                        onSuccess:function(t){
                            alert(t.responseText.trim());
                            $('imagediv').update(t.responseText);
                        }, 
                        onFailure:function(t){
                            //do something
                        }
                    }
                );  
    }

Я вызываю это при загрузкеи я вижу ошибку, которая говорит HTTP/1.1 401 Unauthorized в веб-консоли Firefox.То же самое отлично работает в IE.Для этого я использую IE 8.0 и Firefox 8.

Помимо requestHeaders, есть ли что-то еще, что я должен добавить?запрос ajax не работает,

OPTIONS http://www.google.com/ HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0
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
Proxy-Connection: keep-alive
Origin: http://localhost:8080
Access-Control-Request-Method: GET
Access-Control-Request-Headers: access-control-allow-headers,access-control-allow-methods,access-control-allow-origin,access-control-max-age,x-prototype-version,x-requested-with

HTTP/1.1 405 Method Not Allowed
Content-Type: text/html; charset=UTF-8
Date: Fri, 25 Nov 2011 05:53:54 GMT
Server: GFE/2.0
Content-Length: 11819
Proxy-Connection: Keep-Alive
Connection: Keep-Alive

Ответы [ 2 ]

0 голосов
/ 08 мая 2013

Вы пытаетесь отправить заголовки 'Access-Control-Allow- *' с запросом.

Вместо этого сервер должен ответить с этими заголовками.

CORS (предварительная проверка) работает следующим образом:

  • Браузер запрашивает у сервера разрешение на отправку запроса: Access-Control-Request - * заголовки (Браузер добавляет их автоматически при попытке выполнить кросс-доменный запрос)

  • Сервер отвечает Access-Control-Allow - * заголовков, сообщающих браузеру, разрешено ли отправлять реальный запрос

* 1020Команда Curl должна показать вам что-то вроде этого:
curl -v -H 'Origin: http://myserver' -X OPTIONS -H 'Access-Control-Request-Methods: GET' -H 'Access-Control-Request-Headers: X-Requested-With' http://someotherdomain:8080/imghtml?img=100
* Connected to someotherdomain port 8080 (#0)
> OPTIONS /imghtml?img=100 HTTP/1.1
> User-Agent: curl/7.30.0
> Host: someotherdomain:8080
> Accept: */*
> Origin: http://myserver
> Access-Control-Request-Methods: GET
> Access-Control-Request-Headers: X-Requested-With
> 
< HTTP/1.1 200 OK
< Date: Wed, 08 May 2013 14:34:45 GMT
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: X-Requested-With
< Access-Control-Allow-Methods: GET
< Access-Control-Max-Age: 86400
< Content-Length: 0
< Content-Type: text/plain
< 
* Connection #0 to host someotherdomain left intact

Если вы не заинтересованы в отправке каких-либо пользовательских заголовков на сервер.Затем просто сбросьте Access-Control-Allow-Headers: line

0 голосов
/ 25 ноября 2011

У меня такая же проблема.

Вот что я узнал об этом до сих пор:

https://developer.mozilla.org/En/Using_XMLHttpRequest

(Версии Firefox, предшествовавшие Firefox 3, позволяли вам установить возможность предпочтения. Policy..XMLHttpRequest.open для allAccess, чтобы предоставить определенным сайтам межсайтовый доступ. Это больше не поддерживается.)

  • Рекомендуемый способ включить межсайтовый скриптинг - использовать HTTP-заголовок Access-Control-Allow-Origin в ответе на XMLHttpRequest.

http://en.wikipedia.org/wiki/XMLHttpRequest#Cross-domain_requests

  • Заголовки, добавленные к заголовкам HTTP-ответа сервера, могут разрешать междоменные запросы. Например, Access-Control-Allow-Origin: * может разрешить всем доменам доступ к серверу. Access-Control-Allow-Origin можно использовать во всех браузерах, поддерживающих междоменные запросы, включая Internet Explorer 8. Спецификация W3C определена в Cross-Origin Resource Sharing.

Надеюсь, это поможет ...

...