当你在浏览器输入url到发起http请求,这过程到底发生了什么?其实整个流程如下:
当用户输入url,操作系统会将输入事件传递到浏览器中,在这过程中,浏览器可能会做一些预处理,比如 Chrome 会根据历史统计来预估所输入字符对应的网站,例如输入goog,根据之前的历史发现 90% 的概率会访问「www.google.com 」,因此就会在输入回车前就马上开始建立 TCP 链接甚至渲染了。
接着是输入url之后,点击回车,这时浏览器会对 URL 进行检查,首先判断协议,如果是 http 就按照 Web 来处理,另外还会对这个 URL 进行安全检查
安全检查完成之后,在浏览器内核中会先查看缓存,然后设置 UA 等 HTTP 信息,接着调用不同平台下网络请求的方法。
注意:
浏览器和浏览器内核是不同的概念,浏览器指的是 Chrome、Firefox,而浏览器内核则是 Blink、Gecko,浏览器内核只负责渲染,GUI 及网络连接等跨平台工作则是浏览器实现的
dns查询ip
DNS,英文是Domain Name System,中文叫域名系统,是Internet的一项服务,他将域名和IP地址相互映射的一个分布式数据库
假设用户在浏览器中输入的是www.google.com,大概过程:
如果输入的是域名,则需要进行dns查询,将域名解析成ip;
进行DNS查询的主机或软件叫做DNS解析器,用户使用的工作站或电脑都属于解析器。域名解析就是利用DNS解析器得到对应IP过程,解析器会向域名服务器进行查询处理。
主要过程如下:
如果以上都没有找到,则继续往下向dns域名服务器查询
注意,
域名查询时有可能是经过了CDN调度器的(如果有cdn存储功能的话)
而且,需要知道dns解析是很耗时的,因此如果解析域名过多,会让首屏加载变得过慢,可以考虑dns-prefetch优化
tcp/ip请求
有了 IP 地址,就可以通过 Socket API 来发送数据了,这时可以选择 TCP 或 UDP 协议。
http本质是tcp协议。
TCP是一种面向有连接的传输层协议。他可以保证两端(发送端和接收端)通信主机之间的通信可达。他能够处理在传输过程中丢包、传输顺序乱掉等异常情况;此外他还能有效利用宽带,缓解网络拥堵。
建立TCP连接一开始都要经过三次握手:
三次握手
第一次握手,请求建立连接,发送端发送连接请求报文
第二次握手,接收端收到发送端发过来的报文,可知发送端现在要建立联机。然后接收端会向发送端发送一个报文
第三次握手,发送端收到了发送过来的报文,需要检查一下返回的内容是否是正确的;若正确的话,发送端再次发送确认包
在TCP连接建立完成之后就可以发送HTTP请求了。
注意
浏览器对同一个域名有连接数限制,大部分是 6,http1.0中往往一个资源下载就需要对应一个tcp/ip请求,而像 HTTP 2.0 协议尽管只使用一个 TCP 连接来传输数据,但性能反而更好,而且还能实现请求优先级。
后面会分享更多devops和DBA内容,感兴趣的朋友可以关注下!!
HTML 使用超级链接与网络上的另一个文档相连。几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。
HTML 链接
如何在HTML文档中创建链接。
(可以在本页底端找到更多实例)
HTML 超链接(链接)
HTML使用标签 <a>来设置超文本链接。
超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。
当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手。
在标签<a> 中使用了href属性来描述链接的地址。
默认情况下,链接将以以下形式出现在浏览器中:
一个未访问过的链接显示为蓝色字体并带有下划线。
访问过的链接显示为紫色并带有下划线。
点击链接时,链接显示为红色并带有下划线。
注意:如果为这些超链接设置了 CSS 样式,展示样式会根据 CSS 的设定而显示。
HTML 链接语法
链接的 HTML 代码很简单。它类似这样::
<a href="url">链接文本</a>
href 属性描述了链接的目标。.
实例
<a href="http://www.runoob.com/">访问菜鸟教程</a>
上面这行代码显示为:: 访问菜鸟教程
点击这个超链接会把用户带到菜鸟教程的首页。
提示: "链接文本" 不必一定是文本。图片或其他 HTML 元素都可以成为链接。
HTML 链接 - target 属性
使用 target 属性,你可以定义被链接的文档在何处显示。
下面的这行会在新窗口打开文档:
实例
<ahref="http://www.runoob.com/"target="_blank">访问菜鸟教程!</a>
HTML 链接- id 属性
id属性可用于创建在一个HTML文档书签标记。
提示: 书签是不以任何特殊的方式显示,在HTML文档中是不显示的,所以对于读者来说是隐藏的。
实例
在HTML文档中插入ID:
<a id="tips">有用的提示部分</a>
在HTML文档中创建一个链接到"有用的提示部分(id="tips")":
<a href="#tips">访问有用的提示部分</a>
或者,从另一个页面创建一个链接到"有用的提示部分(id="tips")":
<a href="http://www.runoob.com/html/html-links.html#tips">
访问有用的提示部分</a>
基本的注意事项 - 有用的提示
注释: 请始终将正斜杠添加到子文件夹。假如这样书写链接:href="http://www.runoob.com/html",就会向服务器产生两次 HTTP 请求。这是因为服务器会添加正斜杠到这个地址,然后创建一个新的请求,就像这样:href="http://www.runoob.com/html/"。
图片链接
如何使用图片链接。
在当前页面链接到指定位置
如何使用书签
跳出框架
本例演示如何跳出框架,假如你的页面被固定在框架之内。
创建电子邮件链接
本例演示如何如何链接到一个邮件。(本例在安装邮件客户端程序后才能工作。)
建电子邮件链接 2
本例演示更加复杂的邮件链接。
HTML 链接标签
标签 | 描述 |
---|---|
<a> | 定义一个超级链接 |
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
HTTP协议报文有了充分了解之后,上一节我们对get请求进行了详尽的测试,由于get请求没有请求体,相对来说比较简单,接下来我们加上请求体,看看使用post接口如何完成各种不同类型请求体的请求操作。
需要注意的是,post请求也并不一定都有请求体,遇到没有请求体的post接口,处理方式和get请求完全一致。
请求需要用到的四要素中:HTTP方法和url地址是显而易见的;没有特殊说明时,基本的请求头不需要关注,Postman会自动添加;重点关注请求体以及与它配套的Content-Type头域。
常用的接口测试请求体的编辑格式包括如下几种,和Content-Type头域分别对应:
这里的Content-Type头域和请求体的关系,相当于快递运输时的运输方式,比如请求体是水,就用常温运输,如果是冰,就需要冷藏的方式运输了。
接下来几节,我们分别来看各种请求体格式应该如何使用Postman完成请求。
请求示例:
本例使用的接口为电商项目登录接口,接口信息如下
通过抓包获取接口的基本信息,可以看到请求头中Content-Type字段值为application/x-www-form-urlencoded,它的格式我们非常熟悉,和url中?后面的参数格式相同,为键=值&键=值得格式。
可以在fiddler或者其它抓包工具中查看请求参数的美化组织格式,上述请求体对应于webform格式下的请求体内容以表格形式显示如下:
Postman完成请求:
针对application/x-www-form-urlencoded格式,可以用两种方式在postman的Body菜单中填写:
注意不要把请求url地址的参数也填写进来了,那些参数在Params菜单中。
编辑完请求体之后可以查看Headers中的头域信息,会发现除了基本头域以外,加入了Content-Type和Content-Length两个头域,分别表示请求体的类型和长度。
由此可见,当选择x-www-form-urlencoded时,postman会自动在头域中添加请求体相关的头域参数设置。
这里返回体格式直接以纯文本形式当做HTML显示,其中的中文内容还是未经处理的unicode编码,可以通过切换返回体的格式下拉栏菜单为JSON,以美化后的格式显示,并对中文等特殊符号进行转码。
在Body菜单中选择raw格式,然后将原始url编码字符串直接粘贴进输入栏中,发起请求会发现返回结果是请填写账号或密码,说明我们的请求体内容中携带的用户名密码等信息并没有被服务器接受。
切换到Headers中查看,会发现其中的Content-Type并不是applicaiton/x-www-form-urlencoded,而是text/plain纯文本格式的请求,因而才会导致请求体格式不被服务器接受。
相当于服务器原本是希望收到冷冻起来的冰,而我们却选择了常温运输方式,服务器也就认为自己没有收到需要的用户名密码。
因此我们要做的处理是在Headers中修改Content-Type的值,由于原本自动添加的Content-Type不能修改,因此取消勾选并新增一个Content-Type,值为application/x-www-form-urlencoded
重新发送之后,就可以得到正确的请求结果了。
希望本文对你有所帮助~~如果对软件测试、接口测试、自动化测试、面试经验交流感兴趣可以私聊我或关注公众号“特斯汀软件测试”。免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。
*请认真填写需求信息,我们会在24小时内与您取得联系。