http学习笔记

255 阅读4分钟

juejin.cn/post/712455… juejin.cn/post/710949…

HTTP协议工作流程

image.png

URI资源标识符及URL资源定位符

image.png

  • scheme:表示使用的协议类型,例如http、https、ftp、chrome等。
  • ://:协议类型与后续描述符之间的分隔符。
  • domainName:网站域名,经DNS解析后会得到具体服务器IP
  • /path:请求路径,代表客户端请求的资源所在位置,不同层级目录之间用/区分。
  • ?query1=value:请求参数,?后面表示请求的参数,采用K-V键值对形式。
  • &query2=value:多个请求参数,不同的参数之间用&分割。
  • #fragment:表示所定位资源的一个锚点,浏览器可根据这个锚点跳转对应的资源位置。

DNS域名解析系统

在计算机网络中,每个主机都存在一个IP地址,但由于IP是一串数字不方便人类记忆,因此出现了一种协议名为DNS,它可以把生涩的IP地址转换为便于人类记忆的域名,

image.png

DNS服务器主要分为三类:

  • ①根域名服务器
  • TLD顶级域名服务器
  • ③授权域名(子域)服务器

DNS域名查询

DNS中主要分为递归查询、迭代查询两种方式:

image.png

image.png

DNS解析请求具体查询过程

  • ①客户端输入域名准备访问网站。

  • ②先查询「浏览器的DNS缓存」,命中直接向IP发起访问,未命中继续往下。

  • ③继续查询「OShosts文件」,如果仍然未命中,则向「本地域名服务器」发起「递归查询」请求。

  • ④「本地域名服务器」先查询自身缓存,未命中则向「根域名服务器」进行「迭代查询」:

    • A.「根域名服务器」返回「顶级域名服务器」的地址
    • B.「本地域名服务器」再根据地址向「顶级域名服务器」发起查询
    • C.「顶级域名服务器」返回负责该「域名」的「授权域名服务器」地址
    • D.「本地域名服务器」再根据地址向「授权域名服务器」发起查询
    • E.「授权域名服务器」返回「域名」的具体IP地址
  • ⑤「本地域名服务器」将IP返回给客户端并将「域名/IP映射」缓存起来。

  • ⑥「浏览器」得到IP后,向其发出具体的「用户请求」,并将「域名/IP映射」缓存。

HTTP中Get和Post方法的区别

  • HTTP中功能的定义不同,GET用来获取数据,POST用于提交数据。

  • ②传输数据的方式不同,GET直接在URL拼接参数显式传输,POST则是隐式传输。

  • ③允许传输数据时的长度不同,GET通常情况下受到浏览器和服务器的限制,因此可传输的参数有限,而POST则没有限制。

  • GET总体而言,执行的效率远高于POST方式,GET也是form表单的默认方法。

  • ⑤支持的数据传输格式不同,GET仅支持ASCII字符,而POST支持整个ISO10646字符集。

  • ⑥安全性不同,GET由于是显式传输,数据被放在URL中,因此安全性远低于POST方式。

  • ⑦浏览器缓存方面支持性不同,GET请求的资源默认会被浏览器缓存,下次请求相同资源会直接从本地中读取,而POST请求的资源默认情况下不会缓存。

  • ⑧一次请求产生的数据包数量不同,GET只会发出一个TCP包,POST会将头信息和主体信息分成两个包发送。

  • ⑨当浏览器回退或前进时,GET方式获取的资源可直接使用,而POST则会重新请求服务器获取资源(因为GET可以从本地缓存中读取资源)

长连接

HTTP是基于“请求/响应”模型所构建的协议,每次请求时,客户端和服务端之间都要新建立一个连接,服务端响应完成后又会立马断开连接。这种方式带来的缺点很明显,频繁的创建/销毁TCP连接造成的开销较大,资源浪费较多。

Keep-Alive(长连接/持久连接)模式,开启这种模式的情况下,可以复用已建立的TCP连接

image.png

长连接模式下,当一个客户端的请求与服务端建立连接后,这个连接并不会在服务端响应结果后立马关闭,而是会持续有效,后续新的请求获取服务器资源时,可以通过这个TCP连接发送多个请求与接收多个响应。

HTTP/1.0中默认关闭,需要手动在请求头中添加Connection:
Keep-Alive才可开启,HTTP/1.1默认开启,可以手动添加Connection: close关闭。

HTTP队头阻塞

HTTP本质上会将请求串行化,所有的请求会被放入到一个队列中依次交由服务器处理,那么假设前面的请求任务执行时间过长,最终就会导致后面的所有请求全部被阻塞,因此这个问题就被称为队头阻塞

HTTP代理技术