本节主要讲解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. Animation动画

    Animation:  1,AlphaAnimation, 透明度动画, 2, RotateAnimation, 旋转动画, 3,ScaleAnimation, 缩放动画 4,TranslateAni ...

  2. CentOS 7 安装配置 NFS

    CentOS 7  安装配置 NFS 环境 nps 192.168.1.97 client 192.168.1.98 一.yum 安装 yum -y install nfs-utils rpcbind ...

  3. PHP header使用

    header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端.标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头与 HT ...

  4. new sun.misc.BASE64Encoder()报错找不到jar包

    解决方案1(推荐): 只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了. 解决方案2: W ...

  5. STM8建立IAR工程

    STM8是意法半导体公司出的增强型八位单片机,性能比51单片机强大,而且价格便宜,在商业应用中很受欢迎 在STM8的开发工程中主要有两种开发工具链.第一是使用IAR开发环境,第二十使用cosmic+s ...

  6. 编译时.test文件报错无法解决的方法,关闭test编译

    有几次遇到从网上下载到的iOS开源代码编译报错,报错位置为Test Target的源文件,我就挺奇怪我又没做测试为啥会编译Test Target的源文件,之前的暴力解决方法是把Test Target直 ...

  7. Python3基础 pop() 删除 键为指定值的项

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  8. 用编程的方式定义UI界面

    package com.example.administrator.test_hello_world; import android.app.Activity; import android.os.B ...

  9. css3 翻牌效果

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...

  10. MySQL动态添删改列字段

    动态增加列字段: ); 动态删除列字段: alter table TableName drop column field_id; 动态修改列字段: alter table TableName chan ...