多程序實現http服務 瀏覽器端被拒絕訪問

2021-09-09 05:43:41 字數 2991 閱讀 6294

前言:這段**是有問題的,下面給出了解決方案。

import socket

import multiprocessing

import re

def service_client(new_socket):

"""為這個客戶端返回資料"""

# 接收瀏覽器傳送過來的請求, 即http請求

request = new_socket.recv(1024).decode("utf8") # request:請求(的事物)

ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0]) # + 表示匹配前乙個字元至少出現1次

if ret:

file_name = ret.group(1)

print("*"*50, file_name)

if file_name == "/":

file_name = "/index.html"

# 2.返回http格式的資料,給瀏覽器

try:

print("fanfanfnafan")

file = open("./html" + file_name, "rb")

print("aiaiaiaia")

except:

"""如果找不到請求,即打不開請求檔案,返回的請求頭,請求空行,請求體"""

# 準備傳送給瀏覽器的資料---header 請求空行

# 準備傳送給瀏覽器的資料---body

# response += "hahahaha"

# header 是字串,body是讀出二進位制,所以不能加了一起傳送

# 將response header 傳送給瀏覽器

print("you mei you ?")

new_socket.send(response.encode("utf-8"))

print("buzhidao ")

# 將response body 傳送給瀏覽器

new_socket.send(html_content)

print("haiyou ?")

# 關閉套接字

# new_socket.close()

def main():

# 建立套接字

tcp_server_socket = socket.socket(socket.af_inet,socket.sock_stream)

tcp_server_socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

# 繫結埠

tcp_server_socket.bind(("", 4396))

# 變為監聽套接字

tcp_server_socket.listen(128)

while true:

# 等待新客戶端鏈結

new_socket, client_addr = tcp_server_socket.accept()

# service_client(new_socket)

# while true:

# 為這個客戶端服務

p1 = multiprocessing.process(target=service_client, args=(new_socket,)) # service:服務

p1.start()

new_socket.close()

tcp_server_socket.close()

if __name__ == "__main__":

main()

這份**的問題是:**可以正常執行,但是無法正常給瀏覽器客戶端返回資料,拒絕訪問,如下圖:

這個問題分析可知,**一定出在了伺服器端給瀏覽器返回資料時,那麼可具體排查對應的**塊。

1、返回header頭格式出問題:

2、單詞拼錯了

3、需要改為:decode(「utf-8」)。這裡科普一下utf-8與utf8的區別:這兩個本質上沒什麼區別,只是標準寫法與非標準的問題,utf-8屬於標準寫法,所以建議改一下

瀏覽器(二)瀏覽器是多程序的

browser程序 瀏覽器主程序,只有乙個,負責協調 主控。gpu程序 渲染程序 也就是我們常說的瀏覽器核心webkit等 第三方外掛程式程序 每種型別的外掛程式對應乙個程序,僅當使用該外掛程式時才建立 避免單個tab頁或第三方外掛程式奔潰從而影響整個瀏覽器 多程序充分利用多核優勢 方便使用沙盒模型...

多程序伺服器端

多程序服務端 利用訊號 子程序例子 利用子程序結束後向父程序傳送sigchld訊號來 子程序 include 子程序結束訊號 void read childproc int signo int main int argc,char ar else else 主程序 return0 通過多個程序來實現...

js執行機制(瀏覽器多程序)

瀏覽器的每個tab相當於乙個程序,可在瀏覽器的任務管理器中檢視,如下 在這裡瀏覽器應該也有自己的優化機制,有時候開啟多個tab頁後,可以在chrome任務管理器中看到,有些程序被合併了 所以每乙個tab標籤對應乙個程序並不一定是絕對的 瀏覽器多程序設計的優勢 1.充分利用瀏覽器的多核優勢 2.避免單...