当前位置:首页 > Web开发 > 正文

目标机器自然知道是 HTTP 服务 器这个进程想要这个包

2024-03-31 Web开发

HTTP是基于TCP协议的,需要三次握手,HTTP1.1协议,是keep-alive的。

技术图片

第一部分,请求行

首先要大白GET, POST, PUT,DELETE这个很简单不反复,举几个例子:

  在云计算中,如果我们的处事器端要供给一个基于 HTTP 协议的 API,获取所有云主机的列表, 这就会使用 GET 要领得到,返回的可能是一个 JSON 字符串。字符串里面是一个列表,列内外面是一项 的云主机的信息。

  在云计算里,如果我们的处事器端,要供给一个基于 HTTP 协议的创建云主机的 API,也会用到 POST 要领。这个时候往往需要将“我要创建多大的云主机?几多 CPU 几多内存?多大硬盘?”这些信 息放在 JSON 字符串里面,,通过 POST 的要领报告处事器端。

  云主机已经创建好了,我想对这个云主机打一个标签,说明这个云主机是出产环境的,此外一个 云主机是测试环境的。那怎么改削这个标签呢?往往就是用 PUT 要领。

例如,我们要删除一个云主机,就会 挪用 DELETE 要领。

第二部分,首部字段

GET / HTTP/1.1 Host: hackr.jp User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*; q=0.8 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive If-Modified-Since: Fri, 31 Aug 2007 02:02:20 GMT If-None-Match: "45bae1-16a-46d776ac" Cache-Control: max-age=0

首部是 key value,通过冒号分隔断绝分手。这里面,往往生存了一些非常重要 的字段。

  Accept-Charset,暗示客户端可以接受的字符集。防备传过来的是此外的字符集,从而导致呈现 乱码。

  Content-Type是斧正文的格局。例如,我们进行 POST 的请求,如果正文是 JSON,那么我们就 应该将这个值设置为 JSON。

  Cache-Control缓存,这里单讲下缓存

  If-Modified-Since也是一个关于缓存的。

对付这种高并发场景下的系统,在真正的业务逻辑之前,都需要有个接入层,将这些静态资源的请求拦 在最外面。

技术图片

Nginx 这一层,它如何措置惩罚惩罚 HTTP 协议呢?对付静态资源,有 Vanish 缓存层。当缓存过期的时候,才会访谒真正的 Tomcat 应用集群。

  在 HTTP 头里面,Cache-control是用来控制缓存的。当客户端发送的请求中包罗 max-age 指令时,如 果判定缓存层中,资源的缓存时间数值比指按时间的数值小,那么客户端可以接受缓存的资源;当指定 max-age 值为 0,那么缓存层凡是需要将请求转发给应用集群。

  此外,If-Modified-Since也是一个关于缓存的。也就是说,如果处事器的资源在某个时间之后更新了, 那么客户端就应该下载最新的资源;如果没有更新,处事端会返回“304 Not Modified”的响应,那客 户端就不用下载了,也会节省带宽。

HTTP请求的发送

还是ip层那一套同网关,差别网关

TCP 头里面还有端标语,HTTP 的处事器正在监听这个端标语。于是,方针机器自然知道是 HTTP 处事 器这个进程想要这个包,于是将包发给 HTTP 处事器。HTTP 处事器的进程看到,本来这个请求是要访 问一个网页,于是就把这个网页发给客户端。

HTTP返回的构建

技术图片

状态码会反响 HTTP 请求的功效。“200”意味着大吉大利;而我们最不想见的,就是“404”,也就 是“处事端无法响应这个请求”。还有30?50?

Retry-After暗示,报告客户端应该在多永劫间以后再次测验考试一下。“503 错误”是说“处事暂 时不再和这个值共同使用”。

有Content-Type,暗示返回的是 HTML,还是 JSON。

大抵响应的发送和请求发送一致

HTTP2.0

HTTP 1.1 在应用层以纯文本的形式进行通信。每次通信都要带完整的 HTTP 的头,而且不考虑 pipeline 模式的话,每次的过程总是像上面描述的那样一去一回。这样在实时性、并发性上都存在问题。

为了解决这些问题,HTTP 2.0 会对 HTTP 的头进行必然的压缩,将本来每次都要携带的大量 key value 在两端成立一个索引表,对不异的头只发送索引表中的索引。

更重要的是HTTP2.0将一个TCP连接切成多个stream(流),每个strea都有本身的ID;并且将传输信息也支解成动静和帧。

技术图片

技术图片

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30810.html