(图片来自网络,侵权请联系删除)
一、步骤:
1、url解析
2、DNS协议查询(域名和对应的ip地址进行转换)
3、传输层(tcp协议,三次握手,四次挥手,建立链接)
4、应用层(http协议,发送请求)
5、响应请求(服务器对请求做出响应)
6、收到请求
7、解析请求(对收到的数据包逐层解析)
8、页面渲染
二、详细解析
1、URL解析
判断你输入的url是否合法,根据你输入的内容进行对应的url解析。下面是url的组成:(图片来自网络,侵权请联系删除)
2、DNS查询
解析过程如下:
1、首先搜索浏览器的DNS缓存,缓存中维护着一张域名与ip地址的对应表
2、如果没有命中,则继续搜索操作系统的缓存
3、如果仍然没有命中,那么操作系统将域名发送到本地域名服务器,本地域名服务器采用递归查询自己的DNS缓存,查找成功则返回。
4、如果本地域名服务器查询仍然不成功,则向上级域名服务器迭代查询
5、本地服务器将获得的IP地址返回给操作系统,然后自己将IP地址缓存起来
6、操作系统得到IP地址会返回给浏览器,然后将IP地址缓存起来
7、至此,浏览器得到了url对应得IP地址,并将IP地址缓存起来
3、tcp传输(tcp区别于udp的点:它是有连传输协议,一对一传输,稳定传输)
tcp传输要说得当然是三次握手了:三次握手可以让客户端和服务器都能够确定自己和对方得收发能力没有问题。
下面是三次握手得过程:(图片来自网络,侵权请联系删除)
4、http请求
tcp协议对应着应用层的协议是http协议,tcp确定建立链接之后,发送http请求。
请求的内容包括:请求行、请求头、空行、请求体
5、响应请求
响应的内容包括:响应行、响应头、空行、响应体
小扩展:常见的请求头和响应头都有什么?
头信息是请求和响应消息的消息头部分,它定义了超文本传输协议事务中的操作参数。
常见的请求头:
| Accpet | 能接受的回应内容类型 |
|---|---|
| Accept-Charset | 能接受的字符集 |
| Accept-Encoding | 能接受的编码方式列表 |
| Accept-Language | 能接受的回应内容的自然语言列表 |
| Authorization | 用于超文本传输协议的认证的认证信息 |
| cache-control | 用来指定在这次请求中的所有缓存机制都必须遵守的指令(是否使用缓存机制) |
| Cookie | 服务器通过set-cookie发送的一个超文本传输协议 |
| Content-length | 以八位字节组成,表示请求体的长度 |
| Content-Type | 请求体的多媒体类型 |
| Date | 发送该消息的日期和时间 |
| Host | 服务器的域名以及服务器监听的传输协议端的端口号 |
| if-Modified-since | 协商缓存last-modefied中使用,允许在对应的内容未被修改的情况下返回304(常在浏览器缓存中使用) |
| if-None-Match | 协商缓存etag中使用,允许在对应的内容未被修改的情况下返回304 |
| range | 仅请求某个实体的一部分 |
| Origin | 发起一个跨来源资源共享的请求 |
常见的响应头:
| access-control-allow-origin | 指定哪些网站可以进行跨域资源共享 |
|---|---|
| Accept-Ranges | 服务器所支持的内容范围 |
| Age | 响应对象在代理缓存中存在的时间 |
| Cache-control | 通知从服务器到客户端的所有缓存机制,他们是否可以缓存这个对象,已经缓存的有效时间 |
| Content-Encoding | 资源响应所使用的编码类型 |
| Content-language | 响应所使用的语言类型 |
| Content-length | 响应体的长度 |
| Content-Location | 所返回的数据的一个侯选位置 |
| Content-Range | 如果是响应部分消息,表示是完整消息的哪个部分 |
| Date | 表示此消息被发送的时间 |
| etag | 对于某一资源的唯一的表示符(协商缓存时确定资源是否发生变化时用到) |
| Expires | 指定一个日期/时间,超过该事件则认为此回应已经过期 |
| Last-Modified | 所请求的资源的最后的修改事件 |
| Refresh | 用于重定向 |
| Retry—After | 如果某个实体临时不可用,那么此协议头告诉用户稍后重试 |
| Server | 服务器的名称 |
| Set-Cookie | 设置http cookie |