From e2cb63fb26831f289918a102d5775f6e50eeea03 Mon Sep 17 00:00:00 2001 From: PinkR1ver <3180102330@zju.edu.cn> Date: Sat, 9 Mar 2024 16:50:03 +0800 Subject: [PATCH] Add note --- .../code_frame_learn/flask/MSGI.md | 54 ++++++++++++++++ .../python/python_decorator.md | 52 ++++++++++++++++ .../Pasted image 20240308151842.png | Bin 0 -> 6433 bytes .../Pasted image 20240308153643.png | Bin 0 -> 11968 bytes .../web/http/http_introduction.md | 58 ++++++++++++++++++ 5 files changed, 164 insertions(+) create mode 100644 content/computer_sci/coding_knowledge/python/python_decorator.md create mode 100644 content/computer_sci/web/http/attachments/Pasted image 20240308151842.png create mode 100644 content/computer_sci/web/http/attachments/Pasted image 20240308153643.png diff --git a/content/computer_sci/code_frame_learn/flask/MSGI.md b/content/computer_sci/code_frame_learn/flask/MSGI.md index 7f422810d..43a2c2e39 100644 --- a/content/computer_sci/code_frame_learn/flask/MSGI.md +++ b/content/computer_sci/code_frame_learn/flask/MSGI.md @@ -55,8 +55,62 @@ def application(environ, start_response): * environ:一个包含所有HTTP请求信息的`dict`对象; * start_response:一个发送HTTP响应的函数。 +在`application()`函数中,调用: + +```python +start_response('200 OK', [('Content-Type', 'text/html')]) +``` + +就发送了HTTP响应的Header,注意Header只能发送一次,也就是只能调用一次`start_response()`函数。`start_response()`函数接收两个参数,一个是HTTP响应码,一个是一组`list`表示的HTTP Header,每个Header用一个包含两个`str`的`tuple`表示。 + +通常情况下,都应该把`Content-Type`头发送给浏览器。其他很多常用的HTTP Header也应该发送。 + +然后,函数的返回值`b'
O2)v(QRy zzq4TkvC^FOeC%LNEU<;i7Kcy%Aa+pK9(1B>Wg<&0a;MQMd+xn+xT^KA%@+s#++XMF z4>tHUZ$U>=q=l=%Ki;1Jieo>!3ya2W^?29W81smnS#=&%3)S5$lw>Hw5} zhT38pxO#rQ2g>2bZ$M$#n?5}Ntex2a#9wz`J_D4=vH%9ddv3um0Ej&YR4xG_HI7b3 zsU!5l2PKdI#2qdJm4!3v&4DsKro|l88EUi(`zT6rXpA-_M-)6#7#|6B8xVo)=8R?g zFsk{ZN; OhbX7<(?{i9MIc}kSdTr@$udB{)EVl8psI-LHNxROEI zwj5Kcu@N!5Vh9?Jw7w|KC8zy?58{&^Q)sgoGI9-i<#)t=Fw0x$p+b_vnE)S!mEjLX zX9=!$cd%Fegg&3fJkVcg;B7d}wwRQIkt}@2b*Qg(qa$t|a$o=l(_rD9Be|rA5ti95 zL%GZT`kjg8nm+z2I6gU?4IU!XcISo{RaSH!3kr|1T4p!p4a>6N!G@RSsuCYAY7Iws z2hBB&B0j;Kpr#%y>ai0t$s&7lL@m7ZkGllTh04?ii&U{HW1BI{FN|AM_Wn|Tx!ZWl zF}<5vjB;!J9{y+_w1H=Q;VJZ-&Ve@mrtT2+8 mWNLMIK?Ec%OIUNUhvv;!ua&nEVGugfoI~i zmNHtS!{cMytPh7h*j4bCis1 OF{?_}S`_f*g%l@Q<1ZeBi7%ybVX|vsvhd zmU6qTOS2 $pvWQ=@oHEUFWd0`h4oa1l9gFHW0RQYOr_8U3a(h^|ad3qViI6 z`x@XJ-=X5M7(R=q7Ajva2 U17xqxwD>Er{DIAT z<%hi^iWNxhnyoz L`FZv?8Lnl2(Fd=`Y
Si{qV=(KI|HKINqwquK`zV zx65`ri^`a%Es`?tEfz?pAoOUC3S}k@rjVpHzI`Cu((3QVq~`=Bc$DK+m%6FNyTC5f zlKgN6u8))IdCC#~LLEkJD|}gKMhH`#zZMJ`l0W04JD_!3*9jWNwGr6%_#?|DQMvcF zSh%W=Uk)`PwQ6L@B(ldYhSjM!o)#Fi?)0c|BSD?oT{S$XKep3G6l-E`mFQP*NWX I%4f~ut1Q2 zIE(C;<-UWAE@sm5{5mV5((epO_?259=K8cj!bvtcVuB^eVqC&Z?nubeoI`xjz9;5E zDmd;5?eef~RGF$YW3m72(jwIjC;3{-Oxj>MIqEwxcvw(hjSBBsKI>jcQaA4uGdbL} zl3eK5M=A{&xlg~=Nu^G6p*Iq(h@|y|6OyCXhn=L{&ze^F9sjYcU;IRW&s^uAv)#q{ z$- Kuz8%QIE+UW#ENy=&&jE~a{9 zwUv4)*6FX+`d9iKe&I+`Ue}t1Pye)!RG?%V=6*jz+pL>r&xY&1V92>;keIa>;AZu{ zB$ODI{>GV|dr+c44YqDM0$G79Zq`@M+FA~qI^U&*&0k$F#II975$+FVlr3*8=;cOu zf14Y=4C3UFOf*cAl_o15)BKTGRhQUgK3EbAnsXeq2q*5FXMlUQk9*RkZ_E~*LL97f zB o` ze}dX~U_pwfy*Am+_H0_pd&3(0hR42%`J@KS+td##KZ)ACO;6_Sw3)4Feu==>&8KyB zAT_%rx;lmyTQjHm%7}wAuQN$17nWu;*2;JpH-*~D^mE(8et%HA2M_PGnMzoS(b_0H z)vd^0p)$0zo<* m6=kEr26D9@jOpgqQqGug=R=SjTNma}G>%of^%?qoy zv+t$*?I)t?UD{Mr@_a$Z04W7c>J}4a*!6o2+C)|g3X;^OiXe24gwrdL!19b@t6-m8 zuqT!lRrAG&zpr2 CWLcI zqL^Ciqr8CwSg7?TkkTG1R9^;|>cZm|OR-a*4P3!f+DE~VE5Ge=?_jod*NV~Fqq`6X z2w1a1P#AyA!r#Hw6$6!Q;C3F~d!Kp~N6B#XJnbvvn!W-pP6b+97CzP %egrV4fM!wJ!W^)~&Tg< d{^m?I>#EVe^XBitzvcqVfwbQ85n9)B=Q$vWpp6fWdK@t}>X8Yb05@j$3iJc%R zGmPXuzsHXoDLk+E0;&^jk|48!xFC-|&WY2DHO%}zZY9J0N+6ibi`q9Z&XG)wK*RPE z7|BS7GEf~SS2oJ*@2S{4ui{2<9%JjL-2Af|4JoV28#GO FQ+*#OBi$20L4uf78?}n(Dhs>$Gb6l|DK!Fsy3R!vHC}6bN-M$IF0Y` zwGQH}N~9=(A{z3S-G0@L{pqT-`uC6;Zb^Kx1J13Qn12?kCZi004Opn3d>Nd1aN&;6 zAKsoky2-xakUyGW*b8wV%cGe0#6L6o|5<$-9}d}H{kPav6m;Y>2-GJ1aOeAHu_GzV zOKY{ylvg#-vk)}GZVXA9X{pw-1@wlmUKE~l5o03FM(b{vLW3L7?*GuXc*4H?$VWhD zTD}05g$CP8Z~s%bK>V=~p?WtWi(&-m82|ZgRT8xOi Z2H%j);bwtU)7sg?uoBxuP-nudsgBvVtQgovesH`5q^YWOux?*- zZj9ucsN$PGD@lKTmWPlw{?cnot?6>2O4!wD@nJ&XefpIsyk2%5USpd}6h2(Qi`Tun z{58`VM{R3<;5yZ*2KNQhr8*6}4E}>xjDW65IJiG+i^8mrJY1zP8KI&%$S3zLa%42e zJ;~X_SStAQuzcKhCK4;ey1o89zv$t`*^`UDIJ@bXAw9uA2WRVi>v_v+v1>Z%5ki{y z(okiRC$3Hx*L0IKzL%ZTskP9T?k!GL{bQdtzSCK|HTLCO?R}nXnIy7qgB3GfpRrMp z_2=a&{JNKQ;J4?2&)Ov}PrNH>xor`Ss$a9>V64p&Pl~yTryh*J;-0P9Vw=|5#TEt- z__r&YvOEg9J%T<{?``N}OIw`}b5nztvxetMqne9O^&-uQH!IErwxl)YAY1~S_1F`I zJFt=aRNljRZnx2})OZb;My7^{#;-*$p}Sx{l@>2^XeQOGH!FQ>@vEjEY7RL_LJNJU z#8r8Rh?`a;_13&}xg@Dn))u`CCjqq~npEY6C6#=E{0r% qTSaFh&O23 z8X@WJm#m- Ix>5}2)zEGWeR@^(VreSGfvOZt4!3oinQa`eXjhu ztjNGWdZ*!DP>$jFn$?C7#HHd?anYF};f|CLHP2D$Js)R{}C9ura>3c+WLnBbz-7aC)$4#CY>V7)tZ{nuUJVW z%>OP%?tDCw;9u?Qh1NA=S#{XTBQNw}DM#(z<5_(4g#72lgN+>8;YN;!b37sk=(b6E z^Rgq)OIB{lj|LZ5kP9}|_@SDTpo!i8PDnO1TBNop)dRHv*xrCLwr&59^#Fp>VqQJA zKm1#7|5_vy$qut4MB0B{ySgwURj~K_3yj=_@t$o#a>^Y>#C95amapts{MZ-d*+rCk z9#>uamjO)m7(-<90ZvYItcid8luQzi*+bG*bfGYbl!mm4k>*Hy%)Z?>Zy9pdq>2CY zxGf+0`fOcTi~;j2B;w#zBpWGmclk(|ziMELnRe?l5(8(|XreFDG}X0=KPDmq;gOwg zi4|uUdm)J5nGX}fXPP-;^oOXVVPtj~p-h|}kT|O0v>gBmw5Si?p>hS@b6IQl;gOU{ zl3W#ySWD0Kf8ale+nYWMf$cN(bvcb6x17k<*pz=9leitjxgG!EuJrM3)8sCuyym=3 zV4(8-S>bn*1qo=ppOb!_@^OTsTV8;BIxKrAayxxr!9;;rXtUOj+p>%a zD#?t>fA~o1J~78zjDE4n*(fW}gIF7T8Mk-uphv?*-(Pv0k~KB{7Q`u!J0K%;$3Nos zHoZe0YjCm3Or5~KQPF=KZ`CyN0V||1cqg(G#~cw2ynO;r<9Z*liO}5%?$OgUN>n9j zttHctIa~5ciBt>z;KJZ%<&qCgcqC<$D2#fDZp1$i08+(zQdGzHH|xsEu0U(?!7+w$ zoa!-<5UP`W$e!bRI`gV+87?-vECE@UR;{A6OD~K=H|=WCq;|@4m}%f31-$dvw(7Vd z`ZH>&$wiNn$ZyuNGnL--MfANL^k(!$g(wczZ &O3cXdfR#!S9Y|(Wn0#Y*BHQziQ%w+_NNyPbaOQS6l!6M5nq7gAL)FHnISs zqATvL!2Mh!dta&%h!%eV emF|u1{rD0=r& m%srjaW5MY;rMjGq^b^HYN!vE* zyP2F%B1QY@iT<68M8Pt!B4#OTvsnn3$>wtX3hV%Gzn^E{V<$$FEop~sFsWC6#54Yg zwZU&LjaJ&=is89|460O50&G5VXEGYgu&XH)J;ofq;`$nCbKZL*iOqTz^7DHHW2we% z7Y^OYv-w>)#H${Zjy72a6llq|kb683;_b5~1hIaCqPmBrn|K!U6H-#&ovIt2&r52o z-c!U_Uc6+^^=@OtMrYP4UrvR;=Q7LSt&G;(DQ()Ej>a+ua**XXnCwf~8hGTw(E Axv?^bTVQmRDYkpB4Wfwce5&O?=D7?m*+0*dRod$^KQ>6Zg)Xv2H()rTJPeY#Ja_T zU$yL=o=ta7a>!vP&elb<#*=os#GD^jI9DnJB&%(%Noy1dTKS!_U{+`xD2flgMTQkm z>o6N3MdIC;@C4_*0rdk3YL7aJHd^(=n^Vq!Rp#_p$z$CSqh%MKDKRWKRYxoq@Q!m= z<;u6P(N2CW#}NMaxg?`f<0zVcm`;kP@8i?d*1b0~FW#p*u0wE}6%*V|D_N={gR=+8 z^dCK@%U7~?9C4=)wEiuk|I?Exx7-`^DDdkxvzAJJ=UD~W+WMzFhvsMY$0$|) P)XWx^wA|=rIHvgV6;-3laQBd%x_+^D}6h}Lu8skN+l|R-I#kR+k(X$ zjAVJiYmOf+E8+d^5<>k#W^I-eg^aVrC!pbo#tUFPxmBmVJ@p$-GAot?Wp{DHZv8A9 z2d*b #>*0vbir)5LhdtP}4<+$RLuJuy;V9d4Nf13~HiCmFaX%%? z*s(S9(Q}3Y%UkoZI^!R!T36NtU<=e>aAL$0)US4Q{IuXIOveAEk3oxu6{YDy@R{)t zWu-6aaeh`2H T?-oH}rSl?Ro`0I#BivD<(DumNz7dviDM|EUT&+rahrNoCXk zv^n(P!IZjsY!v10n)0oy-Mq~HU_jD7EU(!}-?5-%S+?Xz?X|NB$jmzA1Dash`;$B; z?TjYMFU}4f^0l3wG&0^WRqQt%TQCLQNHHZ5%%^#piBZ>}rpBY9m^`+Wf?}I%6y}_f z;U27Lp7GSHVy*st{B3NGsEyA!bbx)jDjv4}35P7~#18M!sV|#uAy|)Trbxcd`SKsC z_c<5`pI;}33cpU*jtZN~fOWFksY1Ib@skGy-&LZO=^@sbsuEuM-NsYk36NyPv{9xO zm-ACu*F;tJ=oIYUy~Y#ZM3IiCcZ6zCJ{BGdjsi)y`V(My{U?=J-YY-FoOQCg9V-!y zdSEXy3tMd)d02}7FDWc?3Ah-4=A4%IH~ic&;=o5>#?KYr$$k-%#^w30?3X%-z#66~ z+`*r`?ad*nl!SWk@`zz!*LAi;?t@gfJjw#3wQ+1soKAvlCD_o!x~tWTYM!uo$b0Jr zv)RktS}~kB2Qp`g6Y*%DIf?sL5TnE?2NN ygNycIo+m- zn(Wd2A>kc dX#zvd?m V^q9s{t7dcMHISYF;koRslA7Kqgp<%^~6c+B|SX z$WaPr8AD1}ChGXbBE@Fv=${W6rW04dDG+cepy0gQLdv#08HQX8TW wj82_GzF*I-t^E9Zw_auL;^aZywai {y&DxgcBucgTZ zTmY@cV26R8#K1%mGq5t7-@HOX&gn4@Ido^%y9~df>I ln2w zWhx! AYp#+ba05Y&;E#JjrU{XMW zYCD5>$tk`}1@I){jxnN59`O8Rf(;PjnxH$sz5rVRR8Yh;Eaj jI8 z((2@a!i#TVp+tbM)64%rSpnNQWX#y!{+GeHtF^>YLQUf_aGaP3^j$p4hw1^}YtmCq jjxuWr&{7NNq5i%V-sCbS@ec4ZoyGi$wQ;eb`{VxwHSC4L literal 0 HcmV?d00001 diff --git a/content/computer_sci/web/http/http_introduction.md b/content/computer_sci/web/http/http_introduction.md index 367164990..8b1a732f1 100644 --- a/content/computer_sci/web/http/http_introduction.md +++ b/content/computer_sci/web/http/http_introduction.md @@ -15,6 +15,64 @@ HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。 * `Network`显示浏览器和服务器的通信 * `Console` 用于debug的控制台,debug JS的运行 + + + +可以看出来,浏览器发送给谷歌服务器`GET`的请求。 + +`GET`表示一个读取请求,将从服务器获得网页数据,`/`表示URL的路径,URL总是以`/`开头,`/`就表示首页 + + +HTTP响应分为Header和Body两部分(Body是可选项),我们在`Network`中看到的Header最重要的几行如下: + +``` +200 OK +``` + +`200`表示一个成功的响应,后面的`OK`是说明。失败的响应有`404 Not Found`:网页不存在,`500 Internal Server Error`:服务器内部出错,等等。 + +``` +Content-Type: text/html +``` + +`Content-Type`指示响应的内容,这里是`text/html`表示HTML网页。请注意,浏览器就是依靠`Content-Type`来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是`http://example.com/abc.jpg`,它也不一定就是图片。 + +HTTP响应的**Body就是HTML源码** + +HTTP请求的流程: + +> [!abstract] +> 步骤1:浏览器首先向服务器发送HTTP请求,请求包括: +> +> 方法:`GET`还是`POST`,`GET`仅请求资源,`POST`会附带用户数据; +> +> 路径:`/full/url/path`; +> +> 域名:由Host头指定:`Host: www.sina.com.cn` +> +> 以及其他相关的Header; +> +> 如果是POST,那么请求还包括一个Body,包含用户数据。 + + +> [!abstract] +> 步骤2:服务器向浏览器返回HTTP响应,响应包括: +> +> 响应代码:`200`表示成功,`3xx`表示重定向,`4xx`表示客户端发送的请求有错误,`5xx`表示服务器端处理时发生了错误; +> +> 响应类型:由`Content-Type`指定,例如:`Content-Type: text/html;charset=utf-8`表示响应类型是HTML文本,并且编码是`UTF-8`,`Content-Type: image/jpeg`表示响应类型是JPEG格式的图片; +> +> 以及其他相关的Header; +> +> 通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。 + +> [!abstract] +> 步骤3:如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。 + + +Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP响应中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源。 + # Reference + * https://www.liaoxuefeng.com/wiki/1016959663602400/1017804782304672 \ No newline at end of file