HTTP介绍与背景
网络科普
OSI与TCP/IP模型
OSI
OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。
TCP/IP
TCP/IP是一个协议簇,是在 IP 协议的通信过程中,使用到的协议族的统称。
TCPl(Transmission Control Protocol):传输控制协议
IP(Internet Protocol):网际协议


TCP与UDP
TCPl(Transmission Control Protocol):传输控制协议
UDP(User Datagram Protocol):用户数据报协议
| UDP | TCP | |
|---|---|---|
| 是否连接 | 无连接 | 面向连接(三次握手,四次挥手) |
| 是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
| 连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 |
| 传输方式 | 面向报文 | 面向字节流 |
| 首部开销 | 首部开销小,仅8字节 | 首部最小20字节,最大60字节 |
| 适用场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |


HTTP介绍
HTTP是Hyper Text Transfer Protocol 超文本传输协议。是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等,,请求端口是80。
HTTP是无状态的半双工应用层协议
HTTP是⽆状态的,也就是说,它是不对通信状态进⾏保存的。它并不知道之前通信的对⽅是谁,这样设计的⽬的就是为了让HTTP简单化,能够快速处理⼤量的事务!但是,我们经常是需要知道访问的⼈是谁,于是就有了Cookie技术或者通过请求头传递身份认证令牌
HTTP请求方法介绍
GET:用作于获取资源
POST:用来传输实体的主体(RESTFUL中主要用来创建单个资源)
PUT:要用来传输文件(RESTFUL中主要用来更新单个资源)
DELETE:删除资源
OPTIONS:查询请求的指定资源都服务端支持什么http方法
HEAD:获得报⽂⾸部,与GET⽅法类似,只是不返回报⽂主体,⼀般⽤于验证URI是否有效。
HTTP常⽤的状态码
2XX:一般是请求成功
200:正常处理
204:成功处理,但是服务器没有新数据返回,显示页面不更新
206:对服务器进行范围请求,只返回一部分数据
3XX:一般表示重定向重定向区分解释
301:永久重新向:请求的资源已分配了新的URI中,URL地址改变了
302:临时重新向:请求的资源临时分配了新的URI中,URL地址没变
303:同302,明确客户端用GET方式请求资源
307:同302,请求方法不变(如不会把POST请求变成GET)
308:同301,请求方法不变(如不会把POST请求变成GET)
4XX:表示客户端出错了
400:请求报文语法出错
401:需要身份认证
403:没有权限访问
404:服务器没有这个资源
5XX:服务器出错
500:服务器内部异常
502:错误的网关(网站的服务器暂时挂了(不响应)),可能是服务器正在发版重启,或者响应不过来
503:服务器正忙
HTTP请求报文介绍
请求报文
请求行(请求方法 + URI + HTTP版本) + 请求头 +请求体
POST /cms/web/tms/check/pageCheckJira HTTP/1.1
Host: mss-dev01.dotfashion.cn
Proxy-Connection: keep-alive
Content-Length: 115
Accept: application/json, text/plain, /
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Content-Type: application/json;charset=UTF-8
Origin: www.example.com
Referer: www.example.com/system-cms/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
空行
request请求体:{}

响应报文
响应行 +响应头 +响应体
HTTP/1.1 200 OK
Server: openresty
Date: Wed, 23 Feb 2022 07:54:42 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
P-Version: 220224
Trace-Id: 2937c15ea18fea3f
Access-Control-Allow-Origin: www.example.com
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Credentials: true
Content-Encoding: gzip
空行
response请求体:{}
Header举例
Location: http://www.it315.org/index.jsp 【服务器告诉浏览器要跳转到哪个⻚⾯】
Server:apache tomcat【服务器告诉浏览器,服务器的型号是什么】
Content-Encoding: gzip 【服务器告诉浏览器数据压缩的格式】
Content-Length: 80 【服务器告诉浏览器回送数据的⻓度】
Content-Language: zh-cn 【服务器告诉浏览器,服务器的语⾔环境】
Content-Type: text/html; charset=GB2312 【服务器告诉浏览器,回送数据的类型】
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器该资源上次更新时间】
Refresh: 1;url=http://www.it315.org【服务器告诉浏览器要定时刷新】
Content-Disposition: attachment; filename=aaa.zip【服务器告诉浏览器以下载⽅式打开数据】
Transfer-Encoding: chunked 【服务器告诉浏览器数据以分块⽅式回送】
Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服务器告诉浏览器要保存Cookie】
Expires: -1【服务器告诉浏览器不要设置缓存】
Cache-Control: no-cache 【服务器告诉浏览器不要设置缓存】
Pragma: no-cache 【服务器告诉浏览器不要设置缓存】
Connection: close/Keep-Alive 【服务器告诉浏览器连接⽅式】
Date: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器回送数据的时间】
网页通信的大致过程

我们知道HTTP是在应⽤层中的,显然,我们在Web通信的过程中,不仅仅是需要HTTP协议的,还会涉
及到其他的协议的。
DNS:负责解析域名
我们访问⼀个⽹⻚的时候,往往是通过域名来访问的 www.baidu.com ,⽽计算机通信只
认的是我们的主机地址(192.168.xxx.xxx),因此,当我们输⼊域名的时候,需要DNS把域名解析成
主机来进⾏访问。
HTTP:产⽣请求报⽂数据
当我们对Web⻚⾯进⾏操作的时候,就会产⽣HTTP报⽂数据,请求对应的服务端进⾏响应。
TCP协议:分割HTTP数据,保证数据运输
TCP协议采⽤了三次握⼿的⽅式来保证数据的准确运输,在运输的数据的时候,发送标识过去给服
务器,服务器也返回标识给客户端,⽽客户端收到消息后再次返回标识给服务器。这样⼀来就保证
了数据运输是可靠的。
IP协议:传输数据包,找到通信⽬的地地址。
IP协议把我们的产⽣的数据包发送给对⽅,IP地址指明了节点被分配的地址,但IP地址可能会变
换,我们可以使⽤ARP协议来将IP地址反射为MAC地址。MAC地址是不会更改的,是⽹卡所属的
固定地址。在找到通信⽬的地之前,我们是需要不断的中转的,这过程我们称作为:“路由中转”,我们并不知
道路由中转了多少次的。因此是不能全⾯了解到互联⽹中的传输状况的。
我们⽹⻚上请求数据就是这么⼀个流程
HTTP版本差异


HTTP1.1新改动
1、持久连接(一次TCP连接可以多次使用,当然如果并发发起多个HTTP请求,也会有多个TCP连接)
2、提出管线化理论(由于实践中存在很多问题无法解决,所以浏览器默认是关闭,所以可以认为是不支持同时多个请求,依然阻塞,HTTP Pipelining其实是把多个HTTP请求放到⼀个TCP连接中⼀⼀发送,⽽在发送过程中不需要等待服务器对前⼀个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应)
3、增加host字段,支持断点传输(将实体主体分块传输,资源下载终端后,下载剩余部分即可,无需重新下载)
4、增加缓存处理(新的header如Cache-Control)
补充说明:
1、浏览器http请求的并发性是如何体现的?并发请求的数量有没有限制?
页面资源请求时,浏览器会同时和服务器建立多个TCP连接,在同一个TCP连接上顺序处理多个HTTP请求。所以浏览器的并发性就体现在可以建立多个TCP连接,来支持多个http同时请求。Chrome浏览器最多允许对同一个域名Host建立6个TCP连接,不同的浏览器有所区别
HTTP2.0新改动
1、二进制分帧
2、多路复用,请求不阻塞
3、头部压缩
4、服务器推送
HTTP优化方案
- TCP复⽤:TCP连接复⽤是将多个客户端的HTTP请求复⽤到⼀个服务器端TCP连接上,⽽HTTP复
⽤则是⼀个客户端的多个HTTP请求通过⼀个TCP连接进⾏处理。前者是负载均衡设备的独特功
能;⽽后者是HTTP 1.1协议所⽀持的新功能 - 内容缓存:将经常⽤到的内容进⾏缓存起来,那么客户端就可以直接在内存中获取相应的数据了。
- 压缩:将⽂本数据进⾏压缩,减少带宽
- SSL加速(SSL Acceleration):使⽤SSL协议对HTTP协议进⾏加密,在通道内加密并加速
- TCP缓冲:通过采⽤TCP缓冲技术,可以提⾼服务器端响应时间和处理效率,减少由于通信链路问
题给服务器造成的连接负担。
HTTPS介绍
HTTP的安全隐患
1、通信使⽤明⽂【没有加密过内容的】
2、不验证身份,无论是客户端还是服务端【HTTP无状态】(可以通过请求头带JWT-token来验证客户端身份)
3、无法保证所见即所得【可以被篡改】(可以设置数字验签(哈希整个json体),把双方约定的某个secret字段作为其中一个字段参与签名字段生成后移除)
HTTPS相关概念介绍
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer(SSL)),是以安全为目标的HTTP通道,简单讲是HTTP的安全版,端口号是443。即HTTP下加入SSL层.
SSL(Secure Socket Layer):安全套接字协议,SSL是基于HTTP之下TCP之上的一个协议层,是基于HTTP标准并对TCP传输数据时进行加密,所以HPPTS是HTTP+SSL/TCP的简称。
TLS(Transport Layer Security)安全传输层协议,是SSL的3.0版本

HTTPS的通信过程

TCP三次握手建立连接后,再通过TCP进行TLS认证,最终得到会话秘钥

HTTPS通信的优点
1、所有信息都是加密传播,⿊客⽆法窃听
2、具有校验机制,⼀旦被篡改,通信双⽅会⽴刻发现
3、配备身份证书,防⽌身份被冒充。