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


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的请求信息如下图。

Request Headers

回应信息(报文)

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

状态码(Status Code)

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

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

  • 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等),请求信息通过路由器等中间层的几微秒的漫长旅程,到达服务器(也可能到不了,301之类的你懂的),服务器接受到请求后,会根据请求Headers以及Body的内容进行相关操作(数据添加,更新,删除等),然后同样返回一个响应消息回去,这个响应消息里包含了客户端需要的信息,主要是Body(可能是一个HTML页面),当然还有状态码,状态信息,Headers等,这样,一次完整的HTTP请求就完成了。

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

我们的学习过程,也将是这样一个循序渐进的过程,希望我可以踏踏实实走好每一步路。

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,328评论 6 152
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,517评论 0 6
  • 本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 ...
    涤生_Woo阅读 54,937评论 24 557
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,201评论 3 82