本节主要讲解http协议相关的内容,作为后期讲述的一个预备知识。深入了解Http协议,对你今后的JavaSE,JavaEE学习都大有裨益,本节难度不是很大,却很重要。

早期的Http协议是1.0版本的,基于TCP协议。Http协议是一种基于请求、响应模式的无状态的文件传输协议。什么叫做基于请求、响应模式呢?举一个例子,比如我访问 www.xiaotublog.com ,就在浏览器输入这一个字符串,然后敲一下回车。

网站首页:

刷的一下,博客首页就被打开了,而且地址栏自动给我加上了http:// ,虽然浏览器上可能看不到,但实际上肯定是有的。你有意识到刚才发生了什么吗?没错,我通过浏览器这一个客户端,向某个远程服务器发送了一个http请求,因为我是通过域名来访问的。所以,为了解析这个域名,我刚才敲的这一下回车肯定是先走到了某一个DNS服务器,然后这个DNS服务器将域名解析后拿到一个IP地址,最终才传送到对应的服务器上。博客网站的服务器只有IP地址,没有域名的说法。实际上,在这个服务器上,也就是跑了一个Tomcat,Tomcat里面有一个博客的web项目,服务器原则上一直在开机状态,tomcat也一直在运行着。它处于一种等待状态,一直在等着有外部的Http请求过来。比如,我刚才就敲了一下回车,一个http请求就被发送过去了,tomcat软件接收到这个请求,并且解析这个请求。经过解析,就把其中的一个页面资源找到,并且通过响应的方式回执给我的客户端 - 浏览器。

让我们右键查看源代码,就能看到服务器给我们返回的其实就是html文本。

利用浏览器的调试工具,我们可以看到更多关于本次http请求的信息。

再来说说无状态,什么叫无状态呢?就是说,我刚才访问了一个网页,如果我马上再次刷新一下,是不是又对服务器发送了一次Http请求啊?是的,可是,对服务器而言,它并不知道两次的请求是否是同一个人,或者说同一台电脑发出来的,他不知道。这个就叫做无状态。

在早期的时候,Http请求还是1.0版本,他会给每一次的请求都建立一个连接,当请求结束,连接也就是自动关闭了。如果用户所请求的资源仅仅是一些纯文本,包括嵌入在页面中的css,和js代码,那么问题不是很大。可是在现在,网页内容越做越丰富,大量的外部css被引用,比如bootstrap.min.css。大量的外部js被引入,比如jQuery.min.css , 还有就是一个网站,往往会引入大量的图片。比如,我现在有一个网站的首页是这样子的。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<link type="text/css" rel="stylesheet" href="1.css" />
<link type="text/css" rel="stylesheet" href="2.css" />
<link type="text/css" rel="stylesheet" href="3.css" />
</head>
<body> </body>
</html>

在http1.0版本的时候,它是这样的,首先,和服务器建立连接,请求html文本,然后服务器把上面的这段代码发过来,本地的浏览器接收,OK,连接关闭。接下来,有趣的事情发生了,浏览器一行一行解析这些代码,当解析到 这一句的时候,再次向服务器发送一条请求,专门请求 1.css 这个文件。然后,服务器把1.css的纯文本发送给浏览器,浏览器缓存下来,接着,第二次连接关闭。同理,对于2.css和3.css,都会再分别建立一个连接,获取资源,然后又把连接关闭。不但是外部的css文件会这样,就连js文件,还有哪怕是一张图片,img标签等等,都会如此。

我们知道,随着网站的内容越来越丰富,图片动辄几十张,显然这种方式会持续不断的浪费性能,不可取。所以,这才有了http2.0。http2.0最重要的一点,就是新增了一个持续连接的功能,就比如上面那个HTML文件,正常情况下,它只会连接一次,在本次连接的过程中,会负责所有文件的请求和返回操作,当一段时间用户没有任何操作的话,这个链接才会自动断开。这就是所谓的http2.0

快速入门Http协议的更多相关文章

  1. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  2. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  3. OpenStack云计算快速入门之二:OpenStack安装与配置

    原文:http://blog.chinaunix.net/uid-22414998-id-3265685.html OpenStack云计算----快速入门(2) 该教程基于Ubuntu12.04版, ...

  4. OpenStack云计算快速入门之一:OpenStack及其构成简介

    原文:http://blog.chinaunix.net/uid-22414998-id-3263551.html OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助 ...

  5. GitHub新手快速入门日常操作流程

    GitHub新手快速入门日常操作流程 1. 注册帐号 打开https://github.com/,填写注册信息并提交. 2. 登录帐号 打开https://github.com/login,输入注册的 ...

  6. 【荐】PHP采集工具curl快速入门教程

    为什么要用CURL? CURL(Client URL Library Functions)是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTT ...

  7. Nginx快速入门菜鸟笔记

    Nginx快速入门-菜鸟笔记   1.编译安装nginx 编译安装nginx 必须先安装pcre库. (1)uname -a 确定环境 Linux localhost.localdomain 2.6. ...

  8. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  9. 快速入门系列--MVC--01概述

    虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...

随机推荐

  1. CentOS 7 源码编译安装 Mysql 5.7

    1.创建 mysql 用户,用户组,以及相关目录 /usr/sbin/groupadd mysql /usr/sbin/useradd -g mysql mysql mkdir -p /opt/loc ...

  2. Delphi2010生成GB2312字库乱码问题

    用Delphi2010做一个点阵字库软件,字库生成部分是从一个用Delphi2007做旧的程序里扣出来的.点阵字库软件完成后生成GB2312字库在LED控制卡上显示为乱码.知道Delphi版本高于20 ...

  3. FFT算法的完整DSP实现(转)

    源:FFT算法的完整DSP实现 傅里叶变换或者FFT的理论参考: [1] http://www.dspguide.com/ch12/2.htm The Scientist and Engineer's ...

  4. UIAlertController 自定义输入框及KVO监听

    UIAlertController极大的灵活性意味着您不必拘泥于内置样式.以前我们只能在默认视图.文本框视图.密码框视图.登录和密码输入框视图中选择,现在我们可以向对话框中添加任意数目的UITextF ...

  5. RoundedImageView使用吐槽心得(RoundedImageView与Glide加载图片,第一次加载无法圆角问题)

    最近使用的时候发现一个问题, RoundedImageView与Glide搭配使用的时候,第一次加载图片(内存中没有),后图片无法圆角,后来尝试各种改,最后想到了一个办法,就是让Glide加载图片的 ...

  6. 每个Javascript开发者都应当知道的那些事

    每个Javascript开发者都应当知道的那些事 2015-06-07 前端大全 (点击上方蓝字,可快速关注我们) Javascript是一种日益增长的语言,特别是现在ECMAScript规范按照每年 ...

  7. js 捕获浏览器关闭或者刷新页面给出提示

    window.onbeforeunload = function() { return " "; }document.onkeydown = function() {if ((wi ...

  8. Ubuntu上搭建Git服务器

    下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用VMware虚拟机安装两台Ubantu系统,分别命名为gitServer和gitClient_01. 1.安装OpenSSH并配置SSH无 ...

  9. java 容器、二叉树操作、107

    二叉树本身固有的递归性质,通常可以用递归算法解决,虽然递归代码简介,但是性能不如非递归算法. 常用的操作是构建二叉树.遍历二叉树(先序.中序.后序.都属于DFS深度优先搜索算法,使用栈来实现),广度优 ...

  10. localStorage eval script

    var globalEval =function(data) { (window.execScript || function(data){ window.eval.call(window,data) ...