`
zawa
  • 浏览: 58402 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用withCredentials发送跨域请求凭据

阅读更多

详见我的博客:http://www.zawaliang.com/2013/02/186.html

 

默认情况下,标准的跨域请求是不会发送cookie等用户认证凭据的,XMLHttpRequest 2的一个重要改进就是提供了对授信请求访问的支持。

本地模拟www.zawaliang.com向www.xxx.com发送带cookie的认证请求,我们需求做以下几步工作:

  1. 默认情况下widthCredentials为false,我们需要设置widthCredentials为true:
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://www.xxx.com/api');
    xhr.withCredentials = true;
    xhr.onload = onLoadHandler;
    xhr.send();

    请求头,注意此时已经带上了cookie:

    GET http://www.xxx.com/api HTTP/1.1
    Host: www.xxx.com
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.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
    DNT: 1
    Referer: http://www.zawaliang.com/index.html
    Origin: http://www.zawaliang.com
    Connection: keep-alive
    Cookie: guid=1
  2. 设置服务端响应头:
    Access-Control-Allow-Credentials: true

    如果服务端不设置响应头,响应会被忽略不可用;同时,服务端需指定一个域名(Access-Control-Allow-Origin:www.zawaliang.com),而不能使用泛型(Access-Control-Allow-Origin: *)

    响应头:

    HTTP/1.1 200 OK
    Date: Wed, 06 Feb 2013 03:33:50 GMT
    Server: Apache/2
    X-Powered-By: PHP/5.2.6-1+lenny16
    Access-Control-Allow-Origin: http://www.zawaliang.com
    Access-Control-Allow-Credentials: true
    Set-Cookie: guid=2; expires=Thu, 07-Feb-2013 03:33:50 GMT
    Content-Length: 38
    Content-Type: text/plain; charset=UTF-8
    X-Cache-Lookup: MISS from proxy:8080

有一点需要注意,设置了widthCredentials为true的请求中会包含远程域的所有cookie,但这些cookie仍然遵循同源策略,所以你是访问不了这些cookie的。

Ref

 

详见我的博客:http://www.zawaliang.com/2013/02/186.html

分享到:
评论

相关推荐

    ajax跨域请求WebService.asmx

    通过创建XMLHttpRequest实例,设置请求方法(GET或POST),URL,以及是否异步执行,然后发送请求。响应到达时,可以处理返回的数据,更新DOM以显示新信息。 2. **跨域请求**:默认情况下,浏览器遵循同源策略,禁止...

    jsonpajax跨域请求

    在Web开发中,由于浏览器的同源策略限制,JavaScript不能直接向其他域名发送请求,但JSONP和AJAX通过特定的方式绕过了这个限制,使得前端能够获取到不同源的数据。 1. JSONP介绍: JSONP是一种非官方的跨域数据...

    Jquery跨域Ajax请求测试

    在jQuery中,使用`xhrFields`参数添加`withCredentials`设置为`true`,可以实现携带Cookie的跨域请求。 ```javascript $.ajax({ type: "GET", url: "http://example.com/remote-service", xhrFields: { ...

    html通过 ajax jsonp跨域请求接收和传送数据

    客户端的AJAX请求设置`xhr.open('GET', url, true)`,然后发送请求。 2. **JSONP跨域**: JSONP的工作方式不同,它不依赖于XMLHttpRequest对象。首先,客户端在HTML页面中定义一个全局函数,如`handleData(data)`。...

    cross-request 3.1 YApi 跨域请求 谷歌浏览器

    cross-request 3.1 YApi 跨域请求 谷歌浏览器

    解决ajax跨域请求问题

    然而,跨域请求是Ajax的一个常见问题,由于浏览器的同源策略限制,Ajax请求只能向与当前页面同源的服务器发送。本文将深入探讨如何解决Ajax跨域请求的问题。 首先,理解“同源策略”是解决问题的关键。同源策略是...

    ajax跨域请求demo.zip

    总结来说,这个压缩包提供的示例展示了如何使用jQuery的Ajax进行跨域请求,并在Tomcat服务器上的Java Servlet中处理这些请求。这个例子对于理解和解决实际项目中可能出现的跨域问题非常有帮助。开发者需要理解CORS...

    ASP.NET WebApi跨域请求配置dll文件

    6. 响应预检查:CORS包含一种预检请求(OPTIONS请求),浏览器会在实际请求前发送此请求,验证服务器是否允许跨域请求。确保WebApi能够正确处理OPTIONS请求。 7. 错误处理:当跨域请求失败时,需要确保返回适当的...

    PHP AJAX JSONP实现跨域请求使用范例_ajax如何解决跨域请求

    在这个实例中,我们使用 jQuery 的.ajax() 方法来发送 POST 请求,并指定 dataType 为 jsonp,以便使用 JSONP。 ```javascript $.ajax({ type: "post", url: "ajax.php", dataType: "jsonp", jsonp: "callback...

    服务支持跨域请求的配置

    为了验证配置的有效性,开发者可以通过发送预检请求(preflight request)来测试服务器的响应。预检请求通常是一个`OPTIONS`请求,它会检查服务器是否允许特定的跨域操作。如果一切正常,服务器应该返回正确的CORS...

    jQuery跨域请求,获取返回值

    这篇博客将探讨如何使用jQuery实现跨域请求以及如何获取返回值。 首先,我们需要理解什么是跨域请求。跨域请求是指一个域下的文档或脚本尝试请求另一个域下的资源,由于安全原因,通常会被浏览器阻止。但为了实现...

    abp跨域请求配置包

    微软模块框架abp的跨域请求配置Nuget包,配置跨域api请求规则。

    ajax处理跨域请求

    但是,对于非简单请求(如POST、PUT、DELETE等),浏览器会先发送一个预检请求(OPTIONS),询问服务器是否允许跨域。此时,服务器需要响应`Access-Control-Allow-Methods`、`Access-Control-Allow-Headers`等相关...

    跨域请求百度天气预报

    跨域请求百度天气预报跨域请求百度天气预报跨域请求百度天气预报跨域请求百度天气预报跨域请求百度天气预报跨域请求百度天气预报跨域请求百度天气预报跨域请求百度天气预报

    ajax跨域请求

    在Web开发中,由于浏览器的同源策略限制,AJAX请求通常只能向同源服务器发送请求。然而,在实际应用中,跨域请求的需求非常常见。本篇文章将通过一个具体的示例(JSP页面+后台实例)来详细介绍如何实现AJAX跨域请求...

    通过nginx实现跨域请求

    标题 "通过nginx实现跨域请求" 涉及的核心知识点是网络编程中的跨域问题以及如何利用Nginx服务器作为代理来解决这个问题。Nginx是一个高性能的HTTP和反向代理服务器,它常用于配置和管理网站的访问规则,包括处理...

    httpclient 跨域请求

    4. 发送请求并获取响应:使用`HttpClient`的`execute`方法发送请求,得到`CloseableHttpResponse`。 ```java CloseableHttpResponse response = httpClient.execute(httpGet); // 或 response = httpClient.execute...

    juery mobile使用ajax跨域请求服务器的小实例

    但有时我们需要从一个域(比如example.com)向另一个域(比如api.example.org)发送请求,这就是跨域请求。 jQuery Mobile虽然主要是用于UI设计,但它也封装了jQuery库,其中包括了Ajax功能。在jQuery中,我们可以...

    django如何允许跨域请求.docx

    Django 中允许跨域请求的配置 Django 框架中,默认情况下,不允许跨域请求,这是为了防止跨站点脚本攻击(Cross-Site Scripting,XSS)。但是,在实际开发中,我们经常需要在前端和后端之间进行数据交换,而这需要...

Global site tag (gtag.js) - Google Analytics