Files
build-web-application-with-…/3.1.md
2012-09-05 09:29:28 +08:00

64 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#3.1 Web工作方式
我们平时浏览网页的时候,打开浏览器,输入网址,按下回车键,然后就出来了内容。在这个看似简单的行为背后,到底隐藏了些什么呢?
上面这个普通的浏览过程底层其实是这样做的浏览器是一个客户端当你输入URL的时候首先浏览器会去请求DNS服务器通过DNS获取相应的域名对应的IP然后通过IP和服务器建立socket连接发送http请求信息服务器接收到请求信息之后定位请求的资源(如果是动态语言例如php、python、ruby之类的)那么服务器执行相应的逻辑之后返回http信息客户端接收到http信息开始渲染断开和服务器的socket链接。
![](images/3.1.web2.png?raw=true)
一个Web服务器也被称为HTTP服务器它通过HTTP协议与客户端通信。这个客户端通常指的是Web浏览器(手机端客户端其实内部也是浏览器实现)。
Web服务器的工作原理简单的可以归纳为
- 客户机通过socket建立到服务器的连接
- 客户端向服务器发送请求http协议包,请求转化成服务器对应的文档
- 服务器向客户机发送应答http协议包请求的如果包含有动态语言的部分那么动态语言把相应的数据结果返回给客户端
- 客户机与服务器断开。客户端解释HTML文档在客户端屏幕上显示结果。
一个简单的事务处理事件就是这样实现的,看起来很复杂,做起来其实是挺简单的,需要注意的是客户机与服务器之间的通信是非连接的,也就是当服务器发送了应答后就与客户机断开连接,等待下一次请求。
##HTTP协议
HTTP是一种让Web服务器与浏览器(客户端)通过Internet发送与接收数据的协议。它是一个请求、响应协议--客户端发出一个请求服务器响应这个请求。HTTP运用可靠的TCP连接通常用TCP的80端口。
在HTTP中客户端总是通过建立一个连接与发送一个HTTP请求来发起一个事务。服务器不能主动去与客户端联系也不能给客户端发出一个回调连接。客户端与服务器端都可以提前中断一个连接。例如当用一个浏览器下载一个文件时你可以通过点击“停止”键来中断文件的下载关闭与服务器的HTTP连接。http协议使Web服务器和浏览器可以通过Web交换数据。它是一种请求/响应协议即服务器等待并响应客户方请求。HTTP不维护与客户端的连接它使用可靠的TCP连接通常采用TCP的80端口。
因为HTTP协议是建立在TCP协议之上的因此TCP攻击一样会影响HTTP的通讯例如比较常见的一些攻击SYN Flood是当前最流行的DoS拒绝服务攻击与DdoS分布式拒绝服务攻击的方式之一这是一种利用TCP协议缺陷发送大量伪造的TCP连接请求从而使得被攻击方资源耗尽CPU满负荷或内存不足的攻击方式。
##HTTP请求信息(浏览器信息)
- 请求行GET/POST(流的组织(请求)方式) URL(地址+目录) 版本号
- 请求头:
Host:客户端IP和端口
User-Agent:浏览器信息
Accept客户端能接收的数据类型
Accept-encoding是否支持压缩的流
Accept-charset客户端字符编码集
- 空行:分割请求头和消息体
- 消息体:请求的参数
##HTTP响应信息(服务器信息)
- 状态行HTTP版本 服务器状态(比如404找不到...) 描述信息
- 响应头
Content-Type服务器发送信息的类型
Date发送时间
Server服务器类型
- 消息体:服务器发送给客户端的页面内容
![](images/3.1.web.png?raw=true)
上面这张图我们可以了解到整个的通讯过程同时细心的读者是否注意到了一点一个URL请求但是左边栏里面为什么会有那么多的资源请求。
这个就是浏览器的功能第一次请求url服务器端返回的是html页面然后浏览器开始渲染html当解析到src里面的img资源、css资源、js资源浏览器就会自动发起http请求把需要的资源从服务器请求回来然后浏览器就会宣布渲染出来这样就是完整展现在我们面前的一个网页了。
>网页优化方面有一项是减少http请求次数就是把尽量多的css和js合并在一起尽量做到少的http请求。
## links
* [目录](<preface.md>)
* 上一节: [Web基础](<3.md>)
* 下一节: [GO搭建一个web服务器](<3.2.md>)
## LastModified
* $Id$