浏览器如何使用WebSockets处理DNS查找和TLS?
我目前正在考虑在我的应用程序中实现websockets的选项。 但在这样做之前,我想确保我正确理解它是如何工作的,以及它是否值得。
我了解基本知识:通过WebSockets握手只能通过HTTP进行一次,然后与服务器通信以切换到较低级别的TCP层,此时,我们在服务器和服务器之间建立了一个全双工通道客户。
目前我正在测量向我的服务器发出的ajax请求(很多),我有这样的信息:
“DNS查找”,“初始连接”和“SSL”时间是我想要消除的(如果可能的话)
对于我的理解,这些时间是握手过程的一部分,我假设使用websockets它只会在开始时发生(握手),但我不确定。
所以我的问题是:我是否正确? 实现WebSockets将确保“DNS查找”和“初始连接”步骤仅在握手时发生?
预先感谢您的帮助,如果我的理解错误,我会很抱歉。
我了解基本知识:通过WebSockets握手只能通过HTTP进行一次,然后与服务器通信以切换到较低级别的TCP层,此时,我们在服务器和服务器之间建立了一个全双工通道客户。
它不会切换到较低级别的TCP层。 相反,它会将协议从简单的HTTP(请求,响应)切换到基于消息的协议 - 就像HTTP在应用层上的TCP之上而不是在较低级别上一样。 这只是同一级别上的不同协议。 它的行为有点像TCP,因为您可以随时发送和接收消息,而不受HTTP的请求/响应方案的限制。 但是例如TCP是一个数据流,而WebSockets实现了一个面向消息的协议。
而且,DNS不在WebSockets中。 DNS只需要查找IP地址来建立TCP连接,然后用它来完成协议切换到WebSocket之前所需的初始HTTP握手。
这种情况与TLS类似。 在DNS查找获得IP地址后,建立TCP连接,然后建立TCP连接顶部的TLS会话,然后完成切换到WebSockets之前的初始HTTP握手:即TCP内的TLS隧道内的HTTP连接 - 换句话说HTTPS。 WebSocket协议然后也在这个TLS隧道内部讲,类似于HTTP如何完成。
所以我的问题是:我是否正确? 实现WebSockets将确保“DNS查找”和“初始连接”步骤仅在握手时发生?
正确。 在每个ws://
连接的开始处,如果名称的IP尚未被缓存,则可能会进行DNS查找。 你将有一个TCP握手,你将有一个HTTP握手,然后导致协议切换。 对于每个ws://
连接都是如此。 而对于wss://
还有在TCP连接建立之后和HTTP握手开始之前创建的TLS隧道。
上一篇: How does browsers handle DNS lookup and TLS with WebSockets?
下一篇: Using Modernizr on an existing HTML5 application to make it compatible with ie8