从解决Github TimeOut到经典面试题:从输入URL到浏览器显示页面发生了什么?
问题描述
在Windows 操作系统上,push代码到git的时候,出现了Failed to connect to github.com port 443: Timed out的错误。一脸懵逼,浏览器网页也访问不了。
思路以及解决方案
一开始,我以为自己代理网络出现了问题,关掉之后,还是一样的问题。首先我们可以使用以下的命令,删除代理配置:
git config --global --unset http.proxy
然后打开ipaddress.com,查询以下的域名,记录其ip:
- github.com
- github.global.ssl.fastly.net


然后打开C:\Windows\System32\drivers\etc\hosts文件,把两个ip配置进去:

保存之后,打开CMD,刷新DNS,重新push:
ipconfig /flushdns

以上做法可以解决部分连接github慢的问题,主要是超时的问题,如果不是超时的问题,上面的做法是不会起作用的,这个只是把对应的域名和ip的对应关系直接映射在DNS配置上,不用去查找了,直接找到ip地址。
为什么刷新DNS就生效了呢?
这就涉及到一个面试经常问的一个问题了,先把问题变成:在浏览器输入一个www.baidu.com,会发生什么?间不固定。
为什么刷新DNS就生效了呢?这就涉及到一个面试经常问的一个问题了,先把问题变成:在浏览器输入一个www.baidu.com,会发生什么?
解析域名:首先需要根据域名去查找该域名的
ip地址,解析前会先查看浏览器的缓存,浏览器会保存一段时间访问的网址的DNS地址,根据浏览器不同时间不固定(在chrome浏览器中输入:chrome://dns/,可以看到chrome浏览器的DNS缓存。)。如果浏览器的缓存没有这个记录,那么就回去查找系统的缓存,系统缓存没有的情况会去查找
hosts文件里面的ip地址(如果存在的话)。如果本地的
hosts文件里面没有该域名对应的ip地址,那么就会发送一个DNS请求到本地DNS服务器,一般是由网络接入服务器商提供(譬如中国移动)。请求到达本地
DNS服务器之后,也会先查询缓存,缓存有则直接返回,没有则递归查询,本地DNS服务器需要向根服务器查询。根服务器不记录具体的域名和
ip对应关系,会告诉DNS服务器,到域服务器(给出地址)上查询。继续往域服务器查询,譬如
“baidu.com”,.->.com->baidu.com.->www.baidu.com.,查询到之后,写入缓存并且返回ip。拿到
ip之后,会建立TCP链接,也就是三次握手。三次握手成功之后,浏览器发起
HTTP请求,请求包括三部分:请求方法URI协议/版本,请求头,正文。服务器处理请求,返回。
关闭
TCP链接,四次握手(或称四次挥手)。浏览器解析报文或者资源,渲染。
上述只是一个概述,具体的细节很多,这个下次具体聊聊,但是我们可以看出,在这个过程中确实涉及到了DNS的服务器以及缓存,所以我们刷新缓存之后,访问github就可以请求到对应的ip上去。
【刷题笔记】
Github仓库地址:https://github.com/Damaer/codeSolution
笔记地址:https://damaer.github.io/codeSolution/
【作者简介】:
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。个人写作方向:Java源码解析,JDBC,Mybatis,Spring,redis,分布式,剑指Offer,LeetCode等,认真写好每一篇文章,不喜欢标题党,不喜欢花里胡哨,大多写系列文章,不能保证我写的都完全正确,但是我保证所写的均经过实践或者查找资料。遗漏或者错误之处,还望指正。
平日时间宝贵,只能使用晚上以及周末时间学习写作,关注我,我们一起成长吧~
从解决Github TimeOut到经典面试题:从输入URL到浏览器显示页面发生了什么?的更多相关文章
- 经典面试题: 从输入URL到页面加载的过程发生了什么?
可以分为这几个大的过程: DNS解析 TCP连接 客户端发送HTTP请求 服务器处理请求并返回HTTP报文 浏览器解析渲染页面 结束 其中(1)DNS解析可以理解为主寻找这个IP地址的过程,其中如果找 ...
- 经典面试题:从 URL 输入到页面展现到底发生什么?
前言 打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 本文首发地址为GitHub 博客,写文章不易,请多多支持与关注 ...
- 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3
备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...
- 【ASP.NET Core】EF Core - “影子属性” 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1
[ASP.NET Core]EF Core - “影子属性” 有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. ...
- 李洪强iOS经典面试题144-数据存储
李洪强iOS经典面试题144-数据存储 数据存储 sqlite中插入特殊字符的方法和接收到处理方法. 除'其他的都是在特殊字符前面加"/",而 ' -> '' .方法:k ...
- 李洪强iOS经典面试题142-第三方框架及其管理
李洪强iOS经典面试题142-第三方框架及其管理 第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第 ...
- 李洪强iOS经典面试题下
李洪强iOS经典面试题下 21. 下面的代码输出什么? @implementation Son : Father - (id)init { self = [super init]; if (self) ...
- 李洪强iOS经典面试题上
李洪强iOS经典面试题上 1. 风格纠错题 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // http://weibo.com/luohanchenyilong/ / ...
- web前端经典面试题大全及答案
阅读目录 JavaScript部分 JQurey部分 HTML/CSS部分 正则表达式 开发及性能优化部分 本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在 ...
- 李洪强iOS经典面试题35-按层遍历二叉树的节点
李洪强iOS经典面试题35-按层遍历二叉树的节点 问题 给你一棵二叉树,请按层输出其的节点值,即:按从上到下,从左到右的顺序. 例如,如果给你如下一棵二叉树: 3 / \ 9 20 ...
随机推荐
- 声明式 Shadow DOM:简化 Web 组件开发的新工具
在现代 Web 开发中,Web 组件已经成为创建模块化.可复用 UI 组件的标准工具.而 Shadow DOM 是 Web 组件技术的核心部分,它允许开发人员封装组件的内部结构和样式,避免组件的样式和 ...
- 小tips:HTML5的ruby标签实现给汉字加拼音、details标签实现折叠面板、原生进度条progress和度量meter
ruby标签实现给汉字加拼音 ruby 元素由一个或多个字符(需要一个解释/发音)和一个提供该信息的 rt 元素组成,还包括可选的 rp 元素,定义当浏览器不支持 "ruby" 元 ...
- JavaScript – Sort
前言 排序是很常见的需求. 虽然看似简单, 但其实暗藏杀机. 一不小心就会搞出 Bug 哦. 这篇就来聊聊 JS 的排序. 参考 原生JS数组sort()排序方法内部原理探究 值的比较 js中的loc ...
- Google Ads – 大杂烩
广告相互竞争, 自己打自己? About similar keywords in a Google Ads account 如果用户的搜索能匹配到广告 Campaign 中多个广告的话, 会怎么样? ...
- 揭秘JWT:从CTF实战到Web开发,使用JWT令牌验证
揭秘JWT:从CTF实战到Web开发,使用JWT令牌验证 介绍 JWT(JSON Web Tokens)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在网络上安全地传输信息. ...
- 一款超级给力的弱网测试神器—Qnet(附视频)
一.APP弱网测试背景 App在使用的过程中,难免会遇到不同的弱网络环境,像在公车上.在地铁.地下车库等.在这种情况下,手机常常会出现网络抖动.上行或下行超时,导致APP应用中出现丢包延迟,从而影响用 ...
- Blazor开发框架Known-V2.0.11
Known今天发布了V2.0.11版本,本次版本添加了系统WebApi在线测试,系统菜单样式配置,表格支持用户设置栏位显隐和顺序,系统上下文支持静态组件与后端交互,以及对PgSQL进行了详细的测试,修 ...
- [OI] 二项式期望 DP
OSU OSU yet Another OSU yet yet Another OSU OSU 的题目是这样的:有一些相邻的块,给定每一个块的联通概率,每个连通块对答案有 \(size^{3}\) 的 ...
- [namespace hdk] 64位 bitset
功能 已重载运算符 [](int) (右值,修改请使用 set() 方法) ~() +(bitset) +(unsigned long long) +=(bitset) +=(unsigned lon ...
- 全网最适合入门的面向对象编程教程:54 Python字符串与序列化-字符串格式化与format方法
全网最适合入门的面向对象编程教程:54 Python 字符串与序列化-字符串格式化与 format 方法 摘要: 在 Python 中,字符串格式化是将变量插入到字符串中的一种方式,Python 提供 ...