计算机网络重点学习(一)之HTTP

2021/05/25 Network 共 4272 字,约 13 分钟

本篇章是为了突击面试中的计算机网络重点而存在的,目的是涵盖面试中常考的板块

HTTP的基础知识

HTTP的名称

http的全称是HyperText Transfer Protocol,也就是超文本传输协议

http一共可以被拆分为三个部分——超文本、传输、协议,简单来说,HTTP就是在计算机网络世界中专门用来两点之间传输视频、音频、图像文字等超文本内容的约定和规范

HTTP的五大状态码

  • 1XX: 提示信息,表示目前是协议处理的中间状态,还需要等待后续处理,这种用到的比较少
  • 2XX: 成功,报文已经被成功收到并且并被正确处理,常用的有200、204、206
  • 3XX: 重定向,资源位置发生变化,需要客户端重新发送请求,常用的有301、302、304
  • 4XX: 客户端错误,请求的报文格式有误,服务端无法解析,常用的有400、403、404
  • 5XX: 服务器错误,服务器在处理请求时内部出现错误常用的有500、501、502、503

常用状态码的详解

  1. 200 ok:这是最常见的状态码,表示一切正常
  2. 202 no content:这也是成功的状态码,只不过表示响应没有body数据
  3. 206 Partial Content:这是HTTP的断点续传,意思是当前的body数据不是所有的body数据,只是其中的一部分
  4. 301 Move Permanently:这是永久重定向,意思是当前访问的资源已经永久地改变位置,需要重新更换一个URL来进行请求
  5. 302 Found:这是临时重定向,意思是当前资源还存在原来的位置,只不过需要暂时切换另外一个URL来进行访问
  6. 304 Not Modify :不具有跳转含义,表示当前的资源未修改,重定向已经存在的缓存文件,因此又被称为缓存重定向
  7. 400 Bad Request:意思是当前客户端发起的请求是错误的,但是这只是笼统的提示
  8. 403 Forbidden:意思是当前资源被服务器禁止访问,并不是客户端的问题
  9. 404 Not Found:意思是当前请求的资源在服务器上不存在或者找不到,无法给客户端提供资源
  10. 500 Internet Service Error:意思是当前服务器发生了错误,但是仍然是一个笼统的说法,与400类似
  11. 501 Not Implemented:意思是当前服务还未开放,类似于暂未开业,敬请期待
  12. 502 Bad Gateway:意思是服务器自身正常,但是在访问后端服务器时发生了错误
  13. 503 Service Unavailable:意思是当前服务器正忙,请稍后再试

HTTP的常见字段

  • Host字段:Host字段是用来指定域名的 image 我们一开始就说过,HTTP是用来在网络世界中进行两点之间传输超文本内容的约定和规范的,既然是两点之间,并且又是在庞杂的网络世界,那么自然要指定特定的主机,Host就是来帮我们分辨目标的字段

  • Content-Length字段:服务器在返回数据的时候会标注返回长度的,这样才可以区分出本次回复和下次回复 image

  • Connection字段:两台主机之间的连接分为两种,一种是长连接,一种是短连接;长连接,顾名思义,两台主机之间建立连接之后不会立刻断开;短连接就是两个主机之间建立连接成功,然后传输一个资源,然后立马断开连接。从这里我们就可以发现,如果两台主机之间建立的是短连接,并且要传输大量的内容的话,那么会造成极大的资源浪费,因为建立可靠连接的过程是需要进行三次握手、四次挥手的,这样会造成极大资源浪费。如果是长连接,那么就可以等到所有资源传输完毕双方再断开连接。从HTTP/1.1 版本开始就是默认使用的长连接,但是为了兼容以前的老版本,还是会存在这个字段 image

  • content-type字段:本字段的用处是服务器在返回给客户端时的数据类型 而且,客户端在发送时也可以使用accept来说明自己能够接收什么样的类型

    image

  • Content-Encoding字段:客户端在该字段中标注特定的压缩格式,这样服务端就会将已经压缩好的特定的格式传输给客户端 image

GET与POST

GET与POST的区别

GET的意思是从服务器获取资源,这些资源可以是文本、音频、图像等,例如,你打开我的博客,那么就是浏览器向服务器发起了一个GET请求

image

POST则是GET的反向操作,例如你在我的文章下面留言,并且点击发送按钮,此时浏览器就会将你留言的内容拼接到请求的body中去通过TCP协议来发送给服务器

GET和POST的幂等与安全

  • 幂等的意思是多次的重复操作得到的结果是一致的
  • 安全的意思是客户端发送的内容不会破坏服务器上的资源

很明显,GET请求是向服务器发起读取请求,是只读操作,所以是安全且幂等的;POST请求是向服务器发起写请求,所以是不安全的,并且多次的写请求会创建不同的资源,所以是不幂等的

HTTP特性与优缺点

HTTP有许多的特性,这些特性带来了优缺点

HTTP的优点

  1. 简单: HTTP的基本报文格式就是 header + body,头信息也是 key + value 的简单格式,非常利于学习
  2. 灵活、易于扩展: HTTP协议里面的请求、URL、状态码、头字段等都没有被限制死,这方便了开发人员进行扩展与自定义,同时,由于,由于HTTP是OSI模型的一环,它的底层也是可以随意定制的,在HTTP/3中甚至将底层的TCP转为了基于UDP的QUIC
  3. 应用广泛 HTTP的应用广泛,生态齐全,具有天然的跨平台优势

HTTP的缺点

  1. 无状态双刃剑 无状态的好处是服务器不需要花费额外的资源去记录信息的状态,但是正是由于无状态特性,关于有时序性的操作会变得非常麻烦 例如 登陆 ~> 下单 ~> 支付 这一系列流程下来,我们都需要对用户的身份进行验证,但是由于HTTP的无状态特性,每一个操作都需要对用户身份进行验证 对于无状态的问题,最常见的解决方法就是使用cookie技术 image

  2. 明文传输双刃剑 明文传输对于开发人员来说,可以非常方便的用肉眼观察,但是这样也导致信息在互联网上裸奔

  3. 不安全 HTTP的最大问题就是安全性不高

    • 通信使用明文,不进行加密:如果HTTP中包含账号密码信息,那么会造成账号失窃
    • 不验证通信双方身份,容易遭遇伪装:访问假的淘宝、京东
    • 无法验证报文的完整性,有可能报文已
    • 经被修改:在报文中植入垃圾广告

    HTTP的不安全问题可以通过使用HTTPS来进行解决,HTTPS里面加入了SSL层,由此来保证安全性

HTTP和HTTPS

HTTP和HTTPS的区别

  1. HTTP是超文本传输协议,在传输的过程中是明文传输,有安全隐患。HTTPS则是解决了HTTP的安全问题,通过引入SSL层来保证报文的加密传输
  2. HTTP建立连接的方式相对简单,只需要使用TCP层进行三次握手即可。HTTPS建立连接的方式在HTTP的基础上还需要进行SSL层的三次握手
  3. HTTP的端口是80,HTTPS的端口是443
  4. HTTPS需要向CA申请数字证书用于确保服务器的身份 image

HTTPS解决HTTP哪些问题

HTTP存在的问题

  1. 窃听风险:HTTP使用的是明文传输,容易被监听
  2. 篡改风险:HTTP报文中的内容容易被他人拦截并且篡改,这是无法校验的
  3. 冒充风险:他人有可能冒充淘宝网站,造成犯罪

HTTPS解决的问题

  1. 信息加密:内容被加密,无法被窃听
  2. 校验机制:报文内容被加密,如果被篡改就会无法正常显示
  3. 身份证书:服务器会得到CA的验证,证明网站的真实性

HTTPS解决问题的方法

  1. 混合加密:通过混合加密保证了密文的安全性,客户端首先向服务端索要公钥,然后用公钥对信息进行加密,加密完毕传输给服务端,服务端再通过私钥解密
  2. 摘要算法保证完整性:报文传输之前会根据报文的内容计算一个值,后续传达后会根据这个值来进行判断是否存在被篡改的问题
  3. 数字证书:当客户端向服务器发起索要公钥的请求的时候,如何保证服务端的身份可信?这里就需要借助第三方权威机构CA,CA为服务器颁发证书,服务器将公钥放在证书里面,只要证书是可靠的,那么密钥就是可靠的 image

HTTP/1.1 、HTTP/2 、HTTP/3的演变

HTTP / 1.1对于HTTP / 1.0的提升

  1. 使用长连接代替短连接,避免了反复建立连接的代价
  2. 支持管道技术,一条消息发送出去后不用等到回复就发送后续消息

虽然HTTP / 1.1相比HTTP / 1.0 有提升,但是HTTP /1.1还是存在瓶颈

  1. 请求头(header)没有经过压缩就发送出去,在头部信息冗杂的情况下会出现性能问题
  2. 服务器是按照请求顺序响应的,如果某些服务器的响应慢了,可能会导致某一些服务器一直无法得到响应,这也是队头阻塞
  3. 没有请求优先级顺序
  4. 请求只能由客户端主动发起,服务器被动响应

HTTP / 2的改进

  1. 头部压缩:如果同时发送了大量的请求,他们的头部是相同的话,那么协议就会消除这些请求的相同的头部,这里使用的算法也就是 HPack 算法
  2. 二进制格式:HTTP /2不再使用字符串的传输,而是采用二进制格式传输,二进制格式传输虽然对于人不太友好,但是计算机只能识别二进制,所以提升了处理的速度。头信息和数据体都是二进制形式,所以被统称为帧(frame) image
  3. 数据流:HTTP/2 的数据包不是按顺序发送的,同⼀个连接⾥⾯连续的数据包,可能属于不同的回应。因此,必 须要对数据包做标记,指出它属于哪个回应。 每个请求或回应的所有数据包,称为⼀个数据流( Stream )。每个数据流都标记着⼀个独⼀⽆⼆的编 号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数 客户端还可以指定数据流的优先级。优先级⾼的请求,服务器就先响应该请求。 image
  4. 多路复用:多路复用解决了队头阻塞问题,简单来说,假如有两个客户端都和服务器建立了连接,服务器在处理A客户端的请求要花费大量时间的话,那么服务器就会先将处理完毕的A的请求的部分先返回,然后去处理B的请求,最后再来解决A的请求
  5. 服务器推送:服务器再也不是只能等待客户端发送请求然后被动响应的一方,服务器也可以自己推送消息到客户端

HTTP / 2 虽然有了很大的优化,但是仍然存在一个很大的缺点,那就是HTTP / 2 的底层是TCP协议,TCP无法识别一个TCP连接中的不同请求,如果发生了丢包现象,那么TCP就会发动TCP重传机制,这个连接中的所有请求都必须等待这个丢了的包重传,严重影响效率

HTTP / 3 的改进

HTTP / 2的底层使用TCP协议,这就无法避免丢包阻塞所有的请求,于是HTTP / 3就采用了基于 UDP 的QUIC技术,我们都知道UDP是不可靠的协议,那么如何保证可靠呢?其实也就是当发现了丢包现象就会阻塞这一个流,然后重传 image

QUIC协议就是一个基于UDP的伪TCP协议,这是一个新的协议,很多设备不认识QUIC协议,于是就会把它当作UDP,这也导致HTTP / 3的推广变得非常缓慢

文档信息

0 comments
Anonymous
Markdown is supported

Be the first person to leave a comment!

Search

    Table of Contents

    文章目录