预习网络服务器 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服务器的主要内容,如果未能解决你的问题,请参考以下文章

JavaEE实战——Tomcatweb程序结构Http协议HttpUrlConnection

2017-2018网络攻防第五周作业

浅谈web请求过程

BS通信

PHPMeriaDB(MySQL)

Java网络知识点总结——Web服务之HTTP协议