HTTP超文本传输协议----记录
最近时不时会看到一些HTTP的帖子,所以自己也写一个,拿来备忘
1. 什么是超文本传输协议
HTTP中文全称就叫“超文本传输协议”
之前一直都是看过就完了,这两天看到几篇文章,详细解释了一下这个名字,所以我也就跟着大概理解了一下。
超文本传输协议,分为三个词:“超文本”,“传输”,“协议”
超文本:互联网初期只能传递文字文本信息,后来加了图片、视频、音频等信息,再后来,里面加了超链接,可以通过超链接跳转,到这里,就已经不是简单地纯文本信息了,语义扩大之后就被称为“超文本”‘。
传输:我通常理解为“寄快递”,只是“寄”的东西是数据,现实生活中是某个物品,这个时候,出来2个概念,一个“请求方”,一个“应答方”
在这里,我们HTTP的请求是参见上网过程,请求百度:请求方发起请求并传递数据,响应方对请求执行并返回数据,这里是一来一回的交互
协议:就是我们之间约定好的一种行为方式。协议也分很多种,我们经常使用的QQ,使用就是QICQ协议,其实就是一种准则,我告诉你,我接受json格式的数据,你给我一个二进制的格式数据,那我就用不了,不知道你想说什么(举例就是我告诉你只会中文,你给我写了一封日文信,我就读不懂)
2、HTTP传输过程
目前我们计算机的数据传输,无论是不是HTTP,还是其他的数据,其实 都要经过分层传递,这就又到了四层模型,五层模型,七层模型了,这里不展开,贴个图,看看就行。
3、浏览器
HTTP请求,常见的使用是浏览器上,这里简单了解一下浏览器的内核。
目前市面上,我们经常看到360浏览器,谷歌浏览器,百度浏览器,搜狗浏览器,火狐浏览器,Safari(苹果系统的浏览器)等等,会看到很多,但是其实很多浏览器,本质上都是使用的别人的内核,他们只是做了优化,如界面、功能增删、响应速度等等。
那么就大概了解一下主流的几款浏览器内核吧。
- IE
- Firefox
- Chrome
- Safari
- Opera
4、HTTP状态码
这个地方,作为测试而言,是一个面试的考点吧,还是要知道的
1XX:等待执行,是一种中间状态,实际情况用到的比较少
2XX:请求成功
3XX:重定向
4XX:请求方错误
5XX:服务端错误
5、HTTP几种请求
- GET
- POST
- DELETE
- PUT
- HEAD
- OPTIONS
- TRACE
- CONNECT
一般使用最多的是GET和POST,其次是PUT和DELETE,另外的几个了解即可,此处,我想多提一下GET和POST请求。
有一个比较常见的问题是:GET和POST的区别。
在这里,需要了解2个词:安全和幂等
幂等解释一下概念:多次请求,返回相同的值,就是幂等
get请求是向服务器获取数据,常见的如查询列表的功能
post是提交一个数据,常见的是登录,编辑等功能
那么就可以看到:
GET是“只读”,无论你操作多少次,都不会影响服务器上的数据,而且每次的结果都是相等的,所以GET幂等且安全
POST,是新增或者提交,那么就会修改服务器上的数据,一般会创建资源(例如新增用户),所以POST不幂等,且不安全
6、HTTP请求常见字段
- 请求头
Request URL: url(这个地方还有个延伸:URL和URI,但是 我也没了解,就不写了)
Request Method: 请求方式
Status Code: 状态码 - 请求body
content-length:字节长度
content-type:用于服务器回应时,告诉客户端,本次数据是什么格式
date:本次请求的时间
set-cookie:cookie
status:状态
7、三次握手和四次挥手
因为HTTP请求是基于TCP传输协议进行传输的(HTTP/3 把 TCPP 层换成了基于 UDP 的 QUIC),所以这个地方延伸一下TCP请求的三次握手和四次挥手,不想详细讲,讲了又有很多东西,贴个图看看吧
- 三次握手
- 四次挥手
8、HTTP请求特点
HTTP 最突出的优点是:
简单、灵活和易于扩展、应用广泛和跨平台
- 简单:
结构就是header+body
参数就是key:value - 灵活和易于扩展
从HTTP本身来说,开发人员可以自行添加数据,状态码,字段都没有固定死
从结构上来说,HTTP在应用层,那么下层可以 随意变动 - 应用广泛和跨平台
用户端有web,app,手机网页,等等
广泛的跨平台
缺点:
无状态和不安全
- 无状态
无状态的好处就是减少资源,毕竟你要存储状态也是需要字段的
无状态的缺点就是需要验证身份的操作,你需要无限循环登录
解决这个问题,我们增加了cookie - 不安全
因为HTTP是明文传输(抓包是能看到你传输的信息的)那么就导致不安全
解决这个问题,我们增加了HTTPS
9、HTTPS
因为HTTP的不安全性,导致后续出现一个HTTPS
HTTPS = HTTP + SSL
那么问题来了,HTTPS和HTTP请求的区别是什么?
- 安全性
HTTP请求是明文的
HTTPS进行了SSL加密 - 连接建立
HTTP直接进行TCP三次握手即可
HTTPS除了TCP三次握手外,还需要进行SSL握手 - 端口
HTTP端口默认80
HTTPS端口默认443 - CA证书
HTTP不需要CA证书
HTTPS需要CA证书确认身份