概念

HTTP请求方法

HTTP请求方法

HTTP方法是启动请求字符串中的必需参数。一种方法可以称为请求类型,并且基于此类型,必须在服务器上执行某些操作并将响应返回给客户端。该方法的名称区分大小写,并且通常是一个简短的单词,由英文大写字母组成。

接收请求时,服务器尝试确定请求的方法,如果失败,则返回带有代码501和短语的响应消息Not Implemented。如果服务器已定义方法,但是无法将其应用于请求的资源,则返回带有代码405和短语的响应消息Method Not Allowed了解有关HTTP响应状态代码的更多信息。如果出现这两个选项中的任何一个,则服务器需要在返回响应时添加标头Allow 并列出服务器支持的所有方法。…

Action-Domain-Responder

原文:https://herbertograca.com/2018/09/03/action-domain-responder/

这篇文章是软件架构编年史()的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。

MVC 诞生于 1979 年,它诞生于使用 CLI 用户界面的桌面应用上下文中,它暗示如果用户外部因素导致数据库变化,那么 UI 就应该自动地变化。同样的模式也可以完美地应用在稍后出现的 GUI 桌面应用上。

然而,它却和 Web 应用一直在磨合中,因为大多数 Web 应用不会用 UI 变化来作为服务端发生的变化的后果,它们总是从 UI 发起对服务端的调用来更新界面。

前面我已经介绍过 MVC 及其变种(),而这篇文章将介绍另一个变种:由 Paul M. Jones 提出的 Action-Domain-Responder

一文串联 HTTP / [0.9 | 1.0 | 1.1 | 2 | 3]

1989 年,万维网诞生之后,HTTP 迅速成为主导世界的应用层协议。在今天,几乎任何场景都或多或少用到了 HTTP 协议。

在 30 多年的历史中,HTTP 协议本身有比较大的发展,同时,还有一些重大的变动也在酝酿之中。这些演化使得这个协议的表现力更强,性能更好,更能满足日新月异的应用需求。本文就来回顾和展望一下 HTTP 的历史和未来。

  • HTTP/0.9
  • HTTP/1.0
  • HTTP/1.1
  • HTTP/2
  • HTTP/3

HTTP/0.9

HTTP/0.9 诞生于 1991 年,是 HTTP 协议的最初版,构造十分简单:

  • 请求端只支持 GET 请求
  • 响应端只能返回 HTML 文本数据
GET /index.html
<html>
  <body>
    Hello World
  </body>
</html>

请求示意图如下:

            

轻松理解HTTP缓存策略

上一篇文章我写了koa-static的源码解析,其中用到了HTTP的缓存策略,给返回的静态文件设置了一些缓存的头,比如Cache-Control之类的。于是我就跟朋友讨论了一下HTTP的缓存策略:

朋友说:“HTTP里面控制缓存的头(header)太多了,啥Cache-ControlETagLast-Modified,一大堆,乱七八糟的,而且之间逻辑关系不强,要掌握基本靠背!”

我有点惊讶:“为什么要去背这个呢?所有的技术都是为了解决问题而存在的,不了解问题而去单纯的学习技术,去,背,去,死记,确实很枯燥,而且效果不好。HTTP缓存策略只是为了解决客户端和服务端信息不对称的问题而存在的,客户端为了加快速度会缓存部分资源,但是下次请求时,客户端不知道这个资源有没有更新,服务端也不知道客户端缓存的是哪个版本,不知道该不该再返回资源,其实就是一个信息同步问题,HTTP缓存策略就是来解决这个问题的。如果我们跳出这种纯粹的技术思维,我们会发现生活中这种信息同步问题也很常见。而我们解决这些问题的思路很多时候都是司空见惯了,如果从这个角度来说,这个问题就很好理解!”

于是我给他讲了一个我小时候租光碟看奥特曼的故事。…

            

Server-Sent Events(服务器推送) 教程

服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE)。本文介绍它的用法。

一、SSE 的本质

严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。

也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一次用时很长的下载。…

程序员都应该知道的URI,一文帮你全面了解

URI 是每个程序员都应该了解的概念,同时相关联的还有 URL, URN 等概念簇。了解这些概念,可以帮助我们更好地窥探万维网(WWW)的设计,同时也能帮我们在工作中有效解决跟 URI 相关概念的问题,更加理解 encode,decode 工作原理,更好地助力网络编程!

1.URI

URI(Uniform Resource Identifier) ,意为统一资源标识符,提供了一套简单可扩展的方式对资源进行标识。…

2020再谈跨域

跨域这个话题已经谈了很多年了,怎么现在又要谈这个问题?本来是可以不必再提了的,但是由于Chrome 86版本以后又增加了很多限制,导致我们不得不再次提起。

CORS

对于前端开发来说,跨域通常有两种方式,一种是在服务端修改nginx配置,在response headers里添加CORS设置,另一种是在本地架设代理。我们先谈第一种。

原本在nginx里添加CORS已经是一种常规操作,简单到无以复加:…

如何选择软件版本,是选择一般版本,还是LTS长期支持版本?

如何选择软件版本,是选择一般版本,还是LTS长期支持版本?我们以laravel为例。

很久以前在一个话题里面聊到的观点,很多同学在 Laravel 版本选择时候比较混淆,这里说下我的看法。

对 Laravel 框架发布周期不熟悉的同学请参阅 - Laravel 的发布路线图。

什么是 LTS
首先你需要明白 LTS 的概念。…

通过短信发送的一次性验证码 的标准发布

GitHub 最近宣布,它正在采用SMS一次性密码(例如,两因素身份验证代码)格式的标准草案,以帮助阻止网络钓鱼攻击。

短信注意事项

在开始详细介绍之前,需要注意的是,使用一次性短信作为SMS的安全性比使用诸如Authy之类的专用应用程序的安全性低,因为该方法容易受到SIM交换攻击的攻击。它们也很不方便 -有时消息会花一些时间才能到达,如果用户不在手机范围内或在出国旅行时更换了SIM卡,则根本不会收到消息。

也就是说,通过SMS一次性获得密码很重要-它们是传递2FA代码的最常见方式,因为它们可以与用户已经拥有的技术一起使用。下载专用于管理2FA代码的专用应用程序超出了许多用户的范围。

这个怎么运作

标准背后的想法是预定义的SMS(文本消息)格式,如下所示: