#3.1 Web工作方式

我们平时浏览网页的时候，都是怎么样的一个过程呢？打开浏览器，输入网页，然后就出来了内容。那么这个底层到底做了一些什么东西？

这个过程技术上其实可以这样来描述：浏览器是一个客户端，然后URL定位服务器的位置(URL域名通过DNS解析回来服务器所在的IP)，然后底层通过http协议与服务器之间进行通信。

![](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-text：服务器发送信息的类型
        date：发送时间
        server：服务器类型
 - 消息体：服务器发送给客户端的页面内容

![](images/3.1.web.png?raw=true)

上面这张图我们可以了解到整个的通讯过程，同时细心的读者是否注意到了一点，一个URL请求但是左边栏里面为什么会有那么多的资源请求。

这个就是浏览器的功能，第一次请求url，服务器端返回的是html页面，然后浏览器开始渲染html，让解析到img里面的src资源、css资源、js资源，浏览器就会自动发起http请求，把需要的资源从服务器请求回来，然后浏览器就会宣布渲染出来，这样就是完整展现在我们面前的一个网页了。

所以我们做的网页在优化方面有一项是减少http请求次数，就是把尽量多的css和js合并在一起，尽量做到少的http请求。

## links
   * [目录](<preface.md>)
   * 上一节: [Web基础](<3.md>)
   * 下一节: [GO搭建一个web服务器](<3.2.md>)

## LastModified 
   * $Id$