编程练级web部分--http

http介绍

简介

超文本传输​​协议(HTTP)是一个用于传输超媒体文档(例如 HTML)的应用层协议。
HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待它收到服务器端响应。
HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。该协议虽然通常基于 TCP/IP 层,但可以在任何可靠的传输层上使用;也就是说,不像 UDP,它是一个不会静默丢失消息的协议。RUDP——作为 UDP 的可靠化升级版本——是一种合适的替代选择。

HTTP 概述

HTTP是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。
在这里插入图片描述
客户端和服务端通过交换各自的消息(与数据流正好相反)进行交互。由像浏览器这样的客户端发出的消息叫做 requests,被服务端响应的消息叫做 responses。
它是应用层的协议,通过TCP,或者是TLS-加密的TCP连接来发送,理论上任何可靠的传输协议都可以使用。(https)
每一个发送到服务器的请求,都会被服务器处理并返回一个消息,也就是response。在这个请求与响应之间,还有许许多多的被称为proxies的实体,他们的作用与表现各不相同,比如有些是网关,还有些是caches等。
在这里插入图片描述

client

user-agent 就是任何能够为用户发起行为的工具。这个角色通常都是由浏览器来扮演。另外其他能够发起http请求的比如python爬虫,java或者其他语言写的与web服务器交互的程序,都属于客户端。

server

Server只是虚拟意义上代表一个机器:它可以是共享负载(负载均衡)的一组服务器组成的计算机集群,也可以是一种复杂的软件,通过向其他计算机(如缓存,数据库服务器,电子商务服务器 …)发起请求来获取部分或全部资源。

Server 不一定是一台机器,但一个机器上可以装载的众多Servers。在HTTP/1.1 和Host头部中,它们甚至可以共享同一个IP地址。

proxy

代理主要有如下几种作用:

缓存(可以是公开的也可以是私有的,像浏览器的缓存)
过滤(像反病毒扫描,家长控制...)
负载均衡(让多个服务器服务不同的请求)
认证(对不同资源进行权限管理)
日志记录(允许存储历史信息)

正向代理
所谓正向代理就是顺着请求的方向进行的代理,即代理服务器他是由你配置为你服务,去请求目标服务器地址。比如我们无法直接访问模板地址,那可以通过一个代理服务器进行请求转发,对于这种情况代理,不改变模板服务器地址。

反向代理
代理服务器是为目标服务器服务的,虽然整体的请求返回路线都是一样的都是Client到Proxy到Server,但是在这个路线中,客户端的target是达到反向代理服务器上,由代理去向相应的数据源服务器去获取请求需要的资源。

HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接。当需要连续发起多个请求时,这种模式比多个请求共享同一个 TCP 链接更低效。

为了减轻这些缺陷,HTTP/1.1引入了流水线(被证明难以实现)和持久连接的概念:底层的TCP连接可以通过Connection头部来被部分控制。HTTP/2则发展得更远,通过在一个连接复用消息的方式来让这个连接始终保持为暖连接。

为了更好的适合HTTP,设计一种更好传输协议的进程一直在进行。Google就研发了一种以UDP为基础,能提供更可靠更高效的传输协议QUIC。
请求
HTTP请求的一个例子:

A basic HTTP request
在这里插入图片描述
请求由以下元素组成:

  • 一个HTTP的method,经常是由一个动词像GET, POST 或者一个名词像OPTIONS,HEAD来定义客户端的动作行为。通常客户端的操作都是获取资源(GET方法)或者发送HTML form表单值(POST方法),虽然在一些情况下也会有其他操作。
  • 要获取的资源的路径,通常是上下文中就很明显的元素资源的URL,它没有protocol (http://),domain(developer.mozilla.org),或是TCP的port(HTTP一般在80端口)。
  • HTTP协议版本号。
  • 为服务端表达其他信息的可选头部headers。
  • 对于一些像POST这样的方法,报文的body就包含了发送的资源,这与响应报文的body类似。*

响应
HTTP响应的一个例子:
在这里插入图片描述
响应报文包含了下面的元素:

  • HTTP协议版本号。
  • 一个状态码(status code),来告知对应请求执行成功或失败,以及失败的原因。
  • 一个状态信息,这个信息是非权威的状态码描述信息,可以由服务端自行设定。
  • HTTP headers,与请求头部类似。
  • 可选项,比起请求报文,响应报文中更常见地包含获取的资源body。

HTTP 缓存

缓存对高速 Web 站点来说是非常之重要的。
大多数比较关心的是浏览器与代理缓存,除此之外还有网关缓存、CDN、反向代理缓存和负载均衡器等部署在服务器上的缓存方式,为站点和 web 应用提供更好的稳定性、性能和扩展性。
在这里插入图片描述
这里的缓存时解放了web源服务器的压力,由此可以看到,缓存服务器主要可以缓存的是静态资源。

缓存操作的目标

常见的 HTTP 缓存只能存储 GET 响应,对于其他类型的响应则无能为力。缓存的关键主要包括request method和目标URI(一般只有GET请求才会被缓存)。

缓存控制

HTTP/1.1定义的 Cache-Control 头用来区分对缓存机制的支持情况, 请求头和响应头都支持这个属性。
没有缓存
缓存中不得存储任何关于客户端请求和服务端响应的内容。每次由客户端发起的请求都会下载完整的响应内容。

Cache-Control: no-store

缓存但重新验证
如下头部定义,此方式下,每次有请求发出时,缓存会将此请求发到服务器(译者注:该请求应该会带有与本地缓存相关的验证字段),服务器端会验证请求中所描述的缓存是否过期,若未过期(注:实际就是返回304),则缓存才使用本地缓存副本。

Cache-Control: no-cache

私有和公共缓存
过期
Cache-Control: max-age=31536000

HTTP Cookie

RFC 6265 定义了 cookie 是怎样工作的。当接收到一个 HTTP请求时,服务器可以在响应中发送一个 Set-Cookie 首部字段。接着,对于同一台服务器发起的每一个请求,客户端都会在 HTTP 请求头中以字段 Cookie 的形式将 cookie 的值发送过去。 此外,还可以指定一个过期时间,也可以指定一个特定的域名和路径中使用。
现在随着现代浏览器开始支持各种各样的存储方式,Cookie渐渐被淘汰。由于服务器指定Cookie后,浏览器的每次请求都会携带Cookie数据,会带来额外的性能开销(尤其是在移动环境下)。新的浏览器API已经允许开发者直接将数据存储到本地,如使用 Web storage API (本地存储和会话存储)或 IndexedDB 。在新项目的架构设计中要考虑浏览器的支持能力与面向未来的架构兼容,尤其是随着数据安全问题越来越重要,不少用户会禁用cookie。

HTTP 访问控制(CORS)

跨站 HTTP 请求就是从另一个域名,而不是资源所在的域名发起的 HTTP 请求。举例来说,在域名 A (http://domaina.example/) 的 HTML 页面上使用 img 元素 () 来请求域名 B (http://domainb.foo/) 上的图片资源。这在当前的 web 页面上很常见 —— 页面通过跨域规则加载 CSS 样式表,图片,脚本以及其他资源。

HTTP 的演变

简单描述了从早期版本的 HTTP 到现在的 HTTP/2 以及未来的 HTTP 这个过程中发生的变更。

Mozilla web 安全引导

一系列用于帮助运营团队创建安全的 Web 应用程序的提示。

HTTP 消息

描述了 HTTP/1.x 和 HTTP/2.x 中不同种类消息的类型和结构。
典型的 HTTP 会话
展现并解释了一个常见的 HTTP 会话流程。
HTTP/1.x 中的连接管理
描述了在 HTTP/1.x 中的三种连接管理模型,以及它们的优势和劣势。

HTTP 首部

HTTP 消息首部被用来描述资源信息,或是客户端和服务器的行为。自定义的专有首部可以加上 ‘X-’ 前缀; 其他的可以在 IANA registry 找到,其原始定义在 RFC 4229。IANA 同时也维护着一份 registry of proposed new HTTP message headers。

HTTP 请求方法

可以使用 HTTP: GET,POST 方法来完成不同操作,同时也有一些其他的方法,如 OPTIONS,DELETE 和 TRACE。

HTTP 状态返回码

HTTP 状态返回码用来表示指定的 HTTP 请求是否成功完成。响应被分为 5 种类型: 消息型响应,成功响应,重定向,客户端错误和服务器错误。

CSP 指令

Content-Security-Policy 响应头字段允许站点的管理者控制页面上哪些资源能够被用户代理程序加载。除了少数例外,此策略主要涉及源服务器和脚本终端。

工具与资源

有助于理解和调试 HTTP 连接的工具和资源。

Firefox 开发者工具

网络监视器
Mozilla Observatory
一个旨在帮助开发人员,系统管理员和安全专业人员安全地配置其网站的项目。

RedBot

用于检查 Cache 相关的 HTTP 头的工具。

浏览器的工作原理

一篇非常全面的关于浏览器内部实现与通过 HTTP 协议的请求流的文章。可以说是所有 Web 开发者的必读内容。
耗子叔的博客中提到好几次这节内容 中文链接

http的版本演进

首先推荐tx先了解一下chrome-devtools的含义
https://www.cnblogs.com/webvision/p/11595772.html

http1.0 http1.1 http/2 http/3

https://zhuanlan.zhihu.com/p/29609078
https://zhuanlan.zhihu.com/p/58668946

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值