【网络】——HTTP协议

📑前言

本文主要是【网络】——HTTP协议的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是青衿🥇
☁️博客首页:CSDN主页放风讲故事
🌄每日一句:努力一点,优秀一点

在这里插入图片描述

目录


1、HTTP常见状态码?

 1xx  	 信息响应(100-199)  	代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。
 2xx  	 成功响应(200-299)  	代表请求已成功被服务器接收、理解、并接受 。
 3xx 	 重定向(300-399)  	表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向
 4xx  	 客户端错误(400-499)  	代表了客户端看起来可能发生了错误,妨碍了服务器的处理。
 5xx  	 服务器错误(500-599)  	表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生。
2xx:
● 200(成功):请求已成功,请求所希望的响应头或数据体将随此响应返回
3xx
● 301(永久移动):请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
● 302(临时移动):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
4xx
● 403(禁止):服务器拒绝请求。这通常意味着该资源不可用,或者服务器配置了对该资源的访问限制
● 404(未找到):服务器找不到请求的网页
5xx
● 500(服务器内部错误):服务器遇到错误,无法完成请求

2、HTTP方法有哪些?

方法	作用
GET	获取资源
POST	向服务器添加数据
PUT	上传文件
DELETE	删除文件
为了方便记忆,可以将PUT、DELETE、POST、GET理解为客户端对服务端的增删改查:
● PUT:上传文件,向服务器添加数据,可以看作增;
● DELETE:删除文件;
● POST:传输数据,向服务器提交数据,对服务器数据进行更新;
● GET:获取资源,查询服务器资源;

3、GET 和 POST 的区别?

1. 从请求参数来看:
● GET 提交的数据会放在 URL 之后,并且请求参数会被完整的保留在浏览器的记录里,由于参数直接暴露在 URL 中,可能会存在安全问题,因此往往用于获取资源信息;
● 而 POST 参数放在请求主体中,并且参数不会被保留,相比 GET  方法,POST 方法更安全,主要用于修改服务器上的资源。
2. 从是否幂等性来看:
● GET 请求用于查看信息,不会改变服务器上的信息;而 POST 请求用来改变服务器上的信息。正因为 GET  请求只查看信息,不改变信息,对数据库的一次或多次操作获得的结果是一致的,认为它符合幂等性。
● 幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样的结果。
3. 从其他层面来看:
● GET 请求能够被缓存,GET 请求能够保存在浏览器的浏览记录里,GET 请求的 URL  能够保存为浏览器书签。这些都是 POST 请求所不具备的,缓存是 GET  请求被广泛应用的根本。

4、HTTP方法的幂等性?

HTTP方法的幂等性:指一次和多次请求某一个资源应该具有同样的副作用,这里的副作用是指资源状态。
1. GET方法:GET方法用来查看信息,不会改变服务器上的信息,所以是幂等的;
2. PUT方法:PUT方法用来修改资源的内容,但是不会增加资源的种类,也就是说PUT方法通常是对已经存在的资源进行修改,所以是幂等的;多次修改一次修改都是一样的
3. POST方法:POST方法用来新增资源,所以不是幂等的;
4. DELETE方法:DELETE方法用来删除资源,调用一次和多次对资源产生影响是相同的,所以也满足幂等性;
总结:GET方法,PUT方法,DELETE方法是幂等性的,POST方法不是幂等性的。

5、HTTP请求与响应报文格式?

请求报文格式: 请求行(请求方法+url地址+ HTTP版本)、请求头(key-value键值对)、空格、请求体。
响应报文格式: 状态行(HTTP版本+状态码+状态值)、响应头(key-value键值对)、空格、响应体。

6、HTTP/1.1和HTTP/2.0的主要区别是什么?

主要区别如下:
1. 二进制格式传输:相比于 HTTP/1.0 的文本(字符串)传送, HTTP/2.0 采用二进制传送。客户端和服务器传输数据时把数据分成帧,帧组成了数据流,流具有流 ID 标识和优先级,通过优先级以及流依赖能够一定程度上解决关键请求被阻塞的问题。
2. HTTP/2.0 支持多路复用: HTTP/2.0 支持多路复用。因为流 ID 的存在,通过同一个 HTTP 请求可以实现多个 HTTP 请求传输,客户端和服务器可以通过流 ID 来标识究竟是哪个流从而定位到是哪个 HTTP 请求。
3. HTTP/2.0 头部压缩:HTTP/2.0 通过 gzip 和 compress 压缩头部然后再发送,同时通信双方会维护一张头信息表,所有字段都记录在这张表中,在每次 HTTP 传输时只需要传头字段在表中的索引即可,大大减小了重传次数和数据量。
4. HTTP/2.0 支持服务器推送: 服务器在客户端未经请求许可的情况下,可预先向客户端推送需要的内容,客户端在退出服务时可通过发送复位相关的请求来取消服务端的推送。

7、HTTP长连接和短连接?

长连接
● 概念: 一次TCP连接,多次HTTP通信。
● 优点: 长连接可以省去较多的TCP建立/关闭的操作,减少浪费,节省时间,对于频繁请求资源的客户,较适用于长连接。
● 缺点:维持较多的长连接对服务器是一个很大的负担。 
● 使用场景: 多用于操作频繁,点对点的通讯,而且客户端连接数目较少的情况。例如即时通讯、网络游戏。
短连接
● 概念:一次连接,一次通信。
● 优点:短连接对于服务器来说较为简单,存在的连接都是有用的连接,不需要额外的控制
● 缺点:如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。  
● 使用场景: 用户数目较多的Web网站的 HTTP 服务一般用短连接。例如京东,淘宝这样的大型网站一般客户端数量达到千万级甚至上亿,若采用长连接势必会使得服务端大量的资源被无效占用,所以一般使用的是短连接。
如何设置长连接?
通过在头部(请求和响应头)设置 Connection 字段指定为keep-alive,HTTP/1.0 协议支持,但是是默认关闭的,从 HTTP/1.1 以后,连接默认都是长连接。

8、一个TCP连接可以同时处理多少次HTTP请求?

HTTP版本不同,一个TCP连接可以同时处理的HTTP请求次数也不同:
1. HTTP 1.0 版本协议,默认使用的是短连接,一般情况下,不支持长连接,因此在每次请求发送完毕之后,TCP 连接即会断开,因此一个 TCP发送一个 HTTP 请求。如果想要将一条 TCP 连接保持在活跃状态,我们可以指定 Connection 的首部字段的值为Keep-Alive,这样一个TCP连接便可以处理多次HTTP请求;
2. HTTP 1.1 版本协议,支持了长连接,因此只要 TCP 连接不断开,便可以一直发送 HTTP 请求,持续不断,没有上限;
3. HTTP 2.0 版本协议,支持多用复用,一个 TCP 连接是可以并发多个 HTTP 请求的,同样也是支持长连接,因此只要不断开 TCP 的连接,HTTP 请求数也是可以没有上限地持续发送。

9、HTTPS是什么?

1. HTTPS并不是应用层的一种新协议。
2. HTTPS协议是指:HTTP协议+加密处理+身份认证+完整性保护(HTTP协议+SSL协议/TLS协议)
3. 通常,HTTP协议会直接和TCP通信,而使用HTTPS,则变成了HTTP先和SSL通信,再由SSL和TCP通信。一般,将SSL统称SSL+TLS。

10、HTTPS 的加密方式?

HTTPS 采用对称加密和非对称加密相结合的方式:
1. 首先使用 SSL/TLS 协议进行加密传输;
2. 为了弥补非对称加密的缺点,HTTPS 采用证书来进一步加强非对称加密的安全性;
3. 通过对称加密,客户端和服务端协商好之后进行通信传输的对称密钥,后续的所有信息都通过该对称秘钥进行加密解密,完成整个HTTPS 的流程。

11、HTTP与HTTPS的区别?

1. 安全: HTTP 协议以明文方式发送内容,数据都是未加密的,安全性较差。HTTPS 数据传输过程是加密的,安全性较好。
2. 端口:HTTP 的端口号是 80,HTTPS 的端口号是 4433. 效率:HTTP 页面响应比 HTTPS 快,主要因为 HTTP 使用 3 次握手建立连接,客户端和服务器需要握手 3 次,而 HTTPS 除了 TCP 的 3 次握手,还需要经历一个 SSL 协商过程。
4. 资源消耗:HTTP资源消耗较少,而HTTPS由于需要加密处理,资源消耗更多。
5. 协议:HTTP运行在TCP协议之上,HTTPS运行在SSL协议之上,SSL运行在TCP协议之上。

12、Cookie与Session?

 Cookie:
● Cookie 是保存在客户端的一小块文本串的数据。客户端向服务器发起请求时,服务端会向客户端发送一个 Cookie,客户端就把 Cookie 保存起来。在客户端下次向同一服务器再发起请求时,Cookie 被携带发送到服务器。服务端可以根据这个Cookie判断用户的身份和状态。
Session:
● Session 指的就是服务器和客户端一次会话的过程。它是另一种记录客户状态的机制。不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。客户端浏览器再次访问时只需要从该session中查找用户的状态。

13、Cookie和Session的区别?

1. 存储位置不同:Cookie 保存在客户端,Session 保存在服务器端。
2. 存储数据类型不同:Cookie 只能保存ASCII,Session可以存任意数据类型,一般情况下我们可以在 Session 中保持一些常用变量信息,比如说 UserId 等。
3. 有效期不同:Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般有效时间较短,客户端关闭或者 Session 超时都会失效。(Cookie如果没有设置过期时间,那么这个 Cookie 就是一个会话 Cookie,它会在浏览器关闭时被删除。如果设置了过期时间,即使浏览器关闭,Cookie 仍然存在,直到到达过期时间)
4. 用途不同:Cookie一般存用户信息(Token),Session一般通过服务器记录用户状态(购物车)5. 隐私策略不同:Cookie 存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在 Cookie 中导致信息被窃取;Session 存储在服务端,安全性相对 Cookie 要好一些。
6. 存储大小不同: 单个Cookie保存的数据不能超过4K,Session可存储数据远高于 Cookie。

14、Session 和 Cookie有什么关联呢?

可以使用Cookie记录Session的标识:
● 用户第一次请求服务器时,服务器根据用户提交的信息,创建对应的 Session,请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入 Cookie 中,同时 Cookie 记录此 SessionID 是属于哪个域名。
● 当用户第二次访问服务器时,请求会自动判断此域名下是否存在 Cookie 信息,如果存在,则自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到,说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。

15、使用Redis实现Seeion共享?

场景: 由于分布式环境下,对于多台服务器,当客户端请求服务器A,创建Session,返回携带SessionID的Cookie给客户端,下次客户端访问服务器B根据Sessionid得不到Session,就有问题。
解决: 可以用Redis解决,比如将用户信息存入Redis,Key为SessionID,返回携带SessioniD的Cookie给客户端,下次访问携带Cookie,通过Sessionid从Redis取出相关信息。

16、禁止cookie的情况下如何使用session?

● 拼接到URL里:直接把SessionID作为URL的请求参数
● 放到请求头里:把SessionID放到请求的Header里,比较常用

📑文章末尾

在这里插入图片描述

  • 161
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 177
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 177
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值