获得徽章 0
赞了这篇沸点
我在青训营发布了第三篇笔记,字数七千多字,如果有同学感兴趣,可以点击下方的笔记链接阅读,谢谢大家。[流泪][流泪][流泪]

笔记链接:juejin.cn

笔记节选:如果你不懂什么是接口,这并不要紧。目前,你只需要将自己看作一名水管工人,数据就是水流。io.Reader是一种特殊的工具,你使用它连接到不同的水源。当你连接到一种水源后,便可以打开水龙头(调用Read函数或类似的函数)获取水源,水流会一点点流入你的水桶,直至水桶装满或者水流完。
如此之多的函数,对输入的处理各有不同,什么时候保留`\n`,什么时候丢弃`\n`,读取字符串时什么规则,读取数字时又是什么规则。纷繁复杂,无法记忆。而且记了恐怕也难以用得上,最终只会为难自己。因此,我们可以制定一种读取输入的规范,来简化输入处理的流程。
展开
评论
赞了这篇沸点
#每天一个知识点# 【阅读】【图解HTTP】【请求报文和响应报文的构成】【玉米哥】
HTTP协议用于客户端和服务器端的通信,HTTP协议是我们需要学习的内容,什么是客户端?什么又是服务器端?
请求访问文本或图像等资源的一段称为客户端,提供资源响应的一端称为服务器端。HTTP协议规定,请求从客户端发起,最后服务器响应该请求并返回。
那么一个具体的客户端请求是如何发起的呢?
客户端请求的内容被称为请求报文,下面是客户端发送给某个HTTP服务器端的请求报文的内容。

第一行的GET表示请求访问服务器的类型,称为方法。随后的字符串/index.htm表明了请求访问的资源对象,也叫请求URI。最后的HTTP/1.1,即HTTP的版本号,提示客户端可以使用的HTTP协议功能。
综合来看,这段请求内容的意思是:请求访问某台HTTP服务器上的/index.htm资源。
请求报文的内容不止这些。实际上,请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

请求首部字段和内容实体稍后再做讲解。接下来,我们继续讲解。接收到请求的服务器,会将请求内容的处理结果以响应的形式返回。

起始行开头的HTTP/1.1表示服务器对应的HTTP的版本。紧接着的200 OK表示请求的处理结果的状态码和原因短语。下一行显示了响应创建的日期和时间,是首部字段内的一个属性。空行之后的内容是称为资源实体的主体。
响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
展开
玉米哥于2023-06-21 16:23发布的图片
评论
赞了这篇沸点
HTTP报文的结构由报文首部、空行、报文主体组成。
请求报文的报文首部由请求行、请求首部字段、通用首部字段、实体首部字段等构成。
响应报文的报文首部由响应行、响应首部字段、通用首部字段、实体首部字段等构成。
请求报文中使用的首部字段:
Accept首部字段,通知服务器用户代理能够处理的媒体类型,以及媒体类型的相对优先级。可使用type/subtype这种形式。
几个媒体类型的例子。
Accept-Charset首部字段,通知服务器用户代理支持的字符集及字符集的相对处理顺序。该首部字段应用于内容协商机制的服务器驱动协商。
Accept-Language首部字段,告知服务器用户代理能够处理的自然语言集,以及自然语言集的相对优先级。
Host首部字段,告知服务器,请求的资源所处的互联网主机名和端口号。(HTTP/1.1规范内唯一一个必须包含在请求内的首部字段)。与单台服务器分配多个域名的虚拟主机的工作机制有着密切的联系。
User-Agent首部字段,将创建请求的浏览器和用户代理名称等信息传达给服务器。
响应报文中的首部字段。
Location首部字段:将响应报文的接收方引导至与请求URI位置不同的资源。
Server首部字段:告知客户端当前服务器上安装的HTTP服务器应用程序的信息。
实体首部字段:
Content-Language,告知客户端,实体主体使用的自然语言。
Content-Type,说明实体主体内对象的媒体类型,和首部字段Accept一样,字段值使用type/subtype形式赋值。
为cookie服务的首部字段:
Cookie的作用是管理客户端和服务器之间的状态。工作机制是用户识别和状态管理。Web网站为了管理用户的状态,会通过Web浏览器,把一些数据临时写入用户的计算机内。接着当用户访问该网站时,可通过通信方式取回之前发放的Cookie。
Set-Cookie字段的属性:
NAME=VALUE,赋予Cookie的名称和值(必需)
expires=DATE,Cookie的有效期(默认为浏览器关闭前为止)
path=PATH,将服务器上的文件目录作为Cookie的适用对象
domain=域名,作为Cookie适用对象的域名
Secure,仅在HTTPS安全通信时才会发送Cookie
HttpOnly,使得Cookie不能被Javascript脚本访问
展开
玉米哥于2023-07-04 20:46发布的图片
评论
赞了这篇沸点
HTTP的缺点【上篇】:
①通信使用明文(不加密),内容有可能被窃听
②不验证通信方的身份,因此有可能遭遇伪装
③无法证明报文的完整性,有可能已遭篡改

先来看第一点,通信使用明文,内容有可能被窃听。
HTTP本身不具备加密的功能,所以也无法做到对通信整体进行加密,即HTTP报文使用明文发送。
为什么通信时不加密是一个缺点?
原因是,TCP/IP是可能被窃听的网络,按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。即使报文经过加密,也有可能被窥视到被加密的报文,只是有可能无法破解报文信息的含义。
那么如何窃听通信内容呢?
窃听相同段上的通信并非难事,只需要收集在互联网上流动的数据包就可以。被广泛使用的抓包工具Wireshark,可以获取HTTP请求和响应的内容,并对其进行解析。
紧接着问题就来了,如何防止通信被窃听呢?
首先很容易想到,要想不被窃听,那么就需要对通信进行加密处理,加密的对象可以有这几个,通信的加密、内容的加密。
什么是通信的加密?
由于HTTP中没有加密机制,但是可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。用SSL建立安全的通信线路后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP就是我们熟知的HTTPS(HTTP Secure,超文本传输安全协议)。
什么是内容的加密?
由于HTTP中没有加密机制,那么也可对HTTP协议传输的内容本身加密,即加密HTTP报文里所含的内容。在之前的学习中,我们知道HTTP报文由报文首部和报文主体组成,因此,客户端可以先对报文主体进行加密,再发送请求。需要注意的是,通信本身没有被加密。为了做到有效,客户端和服务器必须都具备加密和解密机制。
展开
玉米哥于2023-07-05 21:09发布的图片
评论
赞了这篇沸点
HTTP的缺点【下篇】:现在关注第二点,不验证通信方的身份,因此有可能遭遇伪装。
HTTP中的请求和响应不会对通信方进行确认。也就是说,服务器是不是请求报文中的URI指定的服务器,响应报文能否返回到实际提出请求的客户端,都是没办法确认的。客户端和Web服务器都有可能被伪装。不验证通信方的身份会产生一个很严重的问题,就是无意义的请求也会照单全收,无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)。
那么如何查明通信方的身份呢?
使用HTTP协议无法验证通信方的身份,但如果使用SSL则可以。SSL不仅可以用于加密通信,还提供被称为证书的手段,确认通信方的身份。证书由第三方机构颁布,证明客户端和服务器是实际存在的。只要能够确认通信方(客户端或服务器)的证书,就能判断对方的真实意图。确认服务器的证书,可以确认通信方就是意料之中的服务器,减少个人信息泄露的机会。而客户端持有证书,就可以确认个人身份,也可以用于Web网站的认证。

现在关注第三点,报文有可能已遭篡改。
由于HTTP协议无法证明通信的报文完整性,因此在请求或响应送出之后,直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法知道。换句话说,没有办法确认发出的请求/响应和收到的请求/响应是前后一致的。比如,从Web网站上下载文件,是没有办法确认下载的文件和服务器上存放的文件是一致的。请求/响应在传输过程中,被拦截并篡改内容的攻击称为中间人攻击(Man in the Middle Attack,MITM)。
那么如何防止HTTP报文被篡改呢?
HTTP协议中有确认报文完整性的方法,但是不便捷可靠。常用的方法有MD5和SHA-1等散列值校验的方法。以及用来确认文件的数字签名方法。但是这些方法也不够可靠,如果MD5本身被改写的话,用户是没有办法意识到的。因此有必要使用HTTPS,SSL提供认证和加密处理及摘要功能。

以上就是对HTTPS的简单介绍。
展开
评论
赞了这篇沸点
我发布了青训营的第一篇笔记,如果有同学感兴趣,可以点击下方的笔记链接阅读,谢谢大家。

笔记链接:juejin.cn

笔记节选:有同学可能会疑惑,为什么要大费周折使用copy函数,而不直接使用another = greetings呢,其实,Go语言中的切片类似于指针或者引用,变量中存放的不是切片的内容,而是对变量内容的引用。
打个不恰当的比方,你面前有一排排房屋,第一间房屋里有“Hello”字样的招牌,第二节房屋里有“ByteTech”字样的招牌。你使用标有“greetings”字样的望远镜观察着这两间房屋,这就是切片的本质。
当我们使用another = greetings时,相当于有另一台望远镜,标有“another”,而another望远镜也正在观察着你观察的这两间房屋,在这个过程中,“Hello, ”“Byte Tech”招牌本身并没有被拷贝。只是现在可以被greetings和another同时观察到。
当使用copy函数时,情况就不尽相同了。greetings望远镜依旧观察着初始两间房屋里的招牌。但是,another望远镜会观察另外两件房屋,里面有相同的招牌,这个时候,招牌本身(也就是切片的内容)被拷贝了。
希望这个例子能加深你对切片的理解。
展开
评论
赞了这篇沸点
我在青训营发布了第二篇笔记,字数总共一万多字,如果有同学感兴趣,可以点击下方的笔记链接阅读,谢谢大家。[流泪][流泪][流泪]

笔记链接:juejin.cn

笔记节选:答案其实很简单,数值和字符串在内存中已经是一段连续的字节序列,不需要额外的序列化操作。它们是原始数据类型,直接存储在内存中的连续地址上。因此,直接将它们用于传输或存储时,就是在传输或存储它们的原始字节序列。

例如,一个整数类型的变量在内存中存储为几个字节的二进制表示,而一个字符串在内存中存储为一系列字符的连续字节。
展开
评论