【问题标题】:Firefox does not allow cross domain Ajax GET request with Prototype js libraryFirefox 不允许使用 Prototype js 库进行跨域 Ajax GET 请求
【发布时间】:2023-04-07 11:12:01
【问题描述】:

我正在尝试做一个跨域ajax请求并将内容填充到我的JSP页面中的DIV中,我使用的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
                        }
                    }
                );  
    }

我在加载时调用它,我在 Firefox Web 控制台中看到一个错误,显示为 HTTP/1.1 401 Unauthorized。同样的事情在 IE 中也能正常工作。我为此使用 IE 8.0 和 Firefox 8。

除了requestHeaders,还有什么要补充的吗?

捕获的Http Headers如下,即使这样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

【问题讨论】:

    标签: ajax cross-domain prototypejs


    【解决方案1】:

    我也面临同样的问题。

    这是我迄今为止发现的:

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

    (Firefox 3 之前的 Firefox 版本允许您将首选项capability.policy..XMLHttpRequest.open 设置为 allAccess 以授予特定站点跨站点访问。不再支持。)

    • 启用跨站点脚本的推荐方法是在对 XMLHttpRequest 的响应中使用 Access-Control-Allow-Origin HTTP 标头。

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

    • 添加到服务器的 HTTP 响应标头的标头可以允许跨域请求成功。例如Access-Control-Allow-Origin: *,可以允许所有域访问一个服务器。 Access-Control-Allow-Origin 可用于所有支持跨域请求的浏览器,包括 Internet Explorer 8。W3C 的规范在跨域资源共享中定义。

    希望这会有所帮助...

    【讨论】:

    • 我已经在请求标头中添加了 Access-Control-Allow-Origin,它适用于 IE8,但不适用于 Firefox
    【解决方案2】:

    您正在尝试发送带有请求的“Access-Control-Allow-*”标头。

    相反,您的服务器应该回复这些标头。

    CORS(预检)以这种方式工作:

    • 浏览器向服务器请求发送请求的权限:Access-Control-Request-* 标头(当您尝试进行跨域请求时,浏览器会自动添加它们)

      李>
    • 服务器以 Access-Control-Allow-* 标头进行响应,使浏览器知道是否允许发送真实请求

    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 * 连接到某个其他域的端口 8080 (#0) > 选项 /imghtml?img=100 HTTP/1.1 > 用户代理:curl/7.30.0 > 主机:someotherdomain:8080 > 接受:*/* > 来源:http://myserver > 访问控制请求方法:GET > 访问控制请求标头:X-Requested-With >

    如果您对向服务器发送任何自定义标头不感兴趣。然后只需删除 Access-Control-Allow-Headers:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 2017-02-02
      • 2013-09-10
      相关资源
      最近更新 更多