作者回复: 说的非常详细。
作者回复: 回答的比较全面。
这里面还有个长连接的问题,后面会讲,如果连接还是本站就不会有建连过程,直接用已有的连接发请求。
作者回复: 本地dns你的理解是正确的。
万网是个域名注册的代理机构,最终域名还是要由dns系统来解析。
百度的理解基本正确,在真正服务器前面是dns负载均衡。
作者回复: 因为http/1连接传输效率低,所以浏览器一般会对同一个域名发起多个连接提高效率,这个52086就是开的第二个连接,但在抓包中只是打开了,还没有传输。
到后面讲长连接的时候你就会明白了。
作者回复: 回答的很认真,鼓励一下。
第二个问题后面有误,因为dns解析失败,根本没有进入http处理流程,所以不会有4xx之类的错误,而是dns解析错误信息。
作者回复: √
作者回复: 非常详细,赞!!
作者回复:
1.tcp收发数据有超时机制,超时没有响应就会断开连接,当然这个就不是正常的结束连接。
2.tcp收发有超时,连接本身没有超时机制,http使用keepalive在tcp上实现了连接保活。
3.tcp建连是在操作系统内核里实现的,有一个处理队列,如果并发的请求太多,就会排队等待。
4.这些问题涉及的都是tcp比较底层的细节,我也不能很好的解释清楚,建议再去参考其他的资料,sorry。
作者回复:
1.不会,因为一次请求已经完成了,这种错误计算机不会认为是dns错误,因为处理流程都是正确的,只是得到的ip地址数据错误。
2.可以手动改hosts,强行指定正确的ip,或者等待dns服务恢复正常,后者在dns被污染的时候就很难说了。
作者回复:
1.如果输入的不是ip地址,那么必然会做dns解析,否则没有ip就无法访问。而dns解析有可能会直接从缓存里取,不一定会走到解析服务器。
2.必须要有tcp连接,因为互联网和http就建立在tcp/ip之上。
3.这个与客户端有关,如果用的是curl这样的命令行就没有渲染。
4.短连接会立即关闭连接,而长连接会保持较长的时间,直到客户端或者服务器某一方主动断开连接。
作者回复:
1.如果uri里没有端口号,默认用80或者8080、443,但如果在这两个端口上不提供http服务,那浏览器就猜不出来,只能用户手动输入。比如后面安全篇里,就用了442等端口,必须手动输入。
2.实验出真知。
3.有的时候浏览器也不会发favicon请求,可能已经缓存了,这跟浏览器的工作流程有关,不必太在意。
作者回复:
1.这是浏览器建立了两个并发连接,没有访问favicon也是正常的,跟浏览器有关。
2.这个应该是服务器主动关闭连接。
3.课程里的示例是挑选了一个最典型的场景,并不是所有的请求响应都会按照这个来。
作者回复: hosts文件相当于是一个简易的dns解析器(KV格式),而操作系统缓存则是在内存里,访问缓存要比访问磁盘快的多。
所以解析dns都要先找缓存,没有才去访问解析器(hosts、dns服务器等)。
作者回复: 是tcp里的握手包。
作者回复: dns请求是专门的dns协议,使用udp发送,因为是udp所以不需要建立连接。
作者回复: 那就是没有使用长连接,每次都重连服务器,所以有三次握手。
你可以试试打开页面后不要关闭,刷新看看,这样就不会有握手信息,而是直接发请求。
作者回复: 这个是wireshark重新修改了起始值,方便查看,我觉得这个不用太在意,毕竟我们研究的是http这样的应用层协议。
作者回复: 今天的这讲是简化的说法,没有那么精确,完整的dns解析以第6讲为准。
另外,dns解析通常是先到非权威dns,然后是根dns->顶级dns->权威dns,你可以再回顾一下。
作者回复: thanks.
作者回复: 现在的http都是长连接,不会立即断开连接,尽量复用,因为握手和挥手的成本太高了。