HTTP介绍与背景

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):网际协议

img

image-20220222145256978

TCP与UDP

TCPl(Transmission Control Protocol):传输控制协议

UDP(User Datagram Protocol):用户数据报协议

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

img

img

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请求体:{}

img

响应报文

响应行 +响应头 +响应体

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请求体:{}
img

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【服务器告诉浏览器回送数据的时间】

网页通信的大致过程

img

​ 我们知道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版本差异

img

image-20220221175140721

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版本

img

HTTPS的通信过程

img

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

参考资料

image-20221212224859917

HTTPS通信的优点

1、所有信息都是加密传播,⿊客⽆法窃听

2、具有校验机制,⼀旦被篡改,通信双⽅会⽴刻发现

3、配备身份证书,防⽌身份被冒充。