目錄
1.HTTP協定介紹
2.http協定分析
1.瀏覽器請求
3.瀏覽器解析過程
3.總​​結
1.HTTP請求流程
步驟1:瀏覽器先向伺服器傳送HTTP請求,請求包含:
步驟2:伺服器向瀏覽器返回HTTP回應,回應包括:
步驟3:如果瀏覽器還需要繼續向伺服器請求其他資源,例如圖片,就再次發出HTTP請求,重複步驟1、2。
2.HTTP格式
首頁 web前端 html教學 web伺服器的具體介紹

web伺服器的具體介紹

Jun 21, 2017 am 10:58 AM
web 伺服器

1.HTTP協定介紹

HTTP是Hyper Text Transfer Protocol(超文本傳輸協定)的縮寫。它的發展是萬維網協會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)合作的結果,(他們)最終發布了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。 RFC 2616定義了今天普遍使用的一個版本-HTTP 1.1。

HTTP協定(HyperText Transfer Protocol,超文本傳輸協定)是用於從WWW伺服器傳輸超文本到本機瀏覽器的傳送協定。它可以使瀏覽器更加高效,使網路傳輸減少。它不僅保證電腦正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。

  • HTTP是基於TCP/IP通訊協定來傳遞資料(HTML 檔案, 圖片檔案, 查詢結果等)。

  • HTTP是一個應用層協議,由請求和回應構成,是一個標準的客戶端伺服器模型。

  • HTTP是一個無狀態的協定。

![Upload 深入理解HTTP協定.jpg failed. Please try again.]


HTTP協定永遠都是客戶端發起請求,伺服器回傳回應。


這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,伺服器將訊息推送給客戶端。
HTTP協定是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關係。

2.http協定分析

1.瀏覽器請求


#http請求方法


我們可以跟資料庫的CRUD增刪改查作業對應起來:

  1. CREATE :PUT

  2. ##READ:GET





##UPDATE:POST
#########DELETE:DELETE############2.伺服器回應######HTTP回應分為Header和Body兩部分(Body是可選項),我們在Network中看到的Header最重要的幾行如下:###HTTP/1.1 200 OK###200表示一個成功的回應,後面的OK是說明。 ###如果回傳的不是200,那麼往往有其他的功能,例如############失敗的回應有404 Not Found:網頁不存在########## ##500 Internal Server Error:伺服器內部出錯############...等等...########################### #HTTP狀態碼.jpg#######


Content-Type: text/html
Content-Type指示回應的內容,這裡是text/html表示HTML網頁。

3.瀏覽器解析過程

當瀏覽器讀取到新浪首頁的HTML源碼後,它會解析HTML,顯示頁面,然後,根據HTML裡面的各種鏈接,再發送HTTP請求給新浪伺服器,拿到對應的圖片、影片、Flash、JavaScript腳本、CSS等各種資源,最後顯示出完整的頁面。

3.總​​結

1.HTTP請求流程

追蹤了新浪的首頁,我們來總結一下HTTP請求的流程:

步驟1:瀏覽器先向伺服器傳送HTTP請求,請求包含:

方法:GET或POST,GET只要求資源,POST會附帶使用者資料;
路徑:/full/url/path;
網域:由Host頭指定:Host: www.sina.com
以及其他相關的Header;
如果是POST,那麼請求還包括一個Body,包含用戶資料

步驟2:伺服器向瀏覽器返回HTTP回應,回應包括:

回應代碼:200表示成功,3xx表示重定向,4xx表示客戶端發送的請求有錯誤,5xx表示伺服器端處理時發生了錯誤;
回應類型:由Content-Type指定;
以及其他相關的Header;
通常伺服器的HTTP回應會攜帶內容,也就是有一個Body,包含回應的內容,網頁的HTML來源碼就在Body中。

步驟3:如果瀏覽器還需要繼續向伺服器請求其他資源,例如圖片,就再次發出HTTP請求,重複步驟1、2。

Web採用的HTTP協定採用了非常簡單的請求-回應模式,從而大大簡化了開發。當我們編寫一個頁面時,我們只需要在HTTP請求中把HTML發送出去,不需要考慮如何附帶圖片、視頻等,瀏覽器如果需要請求圖片和視頻,它會發送另一個HTTP請求,因此,一個HTTP請求只處理一個資源(此時就可以理解為TCP協定中的短連接,每個連結只獲取一個資源,如需要多個就需要建立多個連結)
HTTP協定同時具備極強的擴展性,雖然瀏覽器請求的是的首頁,但是新浪在HTML中可以鏈入其他伺服器的資源,例如![](http://upload-images.jianshu.io/upload_images/6078268-6060a9b222ef1412.png?imageMogr2/ auto-orient/strip%7CimageView2/2/w/1240),從而將請求壓力分散到各個伺服器上,並且,一個站點可以連結到其他站點,無數個站點互相連結起來,就形成了World Wide Web,簡稱WWW。

2.HTTP格式


客戶端請求訊息

##服務端回應訊息
  • 每個HTTP請求和回應都遵循相同的格式,一個HTTP包含Header和Body兩部分,其中Body是可選的。

  • HTTP協定是一種文字協議,所以,它的格式也非常簡單。

    HTTP GET請求的格式:
    GET /path HTTP/1.1
    Header1: Value1
    Header2: Value2
    Header3: Value3
    每個Header一行一個,換行符號是\r \n或用os.linesep
    HTTP POST請求的格式:
    POST /path HTTP/1.1
    Header1: Value1
    Header2: Value2
    Header3: Value3

    body data goes here...

    當遇到連續兩個\r\n時,Header部分結束,後面的資料全部是Body。
    HTTP回應的格式:
    200 OK
    Header1: Value1
    Header2: Value2
    Header3: Value3

    body data goes here...

    HTTP回應如果包含body,也是透過\r\n\r\n來分隔的。
    請再次注意,Body的資料類型由Content-Type頭來決定,如果是網頁,Body就是文本,如果是圖片,Body就是圖片的二進位資料。
    當存在Content-Encoding時,Body資料是被壓縮的,最常見的壓縮方式是gzip,所以,看到Content-Encoding: gzip時,需要將Body資料先解壓縮,才能得到真正的資料。壓縮的目的在於減少Body的大小,加快網路傳輸。

    4Web靜態伺服器

    1.顯示固定的頁面

  • import socketimport multiprocessingimport osimport timedef serverHandler(clientSocket, clientAddr):'与请求的客户端进行交互'# 接收客户端发来的消息
        recvData = clientSocket.recv(1024).decode('utf-8')
        print(recvData)# 服务端向客户端发消息,作为响应
        responseLine = 'HTTP/1.1 200 OK' + os.linesep
        responseHeader = 'Server: laowang' + os.linesep
        responseHeader += 'Date: %s' % time.ctime() + os.linesep
        responseBody = '差一点一米八'
        sendData = (responseLine + responseHeader + os.linesep + responseBody).encode('gbk')
    
        clientSocket.send(sendData)# 关闭
        clientSocket.close()def main():'程序入口'# socket对象
        serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定的端口号,可以重复使用端口号#serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# 绑定
        serverSocket.bind(('', 8000))# 监听
        serverSocket.listen()while True:# 接收
            clientSocket, clientAddr = serverSocket.accept()
            print(clientSocket)# 开一个新的进程,执行交互
            multiprocessing.Process(target=serverHandler, args=(clientSocket, clientAddr)).start()# 关闭客户端对象
            clientSocket.close()if __name__ == '__main__':
        main()
    登入後複製

客戶端瀏覽器頁面
2.顯示需要的頁面

import time,multiprocessing,socket,os,re

G_PATH = './html'

def serveHandler(clientSocket,clientAddr):
    recvData = clientSocket.recv(1024).decode('gbk')
    lineFirst = recvData.splitlines()[0]
    strFirst = re.split(r' +',lineFirst)
    fileName = strFirst[1]

    filePath = G_PATHif '/'== fileName:
        filePath += './index.html'else:
        filePath += fileNametry:file = Nonefile =open(filePath,'r',encoding='gbk')
        responseBody = file.read()

        responseLine = 'HTTP/1.1 200 OK' + os.linesep
        responseHeader = 'Server: ererbai' + os.linesep
        responseHeader += 'Date:%s' % time.ctime() + os.linesep
    except FileNotFoundError:
        responseLine = 'HTTP/1.1 404 NOT FOUND' + os.linesep
        responseHeader = 'Server: ererbai' + os.linesep
        responseHeader += 'Date:%s' % time.ctime() + os.linesep
        responseBody = '很抱歉,服务器中找不到你想要的内容'
    except Exception:
        responseLine = 'HTTP/1.1 500 ERROR' + os.linesep
        responseHeader = 'Server: ererbai' + os.linesep
        responseHeader += 'Date: %s' % time.ctime() + os.linesep
        responseBody = '服务器正在维护中,请稍后再试。'finally:if file!=None and not file.closed:file.close()

        senData = (responseLine + responseHeader + os.linesep + responseBody).encode('gbk')
        clientSocket.send(senData)
        clientSocket.close()


def main():
    serveSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    serveSocket.bind(('',8000))
    serveSocket.listen()while True:
        clientSocket,clientAddr = serveSocket.accept()
        print(clientSocket)
        multiprocessing.Process(target=serveHandler,args=(clientSocket,clientAddr)).start()
        clientSocket.close()if __name__ == '__main__':
    main()
登入後複製

用戶端瀏覽器首頁

客戶端瀏覽器biye.html頁面
#


學習過程中遇到什麼問題或想取得學習資源的話,歡迎加入學習交流群組
343599877,我們一起學習前端!

以上是web伺服器的具體介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

電驢搜尋連不上伺服器如何解決 電驢搜尋連不上伺服器如何解決 Jan 25, 2024 pm 02:45 PM

解決方法:1、檢查電驢設置,確保已輸入正確的伺服器位址和連接埠號碼;2、檢查網路連接,確保電腦已連接到互聯網,並重置路由器;3、檢查伺服器是否在線,如果您的設定和網路連線都沒有問題,則需要檢查伺服器是否在線上;4、更新電驢版本,造訪電驢官方網站,下載最新版本的電驢軟體;5、尋求協助。

無法連接到RPC伺服器導致無法進入桌面的解決方法 無法連接到RPC伺服器導致無法進入桌面的解決方法 Feb 18, 2024 am 10:34 AM

RPC伺服器不可用進不了桌面怎麼辦近年來,電腦和網路已經深入到我們的生活中的各個角落。作為一種集中運算和資源共享的技術,遠端過程呼叫(RPC)在網路通訊中起著至關重要的作用。然而,有時我們可能會遇到RPC伺服器無法使用的情況,導致無法進入桌面。本文將介紹一些可能導致此問題的原因,並提供解決方案。首先,我們需要了解RPC伺服器不可用的原因。 RPC伺服器是一種

CentOS安裝fuse及CentOS安裝伺服器詳解 CentOS安裝fuse及CentOS安裝伺服器詳解 Feb 13, 2024 pm 08:40 PM

身為LINUX用戶,我們經常需要在CentOS上安裝各種軟體和伺服器,本文將詳細介紹如何在CentOS上安裝fuse和建置伺服器的過程,幫助您順利完成相關操作。 CentOS安裝fuseFuse是一個使用者空間檔案系統框架,允許非特權使用者透過自訂檔案系統實現對檔案系統的存取和操作,在CentOS上安裝fuse非常簡單,只需按照以下步驟操作:1.開啟終端,以root用戶登入。 2.使用下列指令安裝fuse軟體包:```yuminstallfuse3.確認安裝過程中的提示,輸入`y`繼續。 4.安裝完

如何將Dnsmasq設定為DHCP中繼伺服器 如何將Dnsmasq設定為DHCP中繼伺服器 Mar 21, 2024 am 08:50 AM

DHCP中繼的作用是將接收到的DHCP封包轉送到網路上的另一個DHCP伺服器,即使這兩台伺服器位於不同的子網路中。透過使用DHCP中繼,您可以實現在網路中心部署集中式的DHCP伺服器,並利用它為所有網路子網路/VLAN動態分配IP位址。 Dnsmasq是一種常用的DNS和DHCP協定伺服器,可設定為DHCP中繼伺服器,以協助管理網路中的動態主機設定。在本文中,我們將向您展示如何將dnsmasq配置為DHCP中繼伺服器。內容主題:網路拓樸在DHCP中繼上設定靜態IP位址集中式DHCP伺服器上的D

用PHP建構IP代理伺服器的最佳實務指南 用PHP建構IP代理伺服器的最佳實務指南 Mar 11, 2024 am 08:36 AM

在網路資料傳輸中,IP代理伺服器扮演著重要的角色,能夠幫助使用者隱藏真實IP位址,保護隱私、提升存取速度等。在本篇文章中,將介紹如何用PHP建立IP代理伺服器的最佳實務指南,並提供具體的程式碼範例。什麼是IP代理伺服器? IP代理伺服器是位於使用者與目標伺服器之間的中間伺服器,它可作為使用者與目標伺服器之間的中轉站,將使用者的請求和回應轉發。透過使用IP代理伺服器

epic伺服器離線進不了遊戲怎麼辦? epic離線進不了遊戲解決方法 epic伺服器離線進不了遊戲怎麼辦? epic離線進不了遊戲解決方法 Mar 13, 2024 pm 04:40 PM

  epic伺服器離線進不了遊戲怎麼辦?這個問題想必很多小夥伴都有遇過,出現了此提示就是導致正版的遊戲無法啟動,那麼出現這個問題一般是網絡和安全軟體幹擾導致的,那麼應該怎麼解決呢,本期小編就來和大夥分享解決方法,希望今日的軟體教學可以幫助各位解決問題。  epic伺服器離線進不了遊戲怎麼辦:  1、很可能是被安全軟體幹擾了,將遊戲平台和安全軟體關閉在重啟。  2、其次就是網路波動過大,嘗試重啟一次路由器,看看是否有效,如果條件可以的話,可以嘗試使用5g移動網絡來進行操作。  3、然後有可能是更

如何從駕駛艙Web使用者介面啟用管理訪問 如何從駕駛艙Web使用者介面啟用管理訪問 Mar 20, 2024 pm 06:56 PM

Cockpit是一個面向Linux伺服器的基於Web的圖形介面。它主要是為了使新用戶/專家用戶更容易管理Linux伺服器。在本文中,我們將討論Cockpit存取模式以及如何從CockpitWebUI切換Cockpit的管理存取。內容主題:駕駛艙進入模式查找當前駕駛艙訪問模式從CockpitWebUI啟用Cockpit的管理訪問從CockpitWebUI禁用Cockpit的管理訪問結論駕駛艙進入模式駕駛艙有兩種訪問模式:受限訪問:這是駕駛艙的默認訪問模式。在這種存取模式下,您無法從駕駛艙Web用戶

如何在伺服器上安裝 PHP FFmpeg 擴充功能? 如何在伺服器上安裝 PHP FFmpeg 擴充功能? Mar 28, 2024 pm 02:39 PM

如何在伺服器上安裝PHPFFmpeg擴充功能?在伺服器上安裝PHPFFmpeg擴充功能可以幫助我們在PHP專案中處理音視訊文件,實現音視訊文件的編解碼、剪輯、處理等功能。本文將介紹如何在伺服器上安裝PHPFFmpeg擴展,以及具體的程式碼範例。首先,我們需要確保伺服器上已經安裝了PHP以及FFmpeg。如果沒有安裝FFmpeg,可以依照下列步驟安裝FFmpe

See all articles