博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
测试开发面试准备之HTTP协议-一次完整的Http请求过程
阅读量:6191 次
发布时间:2019-06-21

本文共 826 字,大约阅读时间需要 2 分钟。

1.域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

 

(1)浏览器会缓存DNS一段时间,一般2-30分钟不等。如果有缓存,直接返回IP,否则下一步。

 

(2)缓存中无法找到IP,浏览器会进行一个系统调用,查询hosts文件。如果找到,直接返回IP,否则下一步。(在计算机本地目录etc下有一个hosts文件,hosts文件中保存有域名与IP的对应解析,通常也可以修改hosts。)

 

(3)进行了(1)(2)本地查询无果,只能借助于网络。路由器一般都会有自己的DNS缓存,ISP服务商DNS缓存,这时一般都能够得到相应的IP。如果还是无果,只能借助于DNS递归解析了。

 

(4)这时,ISP的DNS服务器就会开始从根域名服务器开始递归搜索,从.com顶级域名服务器,到baidu的域名服务器。

 

浏览器向主机发起一个HTTP-GET方法报文请求。请求中包含访问的URL,也就是http://www.baidu.com/ ,还有User-Agent用户浏览器操作系统信息,编码等。值得一提的是Accep-Encoding和Cookies项。Accept-Encoding一般采用gzip,压缩之后传输html文件。Cookies如果是首次访问,会提示服务器建立用户缓存信息,如果不是,可以利用Cookies对应键值,找到相应缓存,缓存里面存放着用户名,密码和一些用户设置项。

 

返回状态码200 OK,表示服务器可以相应请求,返回报文,由于在报头中Content-type为“text/html”,浏览器以HTML形式呈现,而不是下载文件。

 

转载于:https://www.cnblogs.com/william126/p/10886118.html

你可能感兴趣的文章
Rust语言开发基础(二)开发环境安装
查看>>
git分支创建分支删除分支合并
查看>>
报告发现最新版Java存在一个安全漏洞
查看>>
看雪论坛论坛小测试的答案
查看>>
lisp_sicp
查看>>
Django 1.9官方文档
查看>>
关于css3的:target伪类选择器
查看>>
给UIColor 添加自定义属性(颜色)
查看>>
F5获取vs、pool、member当前、峰值、总计连接数的oid
查看>>
基础正则表达式
查看>>
我的友情链接
查看>>
kubernetes-[1]-简单介绍
查看>>
Citrix MCS桌面管理技术解读
查看>>
CentOS6.6下搭建vsftpd+PAM认证
查看>>
lvs nginx-proxy nginx 取用户真实IP
查看>>
php中对象是引用类型吗?
查看>>
android开发-01-搭建环境
查看>>
线程池与Threadlocal
查看>>
GRE(Generic Routing Encapsulation,通用路由封装)tunnel技术
查看>>
TurboMail 邮件系统V5.2.0新品发布会盛况直击
查看>>