没想到(我的笔顺正确写法顺序怎么写)一年级上册生字笔顺,我的Java Web之路7 - HTTP和HTML,java保存网页代码,
目录
介绍访问网站浏览器URL域名系统 - DNS超文本传输协议 - HTTP网页 - HTMLCS架构和BS架构HTTP服务器、Web服务器、Web容器、Servlet容器总结介绍
上篇介绍了Web的基础,即计算机网络及其协议,目前TCP/IP协议族是互联网协议的事实标准。Web特指基于网页和HTTP等相关技术的计算机信息处理系统,所以一旦提到Web浏览器、Web服务器、Web容器、Web程序、Web应用、Web Service等等,那么肯定就是基于网页和HTTP等相关技术的东西了。由于Web大行其道,有时候互联网就是指Web(万维网)。
Web其实最早是由欧洲核子研究组织的蒂姆博纳斯李博士为研究者们共享知识而提出来的,最基本的理念就是各个文档之间相互关联形成超文本(HyperText),这就是俗称的网页,而传输网页的通信规范和约定就是超文本传输协议(HyperText Transfer Protocol,简称HTTP)。
我们以后是要学习怎么用Java语言来开发Web应用,所以网页和HTTP必须要有一定的了解。
访问网站
在你的计算机上运行浏览器(程序/软件),目前主流的浏览器有微软的IE、谷歌的Chrome、开源的FireFox。在浏览器的地址栏上输入一个网址,比如:http://www.baidu.com,然后敲击回车键。可以看到,我们的浏览器打开了百度的首页。在百度首页中央的输入框中你可以输入若干关键字(目前还能拖入图片),比如,输入“Java Web”点击右边的“百度一下”按钮。这时我们可以看到,首页变成了一项一项排好序的搜索结果,你可以用鼠标点击任何一个结果,这就是超链接,就能获取到与关键字相关的其他网页了。这就是访问一个网站的主要流程,从中可以看到必须有三样东西:
浏览器(程序/软件),一般安装在你的计算机上;网站的网址,这就是常说的URL(英文全称是Uniform Resource Locator,直译为统一资源定位符);网站:本质上也是计算机运行的程序,这就是HTTP服务器或者称为Web服务器(事实上网站背后除了HTTP服务器,还有众多后台程序,比如最重要的数据库服务器,就是提供数据的存储和访问的),只不过可能是由很多台计算机运行它,因为一台计算机不足以应对大量用户同时访问。其实网站不仅仅可以为人类提供数据/信息(这就叫人机界面、人机接口、人机交互),它还可以为其他机器上运行的程序提供数据/信息(这就是应用程序接口,即API,是程序与程序之间的交互)。
浏览器
这个就不多介绍了,但也有很多点:
刷新和回退编码问题缓存问题Cookie开发者工具的使用URL
URL通常有以下的形式(更复杂的暂且不提):
http://www.xxx.com:80/dir/resource.htm?queryKey1=value1&queryKey2=value2http://:这是采用的协议;www.xxx.com:网站的服务器地址,通常是域名,也可以是IP地址;80:网站的服务器端口号,通常是80,与服务器地址之间用冒号分隔;dir/resource.htm:你所请求的资源,通常是网页,后缀通常是htm、html、jsp、php、asp等等(但现在也可以是图片、视频、音频、css、javascript、甚至只是一个抽象化的服务,这些都被视为资源),可以把它想象成是访问本地的文件一样,有路径和文件名,与服务器端口号之间用正斜杠分隔;queryKey1=value1&queryKey2=value2:这是需要提供给服务器的一些查询参数,参数名和参数值之间用等号,第一个参数与资源之间用问号分隔,各个参数之间用 & 分隔。域名系统 - DNS
由于IP地址不容易记忆,于是人们又发明了域名系统(Domain Name System,简称DNS)。
简而言之,DNS就是为了帮助人们把域名翻译成IP地址的系统,所以我们才可以在URL中用容易记忆的域名来代替IP地址。
这样,浏览器在访问网站时,首先请求DNS将URL中的域名转换为IP地址,然后再用IP地址来构建IP报文发到互联网,互联网会根据IP地址把你的请求转发到该网站。一般你的计算机也会把使用过的域名缓存起来,这样就不用每次都要请求DNS来转换了。
与DNS通信的协议就是DNS协议,它也属于应用层的协议。
在你的计算机上可以配置DNS服务器的IP地址。
超文本传输协议 - HTTP
前面所介绍的都是用户能看得到的,而HTTP实际上是用户看不到的。上篇已经介绍过,HTTP是属于应用层的协议,是基于TCP的,实际上可以理解为浏览器和HTTP服务器之间交流的语言。
首先,HTTP是文本格式的,就是说它的报文内容都是字符(本质上计算机里的数据都是二进制的,只不过文本格式的数据已经由计算机转换成字符显示给我们而已)。
其次,HTTP协议规定一次通信必须由浏览器发起请求,由HTTP服务器返回响应,属于请求-响应模式。而HTTP是基于TCP的,TCP又是面向连接的,所以浏览器必须向HTTP服务器发起连接,这样就必须知道HTTP服务器的IP地址和端口,所以URL里面就包含有这两项。
最后,HTTP协议是无状态的。这是什么意思呢?就是说浏览器发送给HTTP服务器的各个请求之间在协议层面上是相互独立的,即协议不提供各个请求之间相互关联的技术和手段,需要由其他技术比如Cookie或者HTTP服务器端的Web应用程序来提供状态维护。最常见的是用户登录某网站之后,后续的请求即处于用户登录状态下,但HTTP协议并不维护此关系,由其他技术来维护。
我们可以使用抓包工具抓取HTTP报文来观察其格式,Wireshark就是一款不错的抓包工具,可以到其官网(
https://www.wireshark.org/)进行下载安装,在此不赘述。下图抓取的是我访问新浪网的请求包:
可以看到HTTP请求包含四个部分:
第一行:是请求行,由HTTP方法(这里是GET)、URI(这里是 / )、HTTP协议版本(这里是HTTP/1.1)、回车换行符组成;接下来若干行直到一个空行之间:是请求的首部,可以有若干个首部,每一个首部都是名字、冒号、值和回车换行符;空行:只有回车换行符;剩下的:是请求体(这里并没有)。HTTP方法最常用的是:
GET:就是指我要获取某个资源,上图是 / 这个资源,表示是新浪官网首页的网页;POST:主要的目的是为了传输实体,就是说我要把某个新建的实体上传到HTTP服务器。其他方法暂时不讨论,以后我们就可以直接说GET方法、GET请求、POST方法、POST请求了。
首部部分也暂时不讨论,主要就是为了浏览器与HTTP服务器之间的某些信息的协商,比如我接收什么编码格式的资源,连接的保持、缓存的控制、内容的长度等;
请求体就是用户数据了。
下图看对应的响应包:
可以看到HTTP响应也包含四个部分:
第一行:是状态行,有HTTP协议版本(这里与请求行里的一致)、状态码(这里是200,表示请求被服务器成功处理了)、原因短语(这里是OK)、回车换行符;首部部分:与请求报文里的类似;空行:只有回车换行符;响应体:这里实际上就是一个网页,网页的内容也可以明确看到是HTML的内容。这里我们要记住一些常用的状态码,方便问题排查:
400 Bad Request:表示请求报文有问题;404 Not Found:表示服务器上没有所要请求的资源;500 Internal Server Error:表示服务器端执行请求时发生了某些错误。HTTP协议就暂时介绍这么多,下面再简单介绍一下网页。
网页 - HTML
所谓网页,本质上就是一个文本文件,只不过这个文件是具有某种格式的,这种格式就是HTML(HyperText Markup Language,直译为超文本标记语言)格式,只要掌握了这种格式,你就可以自己编写网页了。
比如简单的一个网页就是:
<html><head></head><body><h1>你好,世界!</h1></body></html>用文本编辑器新建一个文件,敲入以上的代码(也可以称为代码哦,只不过这个代码是由浏览器来解释的),保存为文件名是“我的第一个网页.html”的文件。然后在浏览器里面打开这个文件(直接拖进浏览器即可),可以看到:
网页之所以叫超文本,原因在于网页内可以可以包含图片、视频、链接,音乐、甚至程序等非文字元素。网页的基本格式就是类似上面的。
网页的基本元素就是标记或者叫标签,就是由尖括号括起来的东西,通常都是成对的,一个开始一个结束,结束的带有斜杠,比如上面的html标签是<html>和</html>、head标签是<head>和</head>,body标签是<body>和</body>。这三个是必须要有的标签,然后在标签里面嵌入你的数据,或者其他标签。标签以及标签内的数据加起来就叫一个元素。
更详细的介绍可以参考其他书籍或网站。W3Cschool是一个不错的学习网站。
所谓Web开发,包括前端和后端,前端主要就是指浏览器这一端的技术,主要包括:HTML、CSS和JavaScript等。
HTML:主要是负责数据的结构、框架或骨架,表示哪些数据是标题啊、主体啊、导航啊、链接啊、表格啊、段落啊、图片啊、音频、代码啊等。简而言之,就是表示数据是什么。CSS:主要是负责控制数据的样式,所以其英文全称就是Cascading Style Sheets(直译为层叠样式表),就是数据呈现成什么样子,比如字体啊、大小啊、颜色啊、前景啊、背景啊之类的。简而言之,就是表示数据什么样?JavaScript:又是一门语言,也是由浏览器来解释运行,主要是负责动态行为,比如跟用户的交互、跟服务器的交互,事件的捕捉,网页的动态变化等。CS架构和BS架构
前面介绍了Web相关的基本内容,通过介绍可以看出对用户来说Web的组成最核心的就是浏览器和网站。它们遵循请求-响应模式:
浏览器向某个网站发起请求;网站接收并执行该请求;网站把执行结果返回给浏览器;浏览器接收响应并呈现。这种模式具有普遍性,不管是在现实生活中,或在程序世界里都经常能看到。发起请求的一方就叫客户端(Client),执行请求来提供某种服务的一方就叫服务器(Server),所以人们把这种模式就叫做CS架构。程序世界里常见的有FTP服务器和FTP客户端、邮件服务器和邮件客户端等等。
再后来,由于Web技术的流行和发展,很多应用都在Web上来实现,比如可以用浏览器来实现文件的上传和下载、邮件的收发等等。这样人们不用专门安装某个应用的客户端就可以使用该应用,只需要有浏览器即可。所以人们又把这种基于浏览器(Browser)和HTTP服务器(Server)来实现某种应用的模式就叫做BS架构。
HTTP服务器、Web服务器、Web容器、Servlet容器
现在知道了网站就是由HTTP服务器构建的,而服务器这个词其实既可以指硬件,又可以指软件(或程序),不过一台硬件服务器上通常只会运行一种应用的服务器程序(不考虑虚拟化技术),这是为了性能和高可用的考虑。所以HTTP服务器既可以指运行HTTP服务器软件的那台计算机,也可以指HTTP服务器软件(程序)。我们可以通过上下文来判断是指哪个。
HTTP客户端也可以叫Web客户端。浏览器就是Web客户端,很多手机上的APP也实现或内嵌了HTTP客户端。各种编程语言实现的用于访问HTTP服务器的函数、接口或类也是一种HTTP客户端,只不过它们是由开发人员来使用的。
HTTP服务器也可叫Web服务器或WWW服务器,现代的Web服务器已经不仅仅是提供静态的网页,通常还提供一个开发框架,在这个框架之下,开发人员能够根据需求开发能够动态生成网页并把这个网页返回给浏览器的程序,这些程序能被Web服务器加载、管理和运行。这种Web服务器就是Web容器,又可以叫做Web应用服务器、Web应用容器。就是说Web容器肯定也是Web服务器。
之所以叫容器,我想是因为它能运行基于其框架开发的程序。从这个意义上说,所谓容器,就是提供了一系列规范或接口的软件,它能够装载、管理、调用或运行按照该规范或接口所开发的组件,比如Servlet/JSP容器、Spring IoC容器、Docker容器,甚至操作系统都可以看作一个容器。
目前流行的Web服务器有Apache、Nginx、IIS、WebSphere、WebLogic、JBoss、Tomcat、Netty等等。其中Tomcat和Netty就是我们以后要用来进行Java Web开发的Web容器。
Java的Web开发的基础是Servlet和JSP技术/规范/标准,而Tomcat实现了这些技术,所以Tomcat又可以叫做Servlet容器或JSP容器。以后再介绍Servlet和JSP,现在不用考虑它们是什么,其实它们就是Java提供的一个开发框架而已。
随着技术的发展,在Web或HTTP的基础上又出现了SOA(Service-Oriented Architecture,直译为面向服务架构)、Web Service技术、微服务架构、REST架构等。当然,这些技术还使用了xml和json等技术,这两种技术主要聚焦于数据内容的表示、存储、传输和交换。这些都咱不讨论。
总结
任何一种技术的出现总是为了解决某个问题或实现某个目标而出现的,这就是万物皆有源,事出皆有因。而Web就是源于希望更方便的知识共享。任何一种涉及到两端交互的技术必须要有通信协议。通信协议可以也应该分层,每一层具有专一的职责。比如IP负责路由、TCP负责端到端的可靠通信、HTTP负责超文本数据的传输、Web Service的SOAP协议又负责Web服务的封装和解封。HTML是一种标记语言,xml也是。所谓标记语言,就是使用某种形式的标签来描述数据的元信息。后续我们可能经常用到xml格式的配置文件。我们要让自己擅于创造新概念。当然,新概念必须是在问题的不断思考、经验的不断总结、规律的不断发现、实践的不断验证的基础上提出的。比如,CS架构、BS架构、Servlet技术、SOA架构、微服务、REST、json等等。每一个概念就对应一种技术,每一种技术就解决一两个关键问题。本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据