预习网络服务器 http协议,静态资源,web服务器
Posted 我在黑马的日子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了预习网络服务器 http协议,静态资源,web服务器相关的知识,希望对你有一定的参考价值。
#网络层级复习
#应用层,传输层,网络层,链路层
#应用层,解决要传递什么数据的,传递的数据双方能懂实什么
#传输层,解决如何传输数据 udp tcp 可以理解为快递公司
#网络层,有一个ip协议,可以理解为,对方在网络上的位置,
#链路层,具体的传输工具
--------------------------------------------
socket 套接字
客户端---------------------服务器
socket = socket.socket(AF_INET,SOCK_STREAM DGRAM)
socket.bind()绑定ip端口
socket.listen()进行监听,
cli_so = socket.accept()#监听后,返回新的套结字
客户端,与服务器进行连接,三次握手,四次挥手,
---------------------------------------------
应用层,ftp传输文件,ssh远程连接,http协议
---------------------------------------------
浏览器最核心的就是引擎,解析算法的区别,ie自称一套,
-------------------------------------------------
http超文本传输协议,客户端发送的,
get http请求方式,get方式,post put delete option head 请求资源获取,
get是用来获取数据的,
post是用来修改数据的
put用来让浏览器保存数据
delete 用来删除数据
option 用来询问服务器的某种支持
head 返回报文头
Get/ 这个“/”指明获取的特定资源 报文的起使行,
Host www.baidu.com
cookie 保存的数据
服务器发送的http 200 ok 数字是响应值 状态码 查看状态吗大全,比如404
客户端和服务器建立一个连接,建立连接,浏览器起到socket客户端作用,
三次握手建立号,建立连接,生出报文,
服务器,请求头,换行,在进行html,http响应的格式,
真实的资源定位,是在域名后面的
uri url l是local本地,是i 的子集 urn n name 通过名字标识,urn很少,
-----------------------------------------
web服务器,今天必须完成
-----------------------------------------
http协议
http进行传输的特定的数据,
爬虫是在客户端的角度进行处理数据,
-------客户端,浏览器,app
爬虫,和客户端是一样的,爬虫向网上发送http的请求,爬虫只是一个程序,
爬虫向新浪发送一个请求,新浪,会返回一个index.html,一个主页,因为爬虫不是浏览器,所以它得到的资源,带有标签标记的一个信息,
----------------------------------------
代码编写的流程:
web服务器,提供静态资源
#tcp socket服务端,
socket= socket.socket()
socket.bind()
socket.listen()
cli_socket.accept()
while True:
p = process(target=fun,args=)
p.start()
cli_socket.close()
def fun(cli_socket):
#接收数据,
#recv request_data = recv()
#从网络上收取的都是报文
#print(request_data)
#解析,http 报文,就是request报文数据
#以那种请求方式,获得报文数据
#提取请求路径 网址后面的部分就是path
HTML_ROOT_DIR = “./html” http的根路径
/index.html 假设用户访问
try:
file = open("HTML_ROOT_DIR + index.html")
data = file.read()#放到hello world处
file.close()
except IoError:
#如果出现问题的情况下
"""
HTTP1.1 404 Not FONUNd \r\n
\r\n
hello
"""
#
Get / HTTP / 1.1
#服务器,返回一个响应数据,(服务器字符串,报文,)
网址后面的部分都是 路径。path HTTP:----
‘’‘
HTTP 1.1 200 OK \r\n
\r\n 换行
#hello itcast 这三行是一个大的字符串
’‘’
#send()
#close()把建立的socket关闭
----------------------------------------------
#coding:utf-8
import socket
from multiprocessing import Process
#HTML_ROOT_DIR= ”“这种全大写,就是一种常量值
#from socket import socket
#使用from socket 则应该写成,from socket import socket,AF_INET server_socket 可以省略掉socket
#socket(AF_INET) 第二个socket是只得socket包
#函数和上边的空间应该是两行
def handle_client(client_socket):
"""处理客户端的请求"""
# 获取客户端请求的数据,
request_data = client_socket.recv(1024)#收到的是http的报文
print("request_data:",request_data)
#为了符合相应
# 构造相应数据
responce_start_line = "http/1.1 200 OK\r\n"
response_headers = "Server: My server\r\n"
response_body = "hello itcast"
response = responce_start_line + response_headers + "\r\n" + response_body
print("response data:" ,response)
#对客户端返回数据
client_socket.send(bytes(response,"utf-8"))
#关闭客户端进程
client_socket.close()
pass
#函数和上边的空间应该是两行
if __name__ == "__main__":#主函数名,只有在本函数下能使用,拷贝到别的包不能使用
#如果以python程序进行启动文件,那么__nam__ 就是main
#如果是在别的文件下进行导入的文件,name就是包名
#所以,whileTrue一下的程序,只有是以python启动程序,才会执行
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",8000))
server_socket.listen(128)
while True:
client_socket,client_address = server_socket.accept()#循环可以接收多用户信息
handle_client_process = Process(target=handle_client,args=(client_socket,))#进程的时候不要有空格alt + enter 创建
print("%s,%s用户链接上了"%(client_address))#client_address是元组类型,
handle_client_process.start()
client_socket.close()#因为在这里创建一个子进程的时候,紫禁城已经从父进程里面赋值了一份,复制了一份资源,也就以为着新创建的handle_client_process.已经拿到了 client_socket.在主进程里,客户端的socket就已经没有用了。
#----------------------#-----------------#-----------------------#------------------
进程服务端的总结,流程
#导入socket包,
#创建tcp的链接,,绑定,监听,
#接收客户端的请求,accept为了多次执行,使用while ture
#开始执行,,然后结束客户端,这些都是在同一个主函数中进行,
#然后对进程中的目标进行创建,接收用户传数据
#定义函数,aly + enter
#得到http报文,报文(起使行,header,后面的html,响应体)
#构造相应的数据,
#响应需要写到一个集合
#制定后就可以进行发送了
-------------------------------------------------
#静态文件的web服务器代码
以上是关于预习网络服务器 http协议,静态资源,web服务器的主要内容,如果未能解决你的问题,请参考以下文章