HTTP协议概述

花了2天的时间来第一次比较系统的研究了下HTTP协议,现在开始来做一个整理。

整理之前,有些东西我还是愿意码字来说一下自己想说的话。首先是工作,今年我自己换了一家公司。对于上家公司,我自始至终都是很感激的,特别是我的老大,对于我给了好多朋友间的关心和帮助,这次离开和老大聊天的时候也有讲到,我说老大我觉得我挺失败,之所以失败并不是说自己无能,而是说对于老大那边我是充满了深深的辜负感的。老大反而还安慰我好多,叫我加油。我记得我刚进来的时候我们老大很尊重我的意见,为我争取了好多我想要得到的东西。当初我们这边没有一个专职的技术前辈来帮我们排忧解难,后来专门安排我们公司研发部的一个经理来做技术支持。人家原来是做管理的,之后就专门去负责技术了,那原来的项目那些需求了什么的都有我老大自己接过去,为了就是能更好的规范我们这些菜鸟的代码和提高我们的技术。但是最终我还是离开了,这点是我最看准的,至于工资我觉得合适就行,所以我并没有要求太高或者怎么怎么地,包括现在的工资和以前实际也差不多。因为我不想沦为一个知其然不知其所以然的码农,对于代码有点强迫症的我来说,老是希望能把项目做到更好(这些都不会实际影响到我的开发速度)。以前我经常自诩自己是一个热爱生活的程序员,但是最后我还是选择离开了,所以对于老大那边,我充满了愧疚。老大帮我争取了好多好多,包括平时我都可以很自由,给了我最大的发挥的空间,给了我一个超过同龄同事的一个乐观的薪资,我一直记得老大以前对我讲过的话“希望我快点长大,他一直想把我用好”,包括这次已经决定离开后的跳槽,我们老大也认识几家大公司的经理等等,他还有帮我打听我的面试情况如何,给了我一堆建议,对我很好很好的。在新公司这段时间,矫情的说我还真的有点想我以前的老大,天下没有不散的宴席,我是知道的,我也拒绝自己做一个感性至极优柔寡断的人,对于老大我一直会把他当做我人生中的一个好老大,在这里祝福老大,希望老大身体健康,万事如意。

然后是学习。最近一直在和一个朋友学习,本来呢?我是没有太大的精力和想法去整理以前会玩的东西的,只是玩过的东西这些我都不想辛辛苦苦的翻阅那么多资料,包括视频,包括PDF书,包括手里的纸质书然后敲过代码最后整理成博客贴出来。但是后来我还是很乐意做这些事情,现在新的公司提倡的氛围就是不要加班,这个也是我放弃好几家大公司选择来这边的原因。我现在也有大把的时间用来充电,所以呢我会把写博客的习惯保持下去,希望自己在技术上更上一层楼。关于学习,我自始至终认为是一个循序渐进的过程,就好比当初高考,温固而知新也一直是我很看重的一个方面。就拿现在j2e来说吧,我推荐我朋友从servlet开始复习,而不是直接进入框架。固然直接学习框架也是可以的,直接照猫画虎去使用框架呗,无非就是那些配置了,约定了什么的,只是会简单的使用一个框架还是很快就可以学会的。但是如果这样子的话就会有2个很明显的问题:1,为什么要是用现在学习的这个东西?2,如果不用现在的这个东西还能不能实现功能,或者说还有没有更好的方式来实现我们的功能呢?

如果你没有认真的学习过servlet,jsp那么你就连什么是BS架构都不知道,什么是服务器编程,什么是客户端编程都不知道,那些繁琐的底层的也是最简单的最原始的代码你都不知道,那对于使用框架肯定是没有一点点体会的,万一将来遇见了什么问题,那肯定是什么都不知道,所以认真的有顺序的来学习还是很重要的。我有一点记得很清楚,在老早的时候和一个朋友交流servlet,然后他就问为什么把一个servlet放tomcat里面就可以跑?我记得当时的回答就是tomcat就是一个web容器啊。那个时候对于web容器其实并不知道太多的,反正是会用,但是至于他是怎么工作并不是很清楚,包括HTTP协议,也只是知道说HTTP协议就是相当于一种约束,在请求和响应中按照这种约束来交互,至于里面都是怎么定义的约束等等这些细节,并不是很清楚。所以我在学习servlet之前就先比较底层的研究了下tomcat还有HTTP,之后再开始去研究servlet,那么我觉得着这样子会很有效,将所有的东西形成一个有效的整体。好了,希望将来自己能勿忘初心,多年以后都能成为自己想象的模样。


现在开始HTTP的整理,一共3篇,这里是HTTP概述。


OK,那么现在第一个问题来了?

  • 什么是HTTP协议?

HTTP 超文本传输协议 (HTTP-Hypertext transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于 1990 年提出,经过几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。这个强调2个字,规则。什么是规则,就是说约束每个人的一种规范,不然的话每个人都按照自己的规则乱来,那么就没有办法统一来交互了。

  • HTTP 协议的发展历程
超文本传输协议的前身是世外桃源(Xanadu)项目,超文本的概念是泰德˙纳尔森(TedNelson)在 1960 年代提出的。进入哈佛大学后,纳尔森一直致力于超文本协议和该项目的研究,但他从未公开发表过资料。 1989 年,蒂姆˙伯纳斯˙李(Tim Berners Lee)在
CERN(欧洲原子核研究委员会 = European Organization for Nuclear Research)担任软件咨询师的时候,开发了一套程序,奠定了万维网(WWW = World Wide Web)的基础。 1990年 12 月,超文本在 CERN 首次上线。 1991 年夏天,继 Telnet 等协议之后,超文本转移协议成为互联网诸多协议的一分子。
当时, Telnet 协议解决了一台计算机和另外一台计算机之间一对一的控制型通信的要求。邮件协议解决了一个发件人向少量人员发送信息的通信要求。文件传输协议解决一台计算机从另外一台计算机批量获取文件的通信要求,但是它不具备一边获取文件一边显示文件或对文件进行某种处理的功能。新闻传输协议解决了一对多新闻广播的通信要求。而超文本要解决的通信要求是:在一台计算机上获取并显示存放在多台计算机里的文本、数据、图片和其他类型的文件;它包含两大部分:超文本转移协议和超文本标记语言(HTML)。 HTTP、 HTML 以及浏览器的诞生给互联网的普及带来了飞跃。

  • HTTP 的主要特点
HTTP的主要特点,记住一句话就好了:基于请求和相应的无状态的连接。
1.支持客户端/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、 POST、 HEAD 等。每种方法规定了客户与服务器联系的类型不同。由于 HTTP协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
3.灵活: HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。
4.无连接:无连接的含义是连接双方在完成交互后不维持连接状态,当客户端发送新的请求后则开启新的连接。
5.无状态: HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。
缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

  •  HTTP 协议的会话方式

1 浏览器与服务器之间的通信过程要经历四个步骤

技术分享

2 浏览器与 WEB 服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与 WEB 服务器都要建立一次单独的连接。
3 浏览器到 WEB 服务器之间的所有通讯都是完全独立分开的请求和响应对。

  • HTTP1.0 和 HTTP1.1 的区别
常见的HTTP协议目前常用到的有1.0和1.1这2种,还有一种是HTTP -NG目前还在试验中,这个先不管。在下面的几篇blog里面我会结合telnet窗口来说明这2者之间的区别。
在 HTTP1.0 版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接,比如说我去加载一个html页面,里面导入了好多的CSS文件或者是图片这些,都要不停的去连接服务器获得这些资源这是很消耗性能的。

但在 HTTP1.1 版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。那么这里就有一个问题就是说,不管多少次请求,连接最终肯定是要断开的,那么什么时候才会断开呢?这里是有一个会话时间的,过了这个会话时间服务器没有再次收到请求的话就自然而然的断开了。
技术分享

好了,概述就讲到这里,下面一篇我会认真的整理请求头和响应头,以及telnet命令的使用,最后还会结合浏览器F12来详细介绍如何监控HTTP。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。