linux怎么查看本机内存大小
259
2022-11-17
HTTP基础知识总结
目录
HTTP的请求方法及其作用
GET和POST有什么区别?
PUT和POST都是给服务器发送新增资源,有什么区别?
PUT和PATCH都是给服务器发送修改资源,有什么区别?
URI和URL的区别
和POST方法的区别是,PUT方法是幂等的:连续调用一次或者多次的效果相同(无副作用),而POST方法是非幂等的。
除此之外还有一个区别,通常情况下,PUT的URI指向是具体单一资源,而POST可以指向资源集合。
ps: 『POST表示创建资源,PUT表示更新资源』这种说法是错误的,两个都能创建资源,根本区别就在于幂等性
PUT和PATCH都是给服务器发送修改资源,有什么区别?
PUT和PATCH都是更新资源,PUT是直接覆盖资源的修改方式没有传的值将置为空;而PATCH用来对已知资源进行局部更新,没有传的值不覆盖。
URI和URL的区别
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的URI一般由三部组成:访问资源的命名机制;存放资源的主机名;资源自身的名称,由路径表示,着重强调于资源。
URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何找到这个资源。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等URL一般由三部组成:协议(或称为服务方式);存有该资源的主机IP地址(有时也包括端口号);主机资源的具体地址。如目录和文件名等
URN,uniform resource name,统一资源命名,是通过名字来标识资源。
URL和URN都是一种URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。
/index.html HTTP/1.1。请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔
User-Agent:产生请求的浏览器类型。Accept:客户端可识别的内容类型列表。Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
请求体:POST、PUT等请求携带的数据
由协议版本,状态码、状态码的原因短语组成,例如HTTP/1.1 200 OK。响应头:响应部首组成响应体:服务器响应的数据
HTTP的部首
内容很多,重点看标『✨』内容
通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部
Cache-Control 控制缓存 ✨Connection 连接管理、逐条首部 ✨Upgrade 升级为其他协议via 代理服务器的相关信息Wraning 错误和警告通知Transfor-Encoding 报文主体的传输编码格式 ✨Trailer 报文末端的首部一览Pragma 报文指令Date 创建报文的日期
请求首部字段(Reauest Header Fields):客户端向服务器发送请求的报文时使用的首部
Accept 客户端或者代理能够处理的媒体类型 ✨Accept-Encoding 优先可处理的编码格式Accept-Language 优先可处理的自然语言Accept-Charset 优先可以处理的字符集If-Match 比较实体标记(ETage) ✨If-None-Match 比较实体标记(ETage)与 If-Match相反 ✨If-Modified-Since 比较资源更新时间(Last-Modified)✨If-Unmodified-Since比较资源更新时间(Last-Modified),与 If-Modified-Since相反 ✨If-Rnages 资源未更新时发送实体byte的范围请求Range 实体的字节范围请求 ✨Authorization web的认证信息 ✨Proxy-Authorization 代理服务器要求web认证信息Host 请求资源所在服务器 ✨From 用户的邮箱地址User-Agent 客户端程序信息 ✨Max-Forwrads 最大的逐跳次数TE 传输编码的优先级Referer 请求原始放的urlExpect 期待服务器的特定行为
响应首部字段(Response Header Fields):从服务器向客户端响应时使用的字段
Accept-Ranges 能接受的字节范围Age 推算资源创建经过时间Location 令客户端重定向的URI ✨vary 代理服务器的缓存信息ETag 能够表示资源唯一资源的字符串 ✨WWW-Authenticate 服务器要求客户端的验证信息Proxy-Authenticate 代理服务器要求客户端的验证信息Server 服务器的信息 ✨Retry-After 和状态码503 一起使用的首部字段,表示下次请求服务器的时间
实体首部字段(Entiy Header Fields):针对请求报文和响应报文的实体部分使用首部
Allow 资源可支持✨Content-Language 实体的资源语言Content-Encoding 实体的编码格式Content-Length 实体的大小(字节)Content-Type 实体媒体类型Content-MD5 实体报文的摘要Content-Location 代替资源的yriContent-Rnages 实体主体的位置返回Last-Modified 资源最后的修改资源 ✨Expires 实体主体的过期资源 ✨
HTTP的状态码
2XX 成功
200 OK,表示从客户端发来的请求在服务器端被正确处理201 Created 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立202 Accepted 请求已接受,但是还没执行,不保证完成请求204 No content,表示请求成功,但响应报文不含实体的主体部分206 Partial Content,进行范围请求
3XX 重定向
301 moved permanently,永久性重定向,表示资源已被分配了新的 URL302 found,临时性重定向,表示资源临时被分配了新的URL303 see other,表示资源存在着另一个 URL,应使用 GET 方法获取资源304 not modified,客户端有缓冲的文件后又发出了一个条件性的请求307 temporary redirect,临时重定向,和302含义相同,但是请求方法和消息主体不会发生变化。
4XX 客户端错误
400 bad request,请求报文存在语法错误401 unauthorized,表示发送的请求没有通过 HTTP 认证的认证信息403 forbidden,表示对请求资源的访问被服务器拒绝404 not found,表示在服务器上没有找到请求的资源408 Request timeout, 客户端请求超时409 Confict, 请求的资源可能引起冲突
5XX 服务器错误
500 internal sever error,表示服务器端在执行请求时发生了错误501 Not Implemented,请求超出服务器能力范围,例如服务器不支持当前请求所需要的某个功能,或者请求是服务器不支持的某个方法502 bad getway,错误网关,服务器接收到来自上游服务器的无效响应。503 service unavailable,服务器正忙,表明服务器暂时处于超负载或正在停机维护,无法处理请求504 getway timeout,网关超时。505 version not supported 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本
同样是重定向307,303,302的区别?
302是307会遵照浏览器标准,不会从post变为get。
HTTP的keep-alive是干什么的?
在早期的HTTP/1.0中,每次keep-alive。
keep-alive的优点:
较少的CPU和内存的使用(由于同时打开的连接的减少了)允许请求和应答的HTTP管线化降低拥塞控制 (TCP连接减少了)减少了后续请求的延迟(无需再进行握手)报告错误无需关闭TCP连
为什么有了HTTP为什么还要HTTPS?
二者的区别:
HTTP 的URL 以的URL 以HTTPS 是安全的HTTP 无法加密,而HTTPS 对传输的数据进行加密HTTP 标准端口是80 ,而 HTTPS 的标准端口是443在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层HTTP无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书
HTTPS是如何保证安全的?
过程比较复杂,我们得先理解两个概念
对称加密:即通信的双方都使用同一个秘钥进行加解密,比如特务接头的暗号,就属于对称加密
对称加密虽然很简单性能也好,但是无法解决首次把秘钥发给对方的问题,很容易被hacker拦截秘钥。
非对称加密:
私钥 + 公钥= 密钥对即用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密因为通信双方的手里都有一套自己的密钥对,通信之前双方会先把自己的公钥都先发给对方然后对方再拿着这个公钥来加密数据响应给对方,等到到了对方那里,对方再用自己的私钥进行解密
非对称加密虽然安全性更高,但是带来的问题就是速度很慢,影响性能。
解决方案:
那么结合两种加密方式,将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
此时又带来一个问题,中间人问题:
如果此时在客户端和服务器之间存在一个中间人,这个中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的所有数据。
所以这个时候需要一个安全的第三方颁发证书(CA),证明身份的身份,防止被中间人攻击。
证书中包括:签发者、证书用途、使用者公钥、使用者私钥、使用者的HASH算法、证书到期时间等
但是问题来了,如果中间人篡改了证书,那么身份证明是不是就无效了?这个证明就白买了,这个时候需要一个新的技术,数字签名。
数字签名就是用CA自带的HASH算法对证书的内容进行HASH得到一个摘要,再用CA的私钥加密,最终组成数字签名。
当别人把他的证书发过来的时候,我再用同样的Hash算法,再次生成消息摘要,然后用CA的公钥对数字签名解密,得到CA创建的消息摘要,两者一比,就知道中间有没有被人篡改了。
这个时候就能最大程度保证通信的安全了。
HTTPS工作原理
HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;发送给服务端,此时只有服务端(RSA私钥)能解密。解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。
HTTP2相对于HTTP1.x有什么优势和特点?
二进制分帧
帧:HTTP/2 数据通信的最小单位消息:指 HTTP/2 中逻辑上的 HTTP 消息。例如请求和响应等,消息由一个或多个帧组成。
流:存在于连接中的一个虚拟通道。流可以承载双向消息,每个流都有一个唯一的整数ID
HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。
服务器推送
服务端可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。例如服务端可以主动把JS和CSS文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。
服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。
头部压缩
HTTP/1.x会在请求和响应中中重复地携带不常改变的、冗长的头部数据,给网络带来额外的负担。
HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值。
你可以理解为只发送差异数据,而不是全部发送,从而减少头部的信息量
多路复用
HTTP 1.x 中,如果想并发多个请求,必须使用多个 TCP 链接,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制。
HTTP2中:
同域名下所有通信都在单个连接上完成。单个连接可以承载任意数量的双向数据流。数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~