本节主要讲解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. 记一次gitlab添加账号收不到邮件的解决办法

    之前gitlab创建账号可以正常收到邮件,最近就收不到,查了gitlab的配置以及postfix都没有问题,发来查看了发信25端口,该端口被屏蔽,提交工单到阿里云那边收到回复说是服务器统一关闭25端口 ...

  2. Bootstrap的文档大概介绍

    1.预置CSS样式 (1)Normalize.css  增强浏览器表现的一致性. (2)布局容器——版芯:container. ①.container 类用于固定宽度并支持响应式布局的容器.     ...

  3. Oracle教程-安装、结构(一)

    本文安装的是Oracle中的11G版本 一. 将文件win32_11gR2_database_1of2.zip和win32_11gR2_database_2of2.zip解压. 注意:这两个文件解压到 ...

  4. 使用for循环运算

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. MySQL的char和varchar

    一.VARCHAR与CHAR字符型数据的差异 在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char,这两种数据类型虽然都是用来存放字符型数据,但是无论从结构还是从数据的保存方式来 ...

  6. lPC1788驱动SDRAM

    Sdram型号为hy57v256 #ifndef __SRAM_H_ #define __SRAM_H_ #include "common.h" #include "de ...

  7. 《javascript语言精粹》——第4章函数

    函数就是对象 [1].函数字面量即(函数表达式)包括四部分: 第一部分:保留字function: 第二部分:函数名称,可有可无: 第三部分:包围在一对小括号的一组参数,参数用逗号隔开: 第四部分:包围 ...

  8. 推荐一款非常好用的java反编译工具(转)

    源: 推荐一款非常好用的java反编译工具

  9. Learning How to Learn, Part 1

    Jan 8, 2015 • vancexu Learning How to Learn: Powerful mental tools to help you master tough subjects ...

  10. Java虚拟机——进度1

    Java 虚拟机       一.Java虚拟机的基本结构 ①类加载子系统:从文件系统或者网络中加载Class信息,存放在方法区中. ②方法区中存放放进来的Class信息,也包括一些运行时常量池信息包 ...