HTTP2服务器推送预加载不会发送cookie数据

时间:2016-05-06 16:11:07

标签: xmlhttprequest preload server-push http2

鉴于Cloudflare对HTTP2服务器推送的新支持,我正在尝试预加载在HTML正文末尾的Javascript中运行的AJAX请求。测试在Chrome Canary中完成。请求在标头中进行,因此可以在再次请求时缓存以立即加载。

标题是:

Link: </request>; rel=preload;

这成功触发了https://www.example.org/request。它发送到该URL的请求标头是:

接受: * / *

参考者: https://www.example.org/request

用户代理: Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 52.0.2726.0 Safari / 537.36

X-Requested-With: XMLHttpRequest

问题是cookie数据不会随预加载请求一起发送,而是与现有的Javascript一起发送。我根本找不到关于如何解决这个问题的信息,甚至找不到正确的行为。规范中似乎没有提及cookie,因此可能应该按照任何其他类型的请求进行处理。

1 个答案:

答案 0 :(得分:1)

在客户端发出一个TCP请求后,服务器推送基本上将数据TCP推送到客户端。客户端从客户端接收数据的唯一机会是初始请求。客户端无法将服务器推送回服务器。

HTTP2 Server Push Diagram

谈到饼干;您需要从原始请求中获取它们,在推送数据时,服务器没有机会接收其他标头。服务器发送的事件或WebSockets可以提供帮助 我们在这里。

RFC 7540中所述。

A complete header block consists of either:

 a single HEADERS or PUSH_PROMISE frame, with the END_HEADERS flag
set, or

 a HEADERS or PUSH_PROMISE frame with the END_HEADERS flag cleared
and one or more CONTINUATION frames, where the last CONTINUATION
frame has the END_HEADERS flag set.

该RFC的PUSH_PROMISE 4.3节详细介绍了它如何包含标题块片段。

让我留下以下引用:

  

HTTP 2.0服务器推送不是诸如此类技术的替代品   服务器发送事件(SSE)或WebSocket。通过HTTP提供的资源   2.0服务器推送由浏览器处理,但不会冒泡到应用程序代码 - 没有JavaScript API来获取通知   对于这些事件。

有关于如何在Innovating with HTTP 2.0 Server Push

中实现此功能的Node.js代码示例