HTTP
Web使用一种名为HTTP
(HyperText Transfer Protocol, 超文本传输协议)的协议作为规范,完成从客户端到服务器的一系列运作流程。而协议是指规则的约定。可以说,Web是建立在HTTP协议上通信的。
HTTP
最初的目的就是为了让研究者共享知识信息,所以它的主要作用就是文档传输,它是一种用于传输文档的协议
请求方法
GET
: 获取资源HEAD
: 获取资源的元信息POST
: 提交/上传 数据PUT
: 修改数据DELETE
: 删除资源(几乎用不到)CONNECT
: 建立连接渠道,用于代理服务器OPTIONS
: 列出可对资源实施请求的方法,用来跨域请求TRACE
: 追踪请求-响应的传输路径
优缺点
- 优点
灵活可扩展
:主要体现在两个方面。一个是语义上的自由,只规定了基本格式,比如空格分隔单词,换行分割字段,其他的各个部分都还没有严格的语法限制。另一个就是传输形式的多样性,不仅仅是可以传输文本,还可以传输图片、视频等任意数据,非常方便可靠传输
:HTTP基于TCP/IP,因此把这一特性继承了下来。这属于TCP的特性请求-应答
:也就是一发一收、有来有回,当然这个请求方和应答方不单单指客户端和服务器之间,如果某台服务器作为代理来连接后端的服务器,那么这台服务器也会扮演请求方的角色无状态
:这里的状态指的是通信过程中上下文信息,而每次HTTP请求都是独立、无关的,默认不需要保留状态信息
- 缺点
无状态
: 在需要长连接的场景中,需要保存大量的上下文信息,以免传输大量重复的信息,那么这个时候无状态就成了HTTP的缺点了明文传输
: 协议里的报文(主要指的是头部)不使用二进制数据,而是文本形式队头阻塞问题
: 当HTTP开始长连接的时候,共用一个TCP连接,同一时刻只能处理一个请求,那么当前请求耗时过长的情况下,其它的请求只能处于阻塞状态
GET和POST的区别
GET
和POST
方法没有实质区别,只是报文格式不同
GET
和POST
只是HTTP
协议中两种请求方式,而HTTP
协议是基于TCP/IP
的应用层协议
无论是GET
还是POST
,用的都是同一个传输层协议,所以在传输上是没有区别的
GET
获取资源;POST
提交/上传 数据GET
请求长度在浏览器中有显示,而POST
并没有GET
请求会被浏览器主动保留下来(历史记录), 而POST
默认不会
【误区】GET请求传参长度有限制
-
我们经常说GET请求参数的大小存在限制,而POST请求的参数大小是无限制的。其实这是有问题的。
-
实际上
HTTP
协议从来没规定GET/POST
的请求长度限制是多少 -
对
GET
请求参数的限制来源于浏览器或者Web
服务器,是它们限制了这个长度 -
不同的浏览器和
Web
服务器,限制的最大长度不一样
【误区】POST方法比GET方法安全
-
POST
比GET
安全,是因为数据在地址栏URL看不见 -
从传输的角度来说
HTTP
在网络上的明文传输,可以通过抓包工具完整获取的 -
如果想要安全,可以使用
HTTPS
keep-alive
HTTP
的keep-alive
也称为HTTP
的长连接
它通过重用一个TCP
连接来发送/接收多个HTTP
请求,来减少创建/关闭多个TCP连接的开销
在HTTP/1.0
协议中,如果请求头中包含
Connection: keep-alive
则代表开启了keep-alive
,而服务端的返回保文头中,也会包含相同的内容
在HTTP/1.1
协议中,默认开启keep-alive
,除非显式地关闭它:
Connection: close
除此之外还可以设置断开的时间
Keep-Alive: timeout=5, max=100
这个就表示TCP
通道可以保持5s
,max=100
表示这个长连接最多接收100
次请求就断开
HTTP和TCP的区别
HTTP是应用层协议,定义的是传输数据内容的规范;而TCP是底层通讯协议,定义的是数据传输和连接方式的规范。
HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP的也一定支持TCP
HTTP状态码
- HTTP状态码位三位数,被归为五类
1XX
:表示目前是协议处理的中间状态,还需要后续操作2XX
:表示成功状态3XX
:重定向状态,资源位置发生变动,需要重新请求4XX
:请求报文有误5XX
:服务端发生错误
1XX
101 Switching Protocols
:在HTTP升级为WebSocket
的时候,如果服务器同意变更,就会发送状态码101
2XX
200 OK
:请求成功状态码,响应体中含有数据204 No Content
:含义同200,但是响应报文不含实体的主体部分206 Partial Content
:表示部分内容请求成功。使用场景为HTTP分快下载和断点续传,当然也会带上相应的响应头字段Content-Range
3XX
301 Move Permanently
:永久重定向。HTTP升级HTTPS之后,之前站点再也不用,那就是301302 Found
:临时重定向。当前站点暂时不可用,那就是302,后续可能换回来304 Not Modified
:当命中协商缓存时会返回这个状态码
4XX
400 Bad Request
:请求无效。通常为前后端数据格式不一致或者其他原因403 Forbidden
:服务器已经得到请求,但是拒绝执行,比如没权限、法律禁止等等404 Not Found
:资源未找到,服务器不存在对应的资源
5XX
500 Internal Server Error
:服务器报错,有些时候可以在Response看到后端的报错信息等502 Bad Gateway
:服务器正常,但是访问出错503 Service Unavailable
:服务器繁忙或者停机维护,暂时无法处理请求
HTTPS
HTTP
的特性是明文传输,因此在传输的每一个环节,数据都有可能被第三方窃取或者篡改。
具体来说,HTTP
数据经过TCP
层,然后经过WIFI
路由器、运营商和目标服务器,这些环节中都有可能被中间人拿到数据并进行篡改,也就是我们常说的中间人攻击
为了防范这样一类攻击,我们不得已引入新的加密方案,即HTTPS
简单来说HTTPS协议是有HTTP协议
和SSL协议
构建的可进行加密传输和身份认证的网络协议,比HTTP协议的安全性更高
最后一个字母S
指的是SSL/TLS
协议,它位于HTTP协议与TCP/IP
协议中间
工作原理
- 浏览器请求URL,找到服务器,向服务器发送请求。服务器将自己的证书(包含服务器公钥)、对称加密算法种类以及其他相关信息返回给浏览器
- 浏览器检查CA证书是否可依赖,确认证书的有效性
- 如果不,给服务器发送警告,询问是否可以继续使用
- 如果是,浏览器使用公钥加密一个随机对称密钥,包含加密的URL一起发送给服务器 5.服务器用自己的私钥解密浏览器发送的钥匙,然后用这把对称加密的钥匙给浏览器请求的URL链接解密
- 服务器用浏览器发送的对称钥匙给请求的网页加密,浏览器使用相同的钥匙就可以解密网页
优点
- 使用
HTTPS
协议可认证用户和服务器,确保数据发送到正确的客户机和服务器 HTTPS
协议是由SSL + HTTP
协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全,可防止数据在传输过程中不被窃取、改变,保证了数据的完整性HTTPS
是现行架构下最安全的解决方案,虽然不是最安全,但它大幅增加了中间人攻击的成本- 谷歌增在2014年8月份调整搜索引擎算法,并称"比起同等
HTTP
网站,采用HTTPS
加密的网站在搜索结果中的排名将会更高"
缺点
HTTPS
握手阶段比较费时,会使页面加载时间延长50%
,增加10%~20%
的耗电HTTPS
缓存不如HTTP
高效,会增加数据开销SSL
证书也需要钱,功能越强大的证书费用越高SSL
证书需要绑定IP
,不能在同一个IP
上绑定多个域名,IPV4
资源支持不了这种消耗
HTTP和HTTPS对比
- 概念对比:HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议
- 费用对比。HTTPS协议需要CA证书,费用比较高
- 连接方式和端口。使用不同的连接方式,端口也各有不同,一般而言,HTTP协议的端口为80,HTTPS的端口是443
- 安全性对比。HTTP的连接很简单,是无状态的;HTTPS协议是由SSL + HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全