日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【转载】Web简介

發(fā)布時(shí)間:2025/10/17 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】Web简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫的非常好,建議直接進(jìn)入原鏈接學(xué)習(xí)
https://mozillazg.com/2015/06/let-us-build-a-web-server-part-1-zh-cn.html
github link

讓我們一起來(lái)構(gòu)建一個(gè) Web 服務(wù)器(一)
2015-06-03

python let-us-build / server / http / lsbaws / 讓我們一起來(lái)構(gòu)建一個(gè) Web 服務(wù)器
本文譯自:http://ruslanspivak.com/lsbaws-part1/

有一天出去散步的時(shí)候,一個(gè)女人來(lái)到一處工地上,她看到有三個(gè)男人在工作。 她問(wèn)第一個(gè)人,“你在做什么?“,第一個(gè)男人對(duì)這個(gè)問(wèn)題感到非常的厭煩, 他大聲的說(shuō)到”你沒(méi)看到我正在砌磚嗎?“女人對(duì)這個(gè)答案不大滿意, 她又去問(wèn)第二個(gè)男人他在做什么。 第二個(gè)男人回答道,”我正在建造一面磚墻。” 然后,他把注意力轉(zhuǎn)向了第一個(gè)男人,他說(shuō)道, “嘿,你只完成墻的尾部。你需要把最后那塊磚拿掉?!?仍舊不滿意這個(gè)答案,她又問(wèn)第三個(gè)男人他在做什么。 這個(gè)男人邊望著天邊對(duì)他說(shuō), ”我正在建造世界上最大的教堂?!?當(dāng)他站在這里仰望著天空的時(shí)候,另外兩個(gè)男人開(kāi)始爭(zhēng)吵應(yīng)該怎么放磚。 這個(gè)男人轉(zhuǎn)向前面的兩個(gè)男人并說(shuō)道, “嘿,伙計(jì)們,別擔(dān)心那塊磚了。那只是一塊內(nèi)墻, 它將會(huì)被涂平?jīng)]人會(huì)看到那塊磚。 只需移動(dòng)到另一層?!?[1]

這則故事的寓意是當(dāng)你了解了整個(gè)系統(tǒng)并且理解了不同的部分是如何組合在一起的時(shí)候(磚,墻,教堂), 你就可以更快的識(shí)別和解決問(wèn)題(不正確的磚)。

對(duì)于從零開(kāi)始創(chuàng)建我們自己的 Web server 來(lái)說(shuō)需要做些什么呢?

我相信要成為一個(gè)優(yōu)秀的開(kāi)發(fā)者你必須更好的理解你日常使用的基礎(chǔ)軟件系統(tǒng),包括編程語(yǔ)言,編譯器,解釋器,數(shù)據(jù)庫(kù)和操作系統(tǒng),web server 和 web 框架。同時(shí),為了更深入的理解整個(gè)系統(tǒng),必須從零開(kāi)始,一塊磚一面墻的重新構(gòu)建它們

子曾經(jīng)曰過(guò):

“我聽(tīng)到,我忘記。“
LSBAWS_confucius_hear.png

”我看到,我記住?!?br /> LSBAWS_confucius_see.png

”我做到,我理解。“
LSBAWS_confucius_do.png

此刻,我希望你能深信通過(guò)重新構(gòu)建一個(gè)不同的軟件系統(tǒng)來(lái)學(xué)習(xí)它們是如何工作的是一個(gè)好主意。

在這三篇系列中我將向你展示如何構(gòu)建你自己的基礎(chǔ)的 Web server。讓我們開(kāi)始吧。

先開(kāi)始最重要的事情,什么是一個(gè) Web server?

LSBAWS_HTTP_request_response.png

一言以蔽之,它是一個(gè)物理服務(wù)器上的一個(gè)網(wǎng)絡(luò)服務(wù)器(哎呀,一個(gè)服務(wù)器上的服務(wù)器)同時(shí)等待客戶端發(fā)送一個(gè)請(qǐng)求。 當(dāng)它接收到一個(gè)請(qǐng)求的時(shí)候,它將生成一個(gè)響應(yīng)并把它發(fā)送回客戶端。 客戶端和服務(wù)器的通信方式是使用的 HTTP 協(xié)議。 客戶端可以是你的瀏覽器或其他會(huì)說(shuō) HTTP 的任何軟件。

一個(gè)非常簡(jiǎn)單的 Web server 實(shí)現(xiàn)長(zhǎng)什么樣呢?我放了一個(gè)在這里。這個(gè)例子使用 Python 寫的,但是就算你不懂 Python(它是個(gè)非常容易學(xué)習(xí)的語(yǔ)言,你可以試一下!)你也能夠從下面的代碼和解釋中理解基本的概念:

import socket

HOST, PORT = ‘’, 8888

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print ‘Serving HTTP on port %s …’ % PORT
while True:
client_connection, client_address = listen_socket.accept()
request = client_connection.recv(1024)
print request

http_response = """\

HTTP/1.1 200 OK

Hello, World!
“”"
client_connection.sendall(http_response)
client_connection.close()
將上面的代碼保存為 webserver1.py 或者直接從 GitHub 上下載下來(lái),然后在命令行下像這樣運(yùn)行:

$ python webserver1.py
Serving HTTP on port 8888 …
現(xiàn)在在你瀏覽器的地址欄中輸入如下鏈接 http://localhost:8888/hello ,按回車鍵然后就可以看到魔法效果了。 你應(yīng)該會(huì)看到在你的瀏覽器中顯示 "Hello, World!” ,就像下面這樣:

browser_hello_world.png

放手去做吧,說(shuō)真的。當(dāng)你在測(cè)試的時(shí)候我會(huì)等你的。

做完了?非常好。現(xiàn)在讓我們討論一下它實(shí)際上是如何工作的。

首先讓我們從你輸入的 Web 地址開(kāi)始。它被叫做 URL ,下面是它的基本結(jié)構(gòu):

LSBAWS_URL_Web_address.png

這就是你如何告訴你的瀏覽器它需要用來(lái)查找和連接的 Web server 地址以及需要顯示給你的位于服務(wù)器上的頁(yè)面(路徑)。 在你的瀏覽器發(fā)送一個(gè) HTTP 請(qǐng)求前,它首先需要與 Web server 建立一條 TCP 連接。 然后再通過(guò)這個(gè) TCP 連接發(fā)送一個(gè) HTTP 請(qǐng)求到服務(wù)器,然后等待服務(wù)器發(fā)送回一個(gè) HTTP 響應(yīng)。 當(dāng)你的瀏覽器接收到這個(gè)響應(yīng)的時(shí)候,它就會(huì)顯示它。 在這里它將顯示 “Hello, World!”

讓我們更詳細(xì)的探索一下客戶端和服務(wù)器在發(fā)送 HTTP 請(qǐng)求和響應(yīng)之前是如何建立一條 TCP 連接的。 為了達(dá)到這個(gè)目的,它們都使用了所謂的 sockets 。 為了代替瀏覽器直連,你可以通過(guò)在命令行上使用 telnet 命令的方式來(lái)手動(dòng)模擬瀏覽器的行為。

在你運(yùn)行 Web server 的電腦上打開(kāi)一個(gè) telnet 會(huì)話,可以通過(guò)在命令行上輸入 telent 并指定連接到 localhost 這個(gè)主機(jī)和 8888 這個(gè)端口,然后按下回車鍵:

$ telnet localhost 8888
Trying 127.0.0.1 …
Connected to localhost.
此刻,你已經(jīng)與運(yùn)行在你的本地機(jī)器上的準(zhǔn)備發(fā)送和接收 HTTP 消息的服務(wù)器建立了一條 TCP 連接。 在下面的圖片中你將看到一套標(biāo)準(zhǔn)的程序,服務(wù)器必須遵守這套程序以便能夠接受新的 TCP 連接。

LSBAWS_socket.png

在相同的 telnet 會(huì)話中輸入 GET /hello HTTP/1.1 然后按下回車鍵:

$ telnet localhost 8888
Trying 127.0.0.1 …
Connected to localhost.
GET /hello HTTP/1.1

HTTP/1.1 200 OK
Hello, World!
你剛剛手動(dòng)模擬了你的瀏覽器!你發(fā)送了一個(gè) HTTP 請(qǐng)求并收到了一個(gè) HTTP 響應(yīng)。 下面是一個(gè)基本的 HTTP 請(qǐng)求的結(jié)構(gòu):

LSBAWS_HTTP_request_anatomy.png

HTTP 請(qǐng)求包含了一個(gè)表示 HTTP 方法的行(GET, 因?yàn)槲覀円笪覀兊姆?wù)器返回我們一下東西), 路徑 /hello 表示了服務(wù)器上一個(gè)我們需要的”頁(yè)面“,以及協(xié)議版本。

為了簡(jiǎn)單起見(jiàn),我們的 Web server 在這里完全忽略了上面提到的請(qǐng)求行。 你可以用任何垃圾數(shù)據(jù)代替 ”GET /hello HTTP/1.1“,你依然可以得到一個(gè)內(nèi)容為 ”Hello, World!“ 的響應(yīng)。

一旦你輸入完請(qǐng)求行并按下回車鍵,客戶端就會(huì)把請(qǐng)求發(fā)送到服務(wù)器,服務(wù)器讀取請(qǐng)求行,打印出來(lái),并返回合適的 HTTP 響應(yīng)。

下面是 server 發(fā)送回你的客戶端(在這里是 telnet)的 HTTP 響應(yīng):

LSBAWS_HTTP_response_anatomy.png

讓我們來(lái)分析一下。響應(yīng)包括一個(gè)狀態(tài)行 HTTP/1.1 200 OK, 接下來(lái)是一個(gè)空行,然后是 HTTP 響應(yīng)的 body 。

response 狀態(tài)行 HTTP/1.1 200 OK 包括了 HTTP 版本,HTTP 狀態(tài)碼 以及 HTTP 狀態(tài)碼原因詞組 OK。 當(dāng)瀏覽器獲取到響應(yīng)時(shí),它將顯示響應(yīng)的 body 部分,這就是為什么你能在你的瀏覽器中看到 “Hello, World!” 的原因。

這就是一個(gè) Web server 如何工作的基本模型了??偨Y(jié)一下: Web server 創(chuàng)建一個(gè) socket 監(jiān)聽(tīng)并開(kāi)始在一個(gè)循環(huán)里接受新的連接??蛻舳藛?dòng)一個(gè) TCP 連接,成功建立連接之后客戶端發(fā)送一個(gè) HTTP 請(qǐng)求到 server ,然后 server 響應(yīng)一個(gè)展示給用戶的 HTTP response ??蛻舳撕头?wù)器都使用 socket 來(lái)建立 TCP 連接。

現(xiàn)在你已經(jīng)有一個(gè)非?;A(chǔ)的 Web server 了,你可以用你的瀏覽器或其他的 HTTP 客戶端來(lái)測(cè)試它。 正如你見(jiàn)過(guò)的,如果想嘗試的話你也可以通過(guò)使用 telent 手動(dòng)輸入 HTTP 請(qǐng)求的方式成為一個(gè)人肉 HTTP 客戶端。

有個(gè)問(wèn)題要問(wèn)你:“如何在你這個(gè)新鮮出爐的 Web server 上運(yùn)行一個(gè) Django 應(yīng)用, Flask 應(yīng)用,以及 Pyramid 應(yīng)用,并且不需要做任何的改動(dòng)就可以適應(yīng)這些不同的 Web 框架?”

我將在 第二篇文章 中向你詳細(xì)的講解。敬請(qǐng)期待。

[1] 靈感來(lái)自 Lead with a Story: A Guide to Crafting Business Narratives That Captivate, Convince, and Inspire

總結(jié)

以上是生活随笔為你收集整理的【转载】Web简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。