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. Java程序员必须掌握的常用Linux命令。

    Java程序员也是半个运维了,在日常开发中经常会接触到Linux环境操作.小公司的开发人员甚至是兼了全运维的工作,下面整理了一些常用的Linux操作命令. Linux常用指令 ls 显示文件或目录 - ...

  2. [原创]MOF提权下载者代码

    0x001 网上的mof提权 调用的是js执行添加用户 而且有个缺陷 还不能一步到位...目标3389也连不上...也不知道上面安装了什么软件...毛然添加用户也不好比如有个类似狗之类的拦截添加用户 ...

  3. python之getpass模块使用

    我们登入linux时,输入密码是什么都不显示的,在python中也可以这样做,那就是getpass模块(在pycharm中无法使用) getpass模块中包含几个比较实用的功能: 1.getpass ...

  4. C# winform嵌入unity3D

    最近做项目需要winform嵌入unity的功能,由于完全没接触过这类嵌入的于是在网上搜,有一种方法是UnityWebPlayer插件,也开始琢磨了一段时间,不过一会发现在5.4版本以后这个东西就被淘 ...

  5. Django--Session 操作

    Session Session的由来 Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要 ...

  6. tcp 三次握手 四次挥手

    TCP协议中的三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次挥手. 三次握手,建立连接 首先Client发送连接请求报文,Server端接收连接后回复ACK报文,并为这次连接 ...

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

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

  8. js a标签 + ajax 多参数穿参

    <span onclick="return haoping('{$row['jv_id']}','1')"> function haoping(id,type){ $. ...

  9. MyBatis从入门到放弃三:一对一关联查询

    前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是使用association属性和resultM ...

  10. asp.net通过后台代码给前台设置css样式,下拉列表在js中的取值

    后台根据不同的用户登陆隐藏或显示前台div标签 前台: 将div声明成服务器端控件 <div id="div1" runat="server">.. ...