HTTP学习

原文:

https://www.yuque.com/g/qajlhl/bqz6hy/mfpdvrhatc1gmkh0/collaborator/join?token=uKGl9LMlmxn7BtKb#

一个网页就是一个超文本文档

HTTP的性质

1、无状态的 同一个连接下,所有的请求之间都是没有联系的,都是独立的。

2、可扩展的 通过设置请求头可以扩展协议。

3、简单的 简单易读 对新手友好

HTTP消息

请求和响应

请求报文的结构:

1、请求行 = 请求类型 + 请求的路径 + http版本

2、请求头

常见的请求头:

DATE:发送请求的时间

cache-control:缓存的过期时间

if-modified-since:资源最后被修改的时间

if-none-match:

accept:客户端能够处理的内容类型

accept-language:客户端所使用的语言

referer:发送请求的页面的url

host:发送请求的页面的域(即ip地址的别名)

响应报文的结构:

1、响应行 = http版本 + 响应状态码 + 响应状态

http1.1 200 OK

2、响应头

date:发送响应的时间

cache-control:设置缓存的过期时间

etag

content-type:描述响应体的类型

content-length:响应体的大小

last-modified:服务器所记录的资源最后被修改的时间

3、空行

4、响应体

HTTP api 之 XMLHttpRequest

HTTP版本

1、http0.9 单行协议

请求:

之所以http0.9会被称为单行协议,就是因为它的请求仅有单行指令构成。同时请求的方法也只有get请求。

组成格式:

GET 请求的路径

响应:

响应报文只包含一个简单的响应文档。这也就意味着它无法传输其他类型的文件,并且如果文档出现错误也依然会被显示出来。

2、http1.0

http1.0在http0.9的基础上增加了版本协议状态码标头。同时客户端也可以获取除了文档类型以外的文件

3、http1.1

虽然http1.0有了很大的改进,但是依然存在很多问题。比如http1.0仅支持短暂连接,也就是说一个连接只能处理一个请求,请求处理完毕后连接会立即断开。

相比于http1.0,http1.1提出了以下改进:

●连接复用;一个连接可以处理多个请求。

●设置缓存控制机制;通过cache-control可以设置是否使用缓存,缓存的有效期等等。

●增加了delete,put等方法。

●新增了host标头;根据host使得不同域名配置到同一个服务器上。

4、http2.0

由于http是无状态的,同一个连接的不同请求都是相互独立。所以这会造成一个问题:标头中很多重复性的数据会被反复发送给服务器,造成了标头的冗余。另外,http1.0是文本协议,所有的数据都是以文本的形式传输,同时也是明文传输。这将引起数据在传输过程中的安全性问题。最后,http1.0在发送请求的时候,会等到上一次请求的响应到达之后才会发送本次请求。这将造成http队头阻塞的问题。

为了解决以上问题,http2.0提出了以下改进:

●压缩标头;避免请求头的累赘。

●二进制传输;在http2.0中,报文是以二进制的形式传输,降低了可读性从而保证了数据的安全。

●多路复用:同一个连接下,不同请求和响应可以交错发送。

●服务器推送:服务器会将客户端后续可能需要的资源全都推送给客户端。

5、http3.0

在http2.0中多个http请求是公用一个tcp连接的。当传输过程中发生丢包问题的时候,后面所有的请求都会等待着这个丢了的包被重新的发送过来。那么这样就会造成tcp队头阻塞的问题。

所以http3.0提出了QUIC协议。QUIC协议就是整合了TLS和TCP。它能够通过UDP协议运行多个流,这样避免了丢包问题导致的tcp队头阻塞问题。


协议升级-websocket


HTTP安全-cookie

cookie通常用来告知服务器两次请求是否来自同一个客户端。

cookie主要负责以下三个功能:

●管理会话状态:也就是记录信息

●跟踪浏览器行为

●个性化设置

cookie的属性

1、name

2、value

3、maxage/expires

expires是通过new Date设置一个具体的日期,再这个日期之后就是过期时间。

maxage是设置一个时间段,当过了这个时间段后才算过期。

注意:expires设置的时间只和客户端有关。

4、size

5、httpOnly:只有在http请求头中才能携带cookie。js操作无法访问到cookie。

6、secure:设置https传递cookie

7、sameSite:是否接受第三方cookie

sameSite有三个值:strict,lax,none

strict代表完全禁止第三方cookie

lax表示导航到目标网页的get请求可以携带cookie

none表示接受第三方cookie。但是必须设置secure才能生效。

8、domian:cookie的域

9、path:cookie的url路径

cookie的生命周期

会话cookie:

默认情况下,cookie的生命周期是会话期间。当会话结束后cookie也就失效。

持久cookie:

但是可以通过设置max-age来延长cookie的生命周期,只要没有到过期时间,就算关闭浏览器窗口cookie也依然生效。

cookie的安全策略

http-only

httpOnly开启之后意味着cookie只能在http请求头中携带,任何js脚本都无法修改cookie。这样在极大程度上提高了cookie的安全性

sameSite

禁止第三方cookie,避免和跨站请求一起携带cookie。

签名

服务器为每个cookie都生成一个签名,它会跟随着cookie一起返回给客户端并且保存起来。这样当cookie被修改之后服务器能够通过算法计算出签名是否匹配。从而判断出cookie是否被篡改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值