作为前端工程师-为什么我们要学习HTTP?
在讲述为什么之前,我要描述一下我在工作过程中发生过的两个例子:
- 在清除cookie的第一次ajax的POST请求会莫名变成GET请求
- 页面点击超链接跳转,结果把目标链接当作html下载了下来
这两个问题在当时对我造成了极大的困扰,为解决问题却不得其解的情况下,我甚至几度曲线救国。这两个问题我将在后面的HTTP总结篇幅中分析原因。
为什么要使用小图片合并技术(雪碧图)?
因为要减少HTTP的请求数? 因为TCP三次握手非常耗时,但是HTTP1.1默认的Connection为Keep-Alive,1.0也可以通过主动设定为保持TCP连接状态。服务端和客户端需要任意一方终止或者时间到期才会中断保持的TCP连接。 不是就无所谓了吗?非也,大量短时间相同类型的相同报文首部信息的HHTP,造成了请求资源的浪费,未压缩的首部信息实际上比一些请求主体还要冗余。
感想
在HTTP的学习过程中,我再次意识到计算机是一门完整性的体系学科,我们无法凭借学好任何一两门课程就可以到达完成完成程序设计乃至软件工程,HTTP包含着极多的计算机网络/计算机硬件/密码学等多门学科的知识交叉。
好,现在我就看过的《图解HTTP》
来逐章总结我的HTTP理解
一个重要的面试题:从地址栏输入一个网址回车到展现一个Web页面,这个过程发生了什么?
我尝试用Web和网络层面来回答一下:
我们在地址栏输入了一个域名比如www.baidu.com
,在按下回车键这一瞬间,我们的计算机并没有办法直接知道这一串字母加数字的地址到底指向哪里,换句话说资源请求发向哪个IP
,我们接触计算机或多或少会接触2个词,DNS
和域名解析
,没错,我们的浏览器会首先把人类擅长记忆的字母数字的组合串发送给就近服务商提供的DNS服务器,DNS保存了域名和IP地址的唯一映射的数据库表,我们的浏览器从DNS拿到了返回的真实地址IP
,它是一串特定格式段的数字,计算机擅长以这种方式记忆和保存。
然后浏览器对指定IP
地址发了一个应用层的HTTP
请求,它生成了针对服务端的初始请求报文。我们在这里必须要聊一下http这家伙,因为它的历史是很有趣的,HTTP
的全名是超文本传输协议(HyperText Transfer Protocol),它在诞生之初是一个研究组织的博士为了在互联网共享学习资料而建立的传输协议。然后在网景和微软大战的那些年里,Web和HTTP技术得到了极速发展和普及,但是在近些年,作为底层传输协议的HTTP却驻足不前了,它的弊端显而易见,但是因为HTTP服务器的普及率,更新换代的成本和风险存在,它的历史包袱非常难打破。
接着,为了传输方便,在HTTP所在的应用层
下面的传输层
的TCP协议
(著名的TCP三次握手,就是客户端和服务端的反复确认数据传输成功的过程)把请求报文进行分割,并在各个报文上打上标记序号以及端口号转发给网络层,在网络层的IP协议
(Internent Protocol,实现了IP和MAC地址的配套)增加了通信目的地的物理地址(MAC地址)转发给链路层。这样在我们的客户端的发送动作告一段落。
然后通过传输,请求首先到达接受服务端的链路层,然后依次递上到达应用层。值得注意的是:发送端在层与层之间传递数据的时候,每一层都会打上一个该层所属的首部信息,到了接受端就会一层一层剥去。
然后服务器对请求报文进行读取,进过处理,返回客户端需要的资源😏喏,你要的给你咯。
http协议是tcp/ip协议族的子集。
http是一种不保存状态,即无状态协议。要想要保存状态,实现状态保持,就需要引用到Cookie技术。
HTTP方法(Method)
- GET :获取资源(主要用来请求返回响应消息主体)
- POST :传输实体主体(主要用来发送消息实体到服务端)
- PUT :传输文件(存在安全问题,所以一般不采用)
- HEAD :获得报文首部(用于确认URI的有效性及资源更新的日期时间)
- DELETE :删除文件(较少使用)
- OPTIONS :询问支持的方法
之前已经写过一篇文章介绍过了 点这里
SSL\HTTPS
cookie
XSS注入攻击、SQL注入攻击