HTTP/HTTPS

780 阅读9分钟

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的区别

GETPOST方法没有实质区别,只是报文格式不同 GETPOST只是HTTP协议中两种请求方式,而HTTP协议是基于TCP/IP的应用层协议 无论是GET还是POST,用的都是同一个传输层协议,所以在传输上是没有区别的

  • GET获取资源;POST提交/上传 数据
  • GET请求长度在浏览器中有显示,而POST并没有
  • GET请求会被浏览器主动保留下来(历史记录), 而POST默认不会

【误区】GET请求传参长度有限制

  • 我们经常说GET请求参数的大小存在限制,而POST请求的参数大小是无限制的。其实这是有问题的。

  • 实际上HTTP协议从来没规定GET/POST的请求长度限制是多少

  • GET请求参数的限制来源于浏览器或者Web服务器,是它们限制了这个长度

  • 不同的浏览器和Web服务器,限制的最大长度不一样

【误区】POST方法比GET方法安全

  • POSTGET安全,是因为数据在地址栏URL看不见

  • 从传输的角度来说HTTP在网络上的明文传输,可以通过抓包工具完整获取的

  • 如果想要安全,可以使用HTTPS

keep-alive

HTTPkeep-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通道可以保持5smax=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之后,之前站点再也不用,那就是301
  • 302 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协议中间

工作原理

  1. 浏览器请求URL,找到服务器,向服务器发送请求。服务器将自己的证书(包含服务器公钥)、对称加密算法种类以及其他相关信息返回给浏览器
  2. 浏览器检查CA证书是否可依赖,确认证书的有效性
  3. 如果不,给服务器发送警告,询问是否可以继续使用
  4. 如果是,浏览器使用公钥加密一个随机对称密钥,包含加密的URL一起发送给服务器 5.服务器用自己的私钥解密浏览器发送的钥匙,然后用这把对称加密的钥匙给浏览器请求的URL链接解密
  5. 服务器用浏览器发送的对称钥匙给请求的网页加密,浏览器使用相同的钥匙就可以解密网页

优点

  • 使用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协议安全

彻底搞懂HTTPS的加密机制

面试带你飞:这是一份全面的 计算机网络基础 总结攻略

看图学HTTPS

你知道,HTTPS用的是对称加密还是非对称加密?

HTTP 响应代码