发布于: 2023-10-9最后更新: 2023-10-9字数 00 分钟

HTTP

POST和GET(from 代码随想录)

  1. 作用不同 GET用于从服务端获取资源 POST一般用来向服务器端提交数据
  1. 参数传递方式不同 GET请求的参数一般写在URL中,且只接受ASCII字符 POST请求参数一般放在请求体中,对于数据类型也没有限制
  1. 安全性不同 因为参数传递方式的不同,所以两者安全性不同,GET请求的参数直接暴露在URL中,所以更不安全,不能用来传递敏感信息。
  1. 参数长度限制不同 GET传送的数据量较小,不能大于2KB。 POST传送的数据量较大,一般被默认为不受限制。 HTTP 协议没有 Body 和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因。
  1. 编码方式不同 GET 请求只能进行 URL 编码(application/x-www-form-urlencoded) POST 支持多种编码方式(application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多种编码。)
  1. 缓存机制不同 GET 请求会被浏览器主动cache,而 POST 不会,除非手动设置。 GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留。 GET 产生的 URL 地址可以被 保存为书签,而 POST 不可以。 GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
  1. 时间消耗不同 GET 产生一个 TCP 数据包; POST 产生两个 TCP 数据包。 对于 GET 方式的请求,浏览器会把 header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 POST,浏览器先发送 Header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)
  1. 幂等 意思是多次执行相同的操作,结果都是「相同」的。 GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。 POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。

传输二进制数据

支持。
常见的Content-Type类型包括:
  1. text/plain:表示纯文本,没有特殊的格式和样式。
  1. text/html:表示HTML文档,可以在Web浏览器中显示。
  1. application/json:表示JSON格式的数据,用于数据交换。
  1. application/xml:表示XML格式的数据,用于数据交换。
  1. application/octet-stream:表示二进制数据,例如图片、音频、视频等。
  1. multipart/form-data:表示表单数据,用于文件上传。
  1. application/x-www-form-urlencoded:表示表单数据,用于提交表单。
  1. text/css:表示CSS样式表,用于网页的样式设计。
  1. application/javascript:表示JavaScript脚本,用于网页的交互操作。

HTTP实现一个多线程下载器

核心:要知道文件的大小,先通过HTTP HEAD请求获取Content-Length长度,然后根据这个长度分块,分到不同线程中分别下载。分段下载核心是,流式下载,在请求头添加开始和结束
实现
实现一个多线程下载器涉及到HTTP请求的使用、文件I/O操作,以及多线程的管理。这里我将使用Python语言并使用其内置的requests库进行HTTP请求,threading库来实现多线程,并使用osshutil库进行文件操作。这种简化的多线程下载器将从指定的URL下载文件,并将其分割成若干部分,每个线程下载一部分。
首先,我们需要确定远程文件的大小,这样我们才能将其分割成相等的部分供每个线程下载。我们可以通过发送HEAD请求并检查Content-Length头来实现这一点。
然后,我们将文件分割成相等的部分,并为每个线程分配一个部分。每个线程将向服务器发送一个带有Range头的GET请求,该头指示服务器只发送文件的特定部分。
最后,每个线程将其部分写入一个临时文件。当所有线程都完成下载后,主线程将所有部分合并到一个文件中。
以下是一个简单的实现:
这是一个非常简化的多线程下载器。在实际应用中,你可能需要添加错误处理代码,例如处理网络错误和文件I/O错误,以及更复杂的线程管理代码。你还可能需要调整代码以更好地适应大文件和慢速网络。

计算机系统QA
计算机系统QA
秋招复盘7.18:算法、八股
秋招复盘7.18:算法、八股