HTTP協議基礎 未完待續

2022-03-26 06:28:29 字數 2137 閱讀 3867

超文字傳輸協議(hypertext transfer protocol,http)是一種用於分布式、協作式和超**資訊系統的應用層協議。http是全球資訊網的資料通訊的基礎。

設計http最初的目的是為了提供一種發布和接收html頁面的方法。通過http或者https協議請求的資源由統一資源識別符號(uniform resource identifiers,uri)來標識。

http的發展是由蒂姆·伯納斯-李於2023年在歐洲核子研究組織(cern)所發起。http的標準制定由全球資訊網協會(world wide web consortium,w3c)和網際網路工程任務組(internet engineering task force,ietf)進行協調,最終發布了一系列的rfc,其中最著名的是2023年6月公布的 rfc 2616,定義了http協議中現今廣泛使用的乙個版本——http 1.1。

2023年12月,網際網路工程任務組(ietf)的hypertext transfer protocolbis(httpbis)工作小組將http/2標準提議遞交至iesg進行討論[2],於2023年2月17日被批准。http/2標準於2023年5月以rfc 7540正式發表,取代http 1.1成為http的實現標準。

概述

http是乙個客戶端終端(使用者)和伺服器端(**)請求和應答的標準(tcp)。通過使用網頁瀏覽器、網路爬蟲或者其它的工具,客戶端發起乙個http請求到伺服器上指定埠(預設埠為80)。我們稱這個客戶端為使用者**程式(user agent)。應答的伺服器上儲存著一些資源,比如html檔案和影象。我們稱這個應答伺服器為源伺服器(origin server)。在使用者**和源伺服器中間可能存在多個「中間層」,比如**伺服器、閘道器或者隧道(tunnel)。

儘管tcp/ip協議是網際網路上最流行的應用,http協議中,並沒有規定必須使用它或它支援的層。事實上,http可以在任何網際網路協議上,或其他網路上實現。http假定其下層協議提供可靠的傳輸。因此,任何能夠提供這種保證的協議都可以被其使用。因此也就是其在tcp/ip協議族使用tcp作為其傳輸層。

通常,由http客戶端發起乙個請求,建立乙個到伺服器指定埠(預設是80埠)的tcp連線。http伺服器則在那個埠監聽客戶端的請求。一旦收到請求,伺服器會向客戶端返回乙個狀態,比如"http/1.1 200 ok",以及返回的內容,如請求的檔案、錯誤訊息、或者其它資訊。

http請求格式

回車符,換行符: \r\n

http響應格式

我們簡單建立乙個伺服器,接收一下瀏覽器的請求,python檔案**如下

import

socket

server =socket.socket()

server.bind((

'127.0.0.1

',8000))

server.listen()

while 1:

conn, addr =server.accept()

msg = conn.recv(1024).decode('

utf-8')

print(msg)

開啟瀏覽器,訪問 127.0.0.1:8000 

這時可以看到請求資訊

get請求和post請求的區別:

get提交的資料會放在url之後,也就是請求行裡面,以?分割url和傳輸資料,引數之間以&相連,如editbook?name=test1&id=123456.(請求頭裡面那個content-type做的這種引數形式,後面講) post方法是把提交的資料放在http包的請求體中.

get提交的資料大小有限制(因為瀏覽器對url的長度有限制),而post方法提交的資料沒有限制.

get與post請求在服務端獲取請求資料方式不同,就是我們自己在服務端取請求資料的時候的方式不同了,

nginx 未完待續

yum install y pcre yum install y pcre devel yum install y openssl yum install y openssl devel yum install y zlib yum install y gccyum安裝 yum install y ...

sqlparse(未完待續)

sqlparse.split sql,encoding none sql 包含乙個或多個sql語句的字串 encoding 語句的編碼 可選 sql select from foo select from bar sql list sqlparse.split sql print sql list ...

Python基礎 內建型別(未完待續)

本文根據python 3.6.5的官文built in types而寫。1.真值測試 2.布林操作 and,or,not 3.比較 4.數字型 int,float,complex 5.迭代器型別 6.序列型別 7.文字序列型別 str 8.二進位制序列型別 bytes,bytearray,memor...