We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT
GET: 通常用于请求服务器发送某些资源 HEAD: 请求资源的头部信息, 并且这些头部与 HTTP GET 方法请求时返回的一致. 该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源 OPTIONS: 用于获取目的资源所支持的通信选项 POST: 发送数据给服务器 PUT: 用于新增资源或者使用请求中的有效负载替换目标资源的表现形式 DELETE: 用于删除指定的资源 PATCH: 用于对资源进行部分修改 CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 TRACE: 回显服务器收到的请求,主要用于测试或诊
PUT 和POST方法的区别是,PUT方法是幂等的:连续调用一次或者多次的效果相同(无副作用),而POST方法是非幂等的。
除此之外还有一个区别,通常情况下,PUT的URI指向是具体单一资源,而POST可以指向资源集合。
PUT和PATCH都是更新资源,而PATCH用来对已知资源进行局部更新。
请求报文有4部分组成:
请求行包括:请求方法字段、URL字段、HTTP协议版本字段。它们用空格分隔。例如,GET /index.html HTTP/1.1。
请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔
User-Agent:产生请求的浏览器类型。 Accept:客户端可识别的内容类型列表。 Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
请求体: post put等请求携带的数据
参考: https://www.cxymsg.com/guide/http.html#http%E7%9A%84%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87%E6%98%AF%E4%BB%80%E4%B9%88%E6%A0%B7%E7%9A%84%EF%BC%9F
请求报文有4部分组成: 响应行: 由协议版本,状态码和状态码的原因短语组成,例如HTTP/1.1 200 OK。 响应头: 响应部首组成 空行 响应体: 服务器响应的数据
通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部
请求首部字段(Reauest Header Fields):客户端向服务器发送请求的报文时使用的首部
响应首部字段(Response Header Fields):从服务器向客户端响应时使用的字段
实体首部字段(Entiy Header Fields):针对请求报文和响应报文的实体部分使用首部
2XX 成功
3XX 重定向
4XX 客户端错误
5XX 服务器错误
302是http1.0的协议状态码,在http1.1版本的时候为了细化302状态码又出来了两个303和307。
303明确表示客户端应当采用get方法获取资源,他会把POST请求变为GET请求进行重定向。 307会遵照浏览器标准,不会从post变为get。
在早期的HTTP/1.0中,每次http请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接。在后来的HTTP/1.0中以及HTTP/1.1中,引入了重用连接的机制,就是在http请求头中加入Connection: keep-alive来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流。协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive。
keep-alive的优点:
https是安全版的http,因为http协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,HTTPS就是为了解决HTTP的不安全而生的。
对称加密: 即通信的双方都使用同一个秘钥进行加解密,比如特务接头的暗号,就属于对称加密 非对称加密: 有公钥私钥之分,公钥所有人都可以知道,可以将数据用公钥加密,但是将数据解密必须使用私钥解密,私钥只有分发公钥的一方才知道。
TLS 握手过程
非对称加密虽然安全性更高,但是带来的问题就是速度很慢,影响性能。
通过以上步骤可知,在 TLS 握手阶段,两端使用非对称加密的方式来通信,但是因为非对称加密损耗的性能比对称加密大,所以在正式传输数据时,两端使用对称加密的方式通信
参考: https://yuchengkai.cn/docs/cs/#http-%E9%A6%96%E9%83%A8 https://www.cxymsg.com/guide/http.html#https%E6%98%AF%E5%A6%82%E4%BD%95%E4%BF%9D%E8%AF%81%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%9F
HTTP 2.0 相比于 HTTP 1.X,可以说是大幅度提高了 web 的性能。
二进制分帧 HTTP 2.0 中所有加强性能的核心点在于此。在之前的 HTTP 版本中,我们是通过文本的方式传输数据。在 HTTP 2.0 中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。
头部压缩 HTTP/1.x会在请求和响应中中重复地携带不常改变的、冗长的头部数据,给网络带来额外的负担。
你可以理解为只发送差异数据,而不是全部发送,从而减少头部的信息量
帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。
多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。
服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。
参考:https://www.jianshu.com/p/54cc04190252
物理层 => 数据链路层 => 网络层 => 传输层 => 会话层 => 表现层 => 应用层
参考:https://www.cxymsg.com/guide/tcp.html#%E8%AE%B2%E4%B8%80%E4%B8%8B%E5%9B%9B%E6%AC%A1%E6%8F%A1%E6%89%8B%EF%BC%9F%E2%9C%A8 https://yuchengkai.cn/docs/cs/#%E7%8A%B6%E6%80%81%E6%9C%BA
The text was updated successfully, but these errors were encountered:
No branches or pull requests
HTTP有哪些方法?
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT
这些方法的具体作用是什么?
GET: 通常用于请求服务器发送某些资源
HEAD: 请求资源的头部信息, 并且这些头部与 HTTP GET 方法请求时返回的一致. 该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源
OPTIONS: 用于获取目的资源所支持的通信选项
POST: 发送数据给服务器
PUT: 用于新增资源或者使用请求中的有效负载替换目标资源的表现形式
DELETE: 用于删除指定的资源
PATCH: 用于对资源进行部分修改
CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
TRACE: 回显服务器收到的请求,主要用于测试或诊
GET和POST有什么区别?✨
PUT和POST都是给服务器发送新增资源,有什么区别?
PUT 和POST方法的区别是,PUT方法是幂等的:连续调用一次或者多次的效果相同(无副作用),而POST方法是非幂等的。
除此之外还有一个区别,通常情况下,PUT的URI指向是具体单一资源,而POST可以指向资源集合。
PUT和PATCH都是给服务器发送修改资源,有什么区别?
PUT和PATCH都是更新资源,而PATCH用来对已知资源进行局部更新。
http的请求报文是什么样的?✨
请求报文有4部分组成:
请求行包括:请求方法字段、URL字段、HTTP协议版本字段。它们用空格分隔。例如,GET /index.html HTTP/1.1。
请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔
请求体: post put等请求携带的数据
参考: https://www.cxymsg.com/guide/http.html#http%E7%9A%84%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87%E6%98%AF%E4%BB%80%E4%B9%88%E6%A0%B7%E7%9A%84%EF%BC%9F
http的响应报文是什么样的?✨
请求报文有4部分组成:
响应行: 由协议版本,状态码和状态码的原因短语组成,例如HTTP/1.1 200 OK。
响应头: 响应部首组成
空行
响应体: 服务器响应的数据
聊一聊HTTP的部首有哪些?✨
通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部
请求首部字段(Reauest Header Fields):客户端向服务器发送请求的报文时使用的首部
响应首部字段(Response Header Fields):从服务器向客户端响应时使用的字段
实体首部字段(Entiy Header Fields):针对请求报文和响应报文的实体部分使用首部
聊一聊HTTP的状态码
2XX 成功
3XX 重定向
4XX 客户端错误
5XX 服务器错误
同样是重定向307,303,302的区别?
302是http1.0的协议状态码,在http1.1版本的时候为了细化302状态码又出来了两个303和307。
303明确表示客户端应当采用get方法获取资源,他会把POST请求变为GET请求进行重定向。 307会遵照浏览器标准,不会从post变为get。
HTTP的keep-alive是干什么的?
在早期的HTTP/1.0中,每次http请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接。在后来的HTTP/1.0中以及HTTP/1.1中,引入了重用连接的机制,就是在http请求头中加入Connection: keep-alive来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流。协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive。
keep-alive的优点:
为什么有了HTTP为什么还要HTTPS?
https是安全版的http,因为http协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,HTTPS就是为了解决HTTP的不安全而生的。
HTTPS是如何保证安全的?✨
对称加密: 即通信的双方都使用同一个秘钥进行加解密,比如特务接头的暗号,就属于对称加密
非对称加密: 有公钥私钥之分,公钥所有人都可以知道,可以将数据用公钥加密,但是将数据解密必须使用私钥解密,私钥只有分发公钥的一方才知道。
TLS 握手过程
非对称加密虽然安全性更高,但是带来的问题就是速度很慢,影响性能。
通过以上步骤可知,在 TLS 握手阶段,两端使用非对称加密的方式来通信,但是因为非对称加密损耗的性能比对称加密大,所以在正式传输数据时,两端使用对称加密的方式通信
参考: https://yuchengkai.cn/docs/cs/#http-%E9%A6%96%E9%83%A8
https://www.cxymsg.com/guide/http.html#https%E6%98%AF%E5%A6%82%E4%BD%95%E4%BF%9D%E8%AF%81%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%9F
HTTP2相对于HTTP1.x有什么优势和特点?
HTTP 2.0 相比于 HTTP 1.X,可以说是大幅度提高了 web 的性能。
二进制分帧
HTTP 2.0 中所有加强性能的核心点在于此。在之前的 HTTP 版本中,我们是通过文本的方式传输数据。在 HTTP 2.0 中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。
头部压缩
HTTP/1.x会在请求和响应中中重复地携带不常改变的、冗长的头部数据,给网络带来额外的负担。
HTTP 1.x 中,如果想并发多个请求,必须使用多个 TCP 链接,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制。
帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。
多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。
服务端可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。例如服务端可以主动把JS和CSS文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。
服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。
HTTP的缓存的过程是怎样的?✨
什么时候会触发强缓存或者协商缓存?✨
参考:https://www.jianshu.com/p/54cc04190252
TCP 的特性
请简述TCP\UDP的区别
说一说OSI七层模型
物理层 => 数据链路层 => 网络层 => 传输层 => 会话层 => 表现层 => 应用层
讲一下三次握手?✨
讲一下四次握手?✨
参考:https://www.cxymsg.com/guide/tcp.html#%E8%AE%B2%E4%B8%80%E4%B8%8B%E5%9B%9B%E6%AC%A1%E6%8F%A1%E6%89%8B%EF%BC%9F%E2%9C%A8
https://yuchengkai.cn/docs/cs/#%E7%8A%B6%E6%80%81%E6%9C%BA
The text was updated successfully, but these errors were encountered: