写在前面的话
和家人在一起的幸福,感觉真的很不错,开心~
继续码字~
(一)HTTP和TCP的区别和联系
TCP是传输层,而http是应用层
http是要基于TCP连接基础上的:
TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。
http是用来收发数据,即实际应用上来的。
(二)TCP/IP
“三次握手协议”:
第一次:C发送一个请求连接的位码SYN和一个随机产生的序列号给Seq,然后S收到了这些数据。
第二次:S收到了这个请求连接的位码,啊呀,有人向我发出请求了么,那我要不要接受他的请求,得实现确认一下,于是,发送了一个确认码 ACN(seq+1),和SYN,Seq给C,然后C收到了,这个是第二次连接。
第三次:C收到了确认的码和之前发送的SYN一比较,偶哟,对上了么,于是他又发送了一个ACN(SEQ+1)给S,S收到以后就确定建立连接,至此,TCP连接建立完成。
简单就是:请求,确认,连接。
TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。
(三)HTTP协议
第一:发送一个http请求给S,这个请求包括请求头和请求内容:
request header:
包括了,1.请求的方法是POST/GET,请求的URL,http协议版本2.请求的数据,和编码方式3是否有cookie和cooies,是否缓存等。
post和get请求方式的区别是,get把请求内容放在URL后面,但是URL长度有限制。而post是以表单的形势,适合要输入密码之类的,因为不在URL中显示,所以比较安全。
request body:
即请求的内容.
第二:S收到了http请求,然后根据请求头,返回http响应。
response header:包括了1.cookies或者sessions2.状态吗3.内容大小等
response body:
即响应的内容,包括,JS什么的。
第三,C收到了以后,就由浏览器完成一系列的渲染,包括执行JS脚本等。
(三)HTTP各个版本的不同
新版本的更新点
1、HTTP/1.0
增加了请求方式POST和HEAD;
Content-Type可以支持多种数据格式,即MIME多用途互联网邮件扩展,例如text/html、image/jpeg等;
同时也开始支持cache,就是当客户端在规定时间内访问统一网站,直接访问cache即可。
内容编码:content encoding
缺点:
每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接,就是不支持keepalive。
解决方案
Connection: keep-alive
2、HTTP/1.1(主流)
持久连接(persistent connection)
TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive
加入了管道机制,在同一个TCP连接里,允许多个请求同时发送,增加了并发性,进一步改善了HTTP协议的效率;
Content-Length 字段
Content-Length: 3495
分块传输编码
Transfer-Encoding: chunked
新增了请求方式PUT、PATCH、OPTIONS、DELETE等。
新增了Host字段
用来指定服务器的域名
3、HTTP/2.0
增加双工模式
不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题(HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级)
二进制协议
是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。
多工
复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"。
头信息压缩
一方面,头信息使用gzip或compress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
服务器推送
当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。
以上
参考链接
https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
TCP详解:https://blog.csdn.net/sinat_36629696/article/details/80740678
论HTTP请求大小:https://www.cnblogs.com/yjf512/archive/2013/03/29/2988296.html
URI和URL的区别比较与理解:https://blog.csdn.net/qq_32595453/article/details/80563142
HTTP协议版本:https://blog.csdn.net/qq_22238021/article/details/81197157
网友评论