1. 协议小结:HTTP协议与TCP/IP协议

现代Web应用开发的基础是HTTP协议,那么HTTP协议与我们熟知的TCP/IP协议有什么关系呢?

这个要从网络通信模型说起,简单的说,计算机通信就像两个人在互相交流,怎样才能互相听懂呢?很简单,就是使用一致的语言和表达方式。

计算机之间通信的语言就是网络协议。网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。大多数网络都采用分层的体系结构,比如传统的开放式系统互连参考模型(OSI)中,定义了7个层次的模型,从底到上依次为:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。一台设备上的第 n层与另一台设备上的第n层进行通信的规则就是第n层协议。在网络的各层中存在着许多协议,接收方和发送方同层的协议必须一致,否则一方将无法识别另一方发出的信息。网络协议使网络上各种设备能够相互交换信息。常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议等。

常见的3种协议各有不同特点,也就导致了有不同的适用范围。最适合使用在Internet上的就是TCP/IP 协议。该协议系统并没有使用传统的7层,而是提出了简化的4层模型,从底到上依次为:网络接口层,网络层,传输层,应用层。同样的,只有为每一层定义好交流的协议,网络中的计算机之间才能互相通信。例如:网络层的IP协义,传输层的FTP,UDP,TCP协议等,应用层的HTTP,SMTP,POP3,FTP,TELNET等协议。

HTTP协议是一个叫超文本传输协议的应用层协议,是提供网页服务的协议。没有HTTP 协议是不能浏览网页的,但是其他的像邮件服务(只要协议在)都还是正常的。

2. 请求过程:HTTP请求

我们在浏览器中访问网站,与服务器进行交互都是通过HTTP请求发出的。当你点击一个连接时,浏览器首先找到站点的IP地址(通过DNS来实现)。在找到IP地址后建立TCP连接,连接建立后我们就可以发送请求了。每个交互都会转化成相应的HTTP请求,最常用的如GET(第一次请求页面),HEAD,POST(附带参数,请求页面),PUT等等。转化后的HTTP请求是有一定格式的,这个有兴趣的可以参考相应的HTTP请求格式说明。

服务器处理完请求后,会返回HTTP响应给客户端并断开连接,这个响应同样包含了很多的信息。浏览器收到响应以后,解析该响应并显示在浏览器中。响应内容中最有用的就是响应的状态(数字表示,如200表示成功,404表示没找到页面等)和返回请求的各种文本(如页面HTML,CSS文件,JavaScript文件等等)。

3. HTML语言

浏览器从服务器获得到HTML后,就负责解释并展现HTML表示的内容。HTML代表超文本标记语言,其最初的目的就是格式化文本,方便浏览器解释,并展示给客户端。但是随着网络的发展,网络传输和显示的内容也日渐丰富,页面不再只包括静态的图片和文字,而是包括了列表,选项,交互等内容。扩充后的HTML提供了更为丰富的标签。其中最突出的就是<form>表单,它是应用程序与用户进行交互的前提。<form>表单提示浏览器,这个标签与</form>标签之间的内容会返回给服务器。表单的数据会被“投递”给服务器处理,这个过程就是回发。

典型的HTTP请求通常就是先进行GET获取,再进行POST投递 - 前者获取最初的文档,后者用于在必要的时候将数据返回给服务器,进行更为复杂的计算和处理。

直接使用HTML开发无疑是很麻烦的,为了更好的完成现代动态Web开发,不同的公司提供了不同的运行环境和开发工具,微软提供的就是ASP.NET。它提供了很多集成的对象,简化了开发的难度。但是还是有很多的问题不能很好的解决。比如HTTP是无状态的,如何保持页面POST前后的状态,实在是一个困难的问题。

4. Web开发思想

从上面的分析我们可以看到,归根结底,Web开发无非是要处理两大问题:

(1). 在无连接的HTTP协议上通过HTML管理用户的界面

(2). 在无状态的HTTP协议上管理应用程序的状态。

虽然有像ASP这样的框架出现了,使得Web的开发更加简单,但是开发者仍然要自行开发许多的“标准”功能,例如安全系统,管理UI状态,数据访问等等。所有这一切促使了更高级,更智能的像ASP.NET这样的编程框架的产生。

了解了这个基本问题,以及让开发者开发更快速,更简单这样最直接的目的,我们可以想象,具体的开发框架必定会继续向前发展,不断推陈出新,并提供更加完整,更加智能的功能。

当然了,HTML5中WebSocket的出现已经引发了有连接的状态,这个在前面的文章中已经提及了,就不多说了。

JavaScript大杂烩0 - WEB基础知识的更多相关文章

  1. Web基础知识和技术

    WEB是一个外延广泛的概念,不单单指网站,乌徒帮专注拥有WEB界面的网站开发,帮助初学者或已经进入开发的朋友们提供参考讨论平台,然而并不一定能将所有的WEB知识讲全讲透,只是能满足初涉者的建站需求,能 ...

  2. Python全栈开发之17、tornado和web基础知识

    一.web基础知识 学习web框架之前,先来看一下web基础知识,首先要明白其本质就是socket,用户对应一个socket客户端,但是如果从socket开始开发web应用程序那么效率太了,正确的做法 ...

  3. day29—JavaScript中DOM的基础知识应用

    转行学开发,代码100天——2018-04-14 JavaScript中DOM操作基础知识即对DOM元素进行增删改操作.主要表现与HTML元素的操作,以及对CSS样式的操作.其主要应用知识如下图: 通 ...

  4. javascript中BOM部分基础知识总结

    一.什么是BOM      BOM(Browser Object Document)即浏览器对象模型.      BOM提供了独立于内容 而与浏览器窗口进行交互的对象:      由于BOM主要用于管 ...

  5. JavaScript中BOM的基础知识总结

    一.什么是BOM      BOM(Browser Object Model)即浏览器对象模型.      BOM提供了独立于内容 而与浏览器窗口进行交互的对象:      由于BOM主要用于管理窗口 ...

  6. Vue 2.0入门基础知识之全局API

    3.全局API 3-1. Vue.directive 自定义指令 Vue.directive用于自定义全局的指令 实例如下: <body> <div id="app&quo ...

  7. web基础知识,

    # web基础 网上冲浪 surfing the Internet weibo.com 域名,主机名,微博服务器的地址名 当用户在地址栏输入一个URL(uniform resource,locator ...

  8. web基础知识汇总

    HTML&XML 1.JavaWeb的概述 A: 什么是Web----->就是网页或者网站 B: 什么是JavaWeb----->就是使用java语言做web C: 浏览器访问网站 ...

  9. WEB 基础知识(一)

    1. 系统架构 1.1 B/S系统架构 1.2 C/S系统架构 1.3 对比与区别 1.3.1 概述 C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过 ...

随机推荐

  1. js学习笔记----JavaScript中DOM扩展的那些事

    什么都不说,先上总结的图~   Selectors API(选择符API) querySelector()方法 接收一个css选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null ...

  2. 理解 Python 的执行方式,与字节码 bytecode 玩耍 (上)

    这里有个博客讲 Python 内部机制,已经有一些中文翻译. 可能因为我用的Python 3.5,例子跑起来有些不一样. 此外,我又查了其他一些参考资料,总结如下: Python 的执行方式 先看一个 ...

  3. 安装Elasticsearch中Head插件并使用

    基础环境 Elasticsearch集群搭建请参考前一篇文章http://www.cnblogs.com/aubin/p/8012840.html 系统 节点名 IP 软件版本 CentOS7.3 e ...

  4. Java访问文件夹中文件的递归遍历代码Demo

    上代码: import java.io.File; /* * 需求:对指定目录进行所有内容的列出(包含子目录中的内容) * 也可以理解为 深度遍历. */ public class FindAllFi ...

  5. myslide 插件开发知识点总结和 css3 动画性能问题的研究

    myslide 插件开发知识点总结和 css3 动画性能问题的研究 这篇文章主要是总结最近开发过程中遇到的问题.有几个问题又是不容易发现原因的问题,但是最后的结果又是很简单的. 1.手机端的 slid ...

  6. 关于 Nginx 配置 WebSocket 400 问题

    今天把项目升级了 asp.net core 到 2.1 的版本,使用了 signalr  的功能,由于阿里云不支持 websocket 协议,所以使用了 nginx 代理方式来解决,后续就报了一个登陆 ...

  7. Java NIO中的通道Channel(一)通道基础

    什么是通道Channel 这个说实话挺难定义的,有点抽象,不过我们可以根据它的用途来理解: 通道主要用于传输数据,从缓冲区的一侧传到另一侧的实体(如文件.套接字...),反之亦然: 通道是访问IO服务 ...

  8. Angular2入门:TypeScript的类型 - 数组解构

  9. Linux卸载搭建环境

    本章内容 卸载Apache PHP MySQL 卸载Apache 查看apache安装版本 $ apachectl -v 查看安装httpd相关软件包(红色部分) sudo yum list inst ...

  10. MVC四大筛选器—ActionFilter&ResultedFilter

    AuthorizeFilter筛选器 在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向 ...