From fbd485ab98afb38c5fe9018a92341b7b59ecc070 Mon Sep 17 00:00:00 2001 From: astaxie Date: Tue, 4 Sep 2012 16:22:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=99=E4=BA=86=E7=AC=AC=E4=B8=80=E8=8A=82?= =?UTF-8?q?=EF=BC=8Cweb=E5=B7=A5=E4=BD=9C=E5=8E=9F=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3.1.md | 78 +++++++++++++++++++++++++++++++++++--------- images/3.1.web2.png | Bin 0 -> 32853 bytes 2 files changed, 62 insertions(+), 16 deletions(-) create mode 100644 images/3.1.web2.png diff --git a/3.1.md b/3.1.md index bdfbcfd3..404c78c4 100644 --- a/3.1.md +++ b/3.1.md @@ -1,17 +1,63 @@ -#3.1 Web工作方式 - -##http协议 - -##web服务器 - -##web工作原理 - -![](images/3.1.web.png?raw=true) - -## links - * [目录]() - * 上一章: [Web基础](<3.md>) - * 下一节: [GO搭建一个web服务器](<3.2.md>) - -## LastModified +#3.1 Web工作方式 + +我们平时浏览网页的时候,都是怎么样的一个过程呢?打开浏览器,输入网页,然后就出来了内容。那么这个底层到底做了一些什么东西? + +这个过程技术上其实可以这样来描述:浏览器是一个客户端,然后URL定位服务器的位置(URL域名通过DNS解析回来服务器所在的IP),然后底层通过http协议与服务器之间进行通信。 + +![](images/3.1.web2.png?raw=true) + + 一个Web服务器也被称为HTTP服务器,它通过HTTP协议与客户端通信。这个客户端通常指的是Web浏览器(手机端客户端其实内部也是浏览器实现)。 + +Web服务器的工作原理简单的可以归纳为: + +- 客户机连接服务器,通过socket建立连接 +- 客户端向服务器发送请求,http协议包 +- 服务器向客户机发送应答,http协议包 +- 客户机与服务器断开。 + +一个简单的事务处理事件就是这样实现的,看起来不简单,做起来其实也是挺简单的,需要注意的是客户机与服务器直接的通信是非连接的,也就是当服务器发送了应答后就与客户机断开连接,等待下一次请求。 + + +##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 + * [目录]() + * 上一章: [Web基础](<3.md>) + * 下一节: [GO搭建一个web服务器](<3.2.md>) + +## LastModified * $Id$ \ No newline at end of file diff --git a/images/3.1.web2.png b/images/3.1.web2.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e470a2348f5dbac7109880f7c42d8c60af068f GIT binary patch literal 32853 zcmcHhWk8hQ7c~qIB1j83G$;rXigc$83@~&_h;(;%DGibXk^<6FBHbWe(j_1u-AH#l zhu{Cc-w*HS=RqZgnQP8<&e?mfwe~uODJe+dVv%D(AP`)Hw1f%-^1vGcK^et(03Nw; z_;~*X-B4Ca0&;i%=WA1b9C!rNURuiu0>SIJ|A+GV6&?iyLJdJkh^e`M*_rclk3UJ{ zz5VC&#fgI-Mo2IBRpynnQPl(DzG0tz0~-zd&jGbnnAI~Pwyf>ZpZn|g+0=Yy>a8$! z8gzW1u-BQPESXl!iMRELdQA)%uFio577_s)>@^+?xjMeNIS86fP3~RcN|r+oZ7&_B z)UBs`HFJh}44ugtL=b?%LFk_ePoUj@V~UNT1HMqpQ#+$TARo9s4&OgK`Vd9}zDPg$ z|Mr)^3s@i!CUNC)H4>DFXI<`vpCCVT0*28zv91@>^ZsH#NqX_sgY5scfh0K}SWzNr zF{ec2nyHt}6J+Ji9XmpY&>(UzHND6_L_CR$+VUTr`PN1H*zMi5i$1~t?o&OL2jOK)C;i;A-#43&y62t#h z5&SN<5B&o+mXwU zyZ*@YS!4MVfB5x?TL(g~A@`hqXY$1(skoG0tNNG*h%w){%?E6ChQWLmvmd*;%FN;m zg!Yb5AQtxnNHHJN5X|9Ut2`*-C-Qqh#{wb4xE*@P`G{`d7)?}=P4-O&OA-ys`&zaM zIM^ZtZ#MibN=r&g%F9O=?d4p=AQ1hB`1ShaN1jbyXM3+%S*0+lDl6q&9PWR?7K0_H z5rRkMD3Ipb(DePg?a9`Js?L{VGWoN0`?wDTa<3lf%ZSO7$cf6!%UewrI|!sH7 z(!@Qf$xwp7C<}Kcl7hGJ zV^-=EOGqBU~5Tg1D_F)zsAZ(gveNE*aw*?4%05ee2O@ zGmqYxu2_%combM1CV+9tw_L2HiryYXd!*+x%9Kv&HM%SNa5Xo7T1s%1Cxj-?=$kxI4}Bz|T#(tgwwi!GA&?hdDDNuMndYc8!_7&>s!YAY&xVQ79a6ZEbBh z94;#>>*8_}VIe1p5!Aj|T+HmKoj;Z)>gRi~)OnCUZC&kmGv#-4TGJAVZ>Uw>)YMd2 z8INP6o`Lq?B)8th>2G;7>E@4V>FDUZeY@%`&^?zVw9F~#6Tsdti(7LWf2tqs$490s z1W`e=tk)0UU1(X@bWTW2YuO%fm11a2KyM8Myw6w7a>Oh110-Kn+q*3?Z>F(^VtDuEqlpYGm+oo*h zy6Bszb2X3;T6i#$9C1}u)wgdycQ1e3(}w)CMjz@?yzg_|YVe15`RW4jS1n(`lL}Fr1Wu^DQC%rFQOAyE#Nw7_s z@>~}t$H$BHT6_yXp+X>J4^tAw`Z}B!U`r1mZ*agmJ;=GLZfx|%YOqU9Ng2J%0vDwp zZp5MA8qO3~$RD$<$#)fqnc9A#y%n{o^&@|W3r$u$Knv`%2t8HRxUo&=y7vnCoU5q^ zCT3=Kzkg)r<(bB>YpAJF3c0gYnSfL??!R04)4j5)ia%|zzP`TjzYhnyF5ac0-@B(H zU%*D4|NWZ}(FvZb_EAKKjmPrrHSAk%t_cX#I1-nm^&y5?{1;|b@2o5>sU1)t$&bM* z;V69JQ-1r_q-Hiv!OU|qfn46CCNGbEHF6f*0NK|(Y{}KOAZ(C}KrGn{q~YS?T4)bA zboAN6;beqwGq22dv`uzFx>gp<9Nc*Z|F8?APmB2U{%b#rU*u=zy1v4H5B8L&k zA|1?}zH{K-voq^_n)+10`CD=EuT5uxw86m7Izl9Z2as8eg73FaX;H@CiC;3l${-9a`cU1#^p zTw&o$>GzPIm8jf0`(&k4+s*<-MMY@}>nj7z^5(U*Z!KOmfT2C}IaZ$OLx(^L9{AM% zt-rZCo83K4NJ!vvTd=&c1yK`Hq+QgWgwU|{{O?(4nS%av4Q|nP-o;srsXR6u$#T9e zezi_1si{oio@aAz%h8X|vZ$!2`1$$o4xZf|xcQyAk+AB@>7pZ$;h#P∓obC@3f{ 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
    m&B8I=UUZT&ML~Mz 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 literal 0 HcmV?d00001