文章目录
HTTP部分
1.什么是HTTP协议:
-
HTTP是基于TCP/IP的可靠的超文本传输协议。
-
用于在客户端和服务器之间传输文字,图片,音频,视频等超文本数据。
-
HTTP协议是单向的基于请求-应答模式的协议。
-
HTTP协议是无状态的。
2.怎么理解HTTP协议的无状态性:
这种无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。
解决这种无状态的方法:1.cookie 2.session
3.HTTP与HTTPS:
HTTP的缺点:
- 传输的数据是无加密的,内容可能会被窃取
- 没有身份认证,用户身份可能会被伪装
- 无法验证报文的完整性,数据可能会被篡改
HTTPS协议:HTTP结合SSL安全协议实现加密传输和身份认证。
HTTP的端口为80,HTTPS的端口为443.
HTTPS的数据传输过程:
-
浏览器发起HTTPS请求,要求与Web服务器建立SSL连接
-
Web服务器收到客户端请求后,会生成一对公钥和私钥,并把公钥放在证书中发给客户端浏览器
-
客户端验证证书是否合法,如果不合法则提示告警
-
客户端验证证书合法后,在本地生成随机数
-
通过公钥加密随机数,并把加密后的随机数传输到服务端
-
服务端通过私钥对随机数进行解密
-
服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输
4.HTTP1.0,HTTP1.1,HTTP1.2的区别:
HTTP1.0:
- 采用的短连接,即浏览器的每次请求都需要与服务器建立一个新的连接,服务器处理完成后立即断开连接。这样就使得网络的利用率很低,且服务器无法记住用户之前的状态。
HTTP1.1:
-
是目前互联网使用最广泛的协议
-
采用的是长连接,新增了一个Connection字段,将其设置为keep-alive就可以保证连接不断开,设置为false用来告诉服务器关闭长连接。
-
新增了Cache-Control字段,用来实现强缓存和协商缓存。
HTTP2.0:
-
内容安全:http2.0是基于https的
-
二进制分帧,http1.X的解析是基于文本的,http2.0将所有的传输信息分割为更小的消息和帧,并对他们采用二进制格式编码。改进了传输的性能。
-
多路复用:
- 相当于长连接的增强。
- 所有的
HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流。 - 每个数据流以消息的形式发送,而消息由一或多个帧组成。这些帧可以乱序发送,然后再根据每个帧头部的流标识符(
stream id)重新组装。
-
头部压缩
-
服务器推送
5.HTTP报文的基本结构:
由三大部分组成:起始行、头部字段、消息正文。
其中“请求行 + 头部字段”构造了请求头,“状态行 + 头部字段”构成响应头。
-
起始行
- 请求行:简要地描述了客户端想要如何操作服务器端的资源
GET / HTTP/1.1- 由三部分组成:请求方法 请求资源路径 http协议版本号
- 状态行:表示服务器响应的状态
- HTTP/1.1 200 OK
- 由三部分组成:http协议版本号 状态码 状态码的补充说明文字
- 请求行:简要地描述了客户端想要如何操作服务器端的资源
-
头部字段
-
消息正文
6.常见的头部字段
-
头部字段key-value的形式,可以自定义。
-
分为4类:通用字段、请求字段、响应字段、实体字段(专门描述body的额外信息)
-
通用字段
- date: 表示报文创建时间
date: Tue, 18 Aug 2020 04:58:26 GMT -
请求字段
- cookie
- 与缓存相关的If-Modified-Since
-
响应字段
- set-cookie
- 与重定向相关的location
-
实体字段
-
Content-Type: 响应内容的数据类型
-
Content-Encoding: 响应内容的编码方式
-
allow: 描述可执行的请求方法
-
7.HTTP的请求方式:
(1)常见的请求方式:
HTTP1.0 定义了三种请求方式:get,post,head
HTTP1.1 新增了五种请求方法:options,put,delete,trace,connect
-
get请求:从服务器获取资源
-
post请求:向指定资源提交数据进行处理(例如表单提交和上传文件)。数据被包含在请求体中。
-
head请求:
- 与GET类似,也是请求从服务器获取资源。但服务器不会返回请求的实体数据,只会传回响应头,也就是资源的“元信息”。
- 实际应用:检查一个文件是否存在,或者检查
-
options请求:查看服务器支持的请求方式
-
put请求:向指定资源位置上传其最新内容
-
delete请求:请求删除服务器的资源
-
trace请求:回显服务器收到的请求,主要用于测试或诊断
-
connect请求:要求服务器为客户端和另一台远程服务器建立一条特殊的连接隧道,这时 Web 服务器在中间充当了代理的角色。
(2)get请求和post请求的区别:
- 相同点:都需要通过建立TCP/IP连接
- 不同的:
- 用途方面:get用于请求数据,post用于修改数据。
- 缓存方面:受到用途的影响。get用于获取数据,可以使用缓存。post用于修改数据,不用使用缓存。
- 传递参数的方式:get采用明文传输,post将请求参数放在请求体中。
- 安全性方面:正是由于传递参数方式的不同,导致get请求的明文存在安全隐患,而post将参数存在body中是相对安全的。
(3)get请求传递的参数长度的误区:
HTTP协议未规定GET和POST的长度限制。
GET的最大长度限制是因为浏览器和web服务器限制了URL的长度。
8.HTTP的状态码:
响应报文中的状态码描述了服务器的响应结果。
状态码总共分为5类:
1xx:相关信息,表示目前是协议处理的中间状态,还需要后续的操作。101: 切换协议。- 服务器根据客户端的请求切换协议。只能切换到更高级的协议。
- 例如,切换到HTTP的新版本协议,或从HTTP协议切换为WebSocket协议。
2xx:操作成功,报文已经收到并被正确处理。200:表示请求成功206:范围请求,服务器返回对应请求范围的数据
3xx:重定向,资源位置发生变动,需要客户端重新发送请求。301:永久移动。- 请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。
- 实际应用场景:
- 浏览器看到 301,就知道原来的 URI“过时”了,就会做适当的优化。比如历史记录、更新书签,下次可能就会直接用新的 URI 访问,省去了再次跳转的成本
- 搜索引擎的爬虫看到 301,也会更新索引库,不再使用老的 URI
302: 临时移动。- 与301类似。但资源只是临时被移动。客户端应继续使用原有URI
- 实际应用场景:
- 未登陆的用户访问用户中心重定向到登录页面
- 网站维护时将链接跳转到静态页面
304:未修改。通常是用在协商缓存中,表示请求的资源未修改,应该直接从浏览器缓存中取数据。
4xx:客户端错误,请求报文有误,服务器无法处理。400:请求报文有误。常见的原因是参数名有误或发送数据时未将数据转换为json字符串。401:本次请求需要用户的身份认证403:服务器拒绝执行本次请求404:找不到资源
5xx:服务器错误,服务器在处理请求时内部发生了错误。500:服务器内部错误,无法完成请求501:服务器不支持请求的功能,无法完成请求502:作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应**503:由于超载或系统维护,服务器暂时的无法处理客户端的请求
9.一句话概括RESTFUL:
一句话概括就是,用URL定位资源,用HTTP描述操作。
- restful是一种api设计规范,用于web数据接口的设计。
- 设计准则:
- 客户端发出的数据操作指令应该是"动词 + 宾语"的结构。
- 复数url,例如students
- 返回json格式的数据
- 必须返回状态码
960

被折叠的 条评论
为什么被折叠?



