Web开发学习笔记——HTTP 概述

本篇了解 HTTP 的一些基础知识。

什么是HTTP

如果说 TCP/IP 是一套约定计算机如何交流通信的规则的话,HTTP 起初设计的初衷则是约定客户端(Client,也就是浏览器)和主机(Host,也就是服务器)之间的通信规则,当然,现在,它不止是这个功能咯!

那么,如何给 HTTP 下一个定义呢?

HTTP,全称是 HyperText Transfer Protocol,翻译过来就是超文本传输协议,它是一种在client-server之间,用于传输超媒体文档的、无状态 的应用层协议。所谓的超媒体文档,指的就是 HTML 等超文本文件以及 Web 中的文本、图片、视频、脚本和样式等。而无状态,则意味着它不能够保存数据,这在电商网站的购物车功能中表现最明显,如果我们从一个页面向购物车添加了一件商品,在换一个页面后,这件商品并不会实时更新,这个问题如何解决呢?——解决办法当然是有的,就是通过 HTTP cookies,把商品信息添加 cookies 到 HTTP 头部,创建一个会话共享这个信息。

HTTP 请求(request)从 client 端(浏览器)发出,到 server 端(服务器)的指定端口(默认80端口),服务器端接受到请求后,根据请求头部信息,做出响应(response),返回一个响应状态和对应的请求资源(文件、错误信息之类的)。HTTP 位于七层协议的最上层——应用层。当然,这整个过程并不只是客户端和服务器两个点的事情,期间还有路由器、调节器等许多实体节点。

Http 与 Https

我们一直谈到 http,但是,当你在浏览器中看到的 URL 中,经常会看到前面的协议名是https,那么,http 和 https 有什么关系呢?(我想绝不是 java 和 javascript 的关系滴)。

在查阅了一些资料之后,我知道后面多余的 s 指的是 secure,也就是说后者是前者的安全版本。那么为什么 https 会更安全呢?原来,开发 https 的主要目的是为了在网络传输数据的过程中,保证数据的隐私和完整性。

在 http 的时代,所有的网络请求对话其实是公开的,别人可以知道你们之间传输的对话内容是什么,这在今天可不得了,现在使用的密码如此之多,如果你的密码别人都能看见还了得?

所以,https 出现了。它的主要设计思想是,通过在公开的网络通道上建立一条安全通道,并且通过使用一些安全证书和加密包的方式,对数据提供保护。所以,会有一些专门的机构(如 VeriSign 以及 Microsoft 等)负责颁发信任证书给网站,并且将这些信任协议预先安装在浏览器中,所以说,这两个机构相当于德高望重的值得被信赖的人。我们进入一个网站时,在浏览器地址栏的一侧,经常会有一个锁子,这个锁子就代表网站的是否安全,例如我们在 Chrome 中输入百度的网址,会看到左侧绿色的锁子和安全两个字。在 Firefox 还可以看到它的安全证书,长这样:

可以看到证书的颁发机构是Global Sign.

Https 是通过叫做 SSL/TLS 技术来加密数据包,TLS,叫做传输层安全协议(Transport Layer Security),它的前身是 SSL,叫做安全套接层(Secure Sockets Layer),其实,Https 历史渊源很久了,这是1994年网景推出第一代浏览器网景导航者时提出的,当时,它们就用 SSL 加密,后来 IETF 将这项技术标准化,于1999年推出 TLS。所以说,Https 的安全保障是建立在 SSL/TLS 技术的基础上的。

另外,Http 和 Https 的一个区别是,前者使用 80 端口传输,而后者使用 443 端口。

下面的内容是在一次完整的 HTTP 请求中的过程以及相关概念。

  • 请求信息(报文)
  • 回应信息(报文)
  • 请求方法(动作)
  • 状态码(status code)

请求信息(报文)

请求信息是包含了一个 HTTP 请求的基本信息的报文,其第一行包括请求方法(下面详述),资源路径(一般指URL地址),HTTP协议版本号 三部分,下面是请求的Headers(主机名和一些告诉服务器处理信息的参数,例如接收的语言之类的)信息。另外,在 POST 等请求方法中可以出现 Body 信息,也就是发过去的数据。可以在 Chrome 的开发者工具下的 Network 面板左侧的 Name 子面板下点击网址,然后在右侧的 Headers 选项卡下查看请求信息。例如 google.com 的请求信息如下图。

回应信息(报文)

回应信息是指 server 端接受到请求信息后,经过处理而返回的响应信息,和请求信息一样,它同样通过一个报文来实现,其主要内容是第一行是:HTTP协议版本号状态码状态信息,下面是 Headers,比请求更常见的 返回内容Body 。回应信息与请求信息的最大不同是,它会返回一个状态码和状态信息,其它的差不多意思~其实状态码和状态信息,是比较常见的。

状态码(Status Code)

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。 所有状态码的第一个数字代表了响应的五种状态之一。——来自维基百科.

那么,我们不禁要问了,这五个数字和它所对应的五种状态到底是什么呢?打个比方好了,这就像恋爱中的表白,假如一位男士写了一封极其浪漫的告白信向一个姑娘表白,那么这封信就是请求信息了,而回信则是回应信息,其中的内容就包含了状态码,接下来,我们来模拟一下,这位女士回复以下几种数字打头的信息,对应表白的成功与否。

  • 1XX,以1打头的状态码表示服务器已经接受到请求,需要继续处理,这是一种临时响应状态,这种状态码是不会发送到客户端来的~也就是说,女方收到了信,她还没看呢,她总不会回一封信说:你的信我收到了,还没拆!

  • 2XX,以2打头的状态码代表请求已经被接收,并且完全懂了什么意思并且接受了请求。也就是说,如果男士收到的回信内容是以2打头的,那么恭喜,告白成功了!

  • 3XX,以3打头的状态码表示需要客户端需要进一步的操作才能完成请求~也就是说,这位姑娘的意思是,你必须要在北京有一套房才能答应你呢,或者说,我移居到美帝了,抓紧办签证找我吧~

  • 4XX,以4打头的状态码表示客户端发生错误,妨碍了服务器的处理。这就糟糕了,你的表白信估计写的不大好,写了一大堆表扬另外一位姑娘的话,所以,告白失败!

  • 5XX,以5打头的状态表示服务器在处理的过程中由于某些原因发生了错误,导致请求失败。这回就是姑娘的问题,这位姑娘大概已经名花有主了,所以,告白失败!

一共有以上五大类状态码,其中我们最常见的状态码是 200(请求成功,数据也将会返回),301(Moved permanently,资源被永久移动到新位置了),401(当前请求需要用户验证),404(请求失败,所需的资源在服务器上没找到)。

而状态信息(State message),则指的是服务器端根据状态码做出的描述性信息,这是可以自定义的,例如我们常见的“404,糟糕,你要找的页面走丢了”之类的~

请求方法(动作)

请求方法,也叫请求动作,就是客户端向服务器发送请求时所用的对话方式,因为方法的不同,所能采取的操作也大大不同,HTTP 请求方法一共有8种。

  1. GET.获取相关资源,这是最常见的方法之一,它只要求 URL 中包含请求资源的位置和服务器返回资源的必要信息。

  2. POST.向服务器提交数据,可能是添加新资源或修改已存在资源,要添加的信息包含在请求信息 Headers 中,这类方法常见情景有提交表单,上传文件等。

  3. PUT.更新指定资源,上传其最新版本,上传的数据仍然会包含在请求信息 Headers 中。

  4. DELETE.删除一个已存在的资源。

  5. HEAD.与 PUT 类似,只不过它不会添加信息到请求信息中,所以经常用于一些资源的检验与验证工作。

  6. TRACE.经常用于诊断工作。

  7. OPTIONS.这个方法可使服务器传回该资源所支持的所有 HTTP 请求方法。

其中,前四种比较常用。

总结

本文通过了解 HTTP 的基本概念:一个在客户端和服务器端交换超文本文件(当然还有其他功能)的应用层协议;

然后接着了解了在一次 HTTP 请求中会发生什么:客户端发送一个请求信息(可能包括请求方法,资源路径,协议版本号,Headers,请求Body等),请求信息通过路由器等中间层的几微秒的漫长旅程,到达服务器(也可能到不了,404之类的你懂的),服务器接受到请求后,会根据请求 Headers 以及 Body 的内容进行相关操作(数据添加,更新,删除等),然后同样返回一个响应消息回去,这个响应消息里包含了客户端需要的信息,主要是 Body(可能是一个 HTML 页面),当然还有状态码,状态信息,Headers 等,这样,一次完整的 HTTP 请求就完成了。

我们会发现,如果前面这篇Web开发学习笔记——浏览器是如何工作的中我们了解了从 URL 输入地址栏开始,浏览器如何与 DNS 服务器配合,完成 URL 到 IP 的匹配过程,从而定位到服务器的位置,那么今天,我们了解的东西,则是在知道服务器的位置之后,浏览器是如何在 HTTP 协议的约定下,去完成发送与取得数据的过程。也就是说,昨天我们研究了路线,今天我们研究了在路上的故事。

我们的学习过程,也将是这样一个循序渐进的过程,希望我可以踏踏实实走好每一步路,文章中的谬误之处,希望大家多多指出,不胜感激。

参考资料

转载于:https://juejin.im/post/5ac6212c5188255c637b30d0

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值