当前位置: 首页 > 面试题库 >

通过HTTPS的HTTP Cookies和Ajax请求

袁琪
2023-03-14
问题内容

我知道以前已经以各种形式询问过这个问题,但是我似乎无法解决这个问题。我尝试使用jQuery和本机JS API发出Ajax请求。

我的情况如下(参见附图):

  1. 浏览器发出HTTP请求
  2. 服务器响应并设置持久性Cookie
  3. 浏览器发出HTTP Ajax请求,Cookie在那里
  4. 服务器响应预期,更新Cookie
  5. 浏览器发出HTTPS Ajax请求,Cookie不再存在(?!)
  6. 由于没有Cookie(意外行为),服务器会给出“默认”响应

在任何人开始关于跨域请求的讲座之前,我先说几件事:

  • 我知道这是一个跨域请求(不同的协议),这就是服务器Access-Control-Allow-Origin在响应中设置标头的原因(并且我使用的是Chrome和Firefox,两者均支持CORS)
  • 不过,我还知道,因为主机是相同的,所以HTTP cookie应该可以通过HTTPS进行管理(请参阅此处)。
  • (编辑)已为常规域(例如.domain.ext)正确设置了cookie,并且未设置HttpOnly和Secure标志

那么,为什么,为什么,为什么浏览器在进行HTTPS Ajax调用时不传递cookie?有任何想法吗?我将失去理智…

     +-----------+ HTTP Request     +-----------+
     |Browser    |+---------------->|Server     |
     +-----------+                  +-----------+

                   HTTP Response
                  <----------------+
                   Set-cookie

                   Ajax HTTP Req.
                  +---------------->
                   Cookie (OK)

                   HTTP Response
                  <----------------+
                   Set-cookie (OK)

                   Ajax HTTPS Req.
                  +---------------->
                   No Cookie (!!!)

问题答案:

好的,找到解决cookie问题的方法。

请参阅XHR规范,jQuery文档和StackOverflow。

切换协议和/或子域时发送cookie的解决方案是将withCredentials属性设置为true

例如(使用jQuery)

 $.ajax( {
   /* Setup the call */
   xhrFields: {
     withCredentials: true
   }
 });


 类似资料:
  • 问题内容: 如何通过 HTTPS* 发送ajax GET 请求? * 抛出这个: 是否有其他方法或解决方法可以使此工作正常进行? 如果我使用 Chrome 浏览到该网址,则可以得到响应。我认为没有理由为什么它不能在ajax请求上正常工作。 问题答案: 如果您由于当前处于 同一来源策略 而无法访问该页面,则无法向该页面发出AJAX请求。 **** 的 主机 , 端口 和 方案 (协议)必须在为了使A

  • 问题内容: 我的网站上有一些关于HTTPS连接的页面。从这些HTTPS页面中,我必须使用HTTP Ajax请求来进行一些错误检索,例如空白字段。但是此错误消息不会出现。是否有解决方案,或者我必须提出AJAX请求以通过HTTPS连接进行归档? 问题答案: 由于同源政策,这是不可能的。 您还需要将Ajax请求切换为https。

  • 问题内容: 通过AJAX从标准HTTP页面调用HTTPS页面(例如信用卡授权服务,例如WorldPay)是否会有问题? 我无法想象为什么会有问题,响应将是HTML页面,然后我可以将其嵌入结果窗格或类似的页面? 问题答案: 是的,这将是跨域发布,并且将被浏览器阻止。

  • 问题内容: 我似乎在发出请求以及保持数组中数据完整性方面遇到一些问题。 给出以下代码段: 我捕获给定页面上所有背景图像的URL。现在,尝试通过请求获取每个图像的大小,我使用以下代码段: 但是,当我通过via 转储时,每个元素(应该是包含URL和content- length的数组)最终都以上次请求的大小始终在哪里 我很困惑,尽管这似乎是一个时间/范围问题。我这里有某种竞赛条件吗? 问题答案: 问题

  • 我有个大麻烦。我必须将应用程序中的一些参数发布到URL。但是,当我试图在WebView对象中执行此操作时,它会向我报告一个异常,该异常表示“不受信任的证书”(该异常由WebViewClient onReceivedSslError()的重写中的方法报告)。如何才能与服务器正确握手?你能给我一些提示吗?我快疯了... 真的,真的谢谢... 编辑:这是我定义webview的方式 这就是我在WebVie

  • 5.4 通过 HTTPS 的通信 大多数智能手机应用都与互联网上的 Web 服务器通信。 作为通信的方法,我们在这里集中讨论 HTTP 和 HTTPS 的两种方法。 从安全角度来看,HTTPS 通信更为可取。 最近,Google 或 Facebook 等主要 Web 服务已经开始使用 HTTPS 作为默认设置。 自 2012 年以来,Android 应用中 HTTPS 通信实现的许多缺陷已被指出。