精华内容
下载资源
问答
  • 本篇主要为为了实现WEB服务器,其中包含了HTTP协议的理解,以及TCP的三次握手、四次挥手等方面相关知识,同时还包含了关于web浏览器与服务器之间的通信过程。一、web浏览器通常在我们上网时会在浏览器的地址栏输入...

         本篇主要为为了实现WEB服务器,其中包含了HTTP协议的理解,以及TCP的三次握手、四次挥手等方面相关知识,同时还包含了关于web浏览器与服务器之间的通信过程。

    一、web浏览器

    通常在我们上网时会在浏览器的地址栏输入网址,

    ①、浏览器首先要对URL进行解析,

    ②、随后通过HTTP协议定义消息内容和步骤,即规定发送请求的格式;

    ③、根据服务器的域名通过操作系统下的解析器(DNS客户端)向最近的DNS服务器发送请求获取目标服务器的IP地址并存储在指定的内存空间内,,通过操作系统下的协议栈以及socket库将消息发送出去,

    ④、当服务器接收到请求消息会返回响应消息(该响应消息也是根据HTTP协议定义消息内容的格式)最后经过类似的过程返回给web浏览器。

    接下来我们根据这几个步骤进行解析:

    1.浏览器怎么对URL进行解析?

    通常常用的访问数据的机制有以下几种:

    HTTP协议:即 Hypertxt Transfer Protocal 超文本传送协议)访问Web服务器,例如:http://www.baidu.com/dir/file1.html

    FTP协议:File Transfer Protocol,文件传输协议,主要用于文件的上传和下载,例如:ftp://ftp.glasscom.com/dir/file1.html

    File协议:本地文件传输协议,例如:file://localhost/c:path/file1.zip。

    maito协议:该协议可以创建一个指向电子邮件地址的超级链接,通过该链接可以在Internet中发送电子邮件。例如:maito.tone@glasscom.com等等

    2、根据HTTP协议生成怎样格式的请求消息和接收的响应消息?

    需要我们需要知道的是:  

    HTTP协议:

    我们知道服务端和客户端之间进行通信过程便是:首先客户端根据HTTP协议给服务端发送请求消息,随后服务器给客户端发送响应消息。那么请求消息和响应消息具体是什么样的呢?

    请求消息:

    1 以下便是浏览器给服务器发送的请求消息

    2 GET / HTTP/1.1

    3 Host: www.baidu.com

    4 Connection: keep-alive

    5 Cache-Control: max-age=0

    6 Upgrade-Insecure-Requests: 1

    7 User-Agent: Mozilla/5.0 (Windows NT 10.0;Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99Safari/537.36

    8Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

    9 Accept-Encoding: gzip, deflate, br

    10 Accept-Language: zh-CN,zh;q=0.9

    接下来对这些信息进行解析

    第一部分:请求头行,包含请求类型、URI、HTTP协议版本;

    请求信息类型通常有:get、post、put等等;

    第二部分:即紧跟第一行之后的,请求头部,包含服务器所使用的说明信息;接下来解释一下这些说明信息的意思:

    1、host:请求web服务器的域名地址;

    2、Connection: 表示是否持久连接;即keep-alive表示持久连接;

    3、Cache-Control:指定请求和响应的缓存机制;no-cache(不能缓存)、no-store(在请求消息中发送将使得请求和响应消息都不使用缓存)、max-age(客户机可以接收生存期不大于指定时间(以秒为单位)的响应)、max-stale(客户机可以接收超出超时期间的响应消息)、min-fresh(客户机可以接收响应时间小于当前时间加上指定时间的响应)、only-if-cached等等;

    4、User-Agent: HTTP协议运行的浏览器类型的详细信息;比如:谷歌/67.0.3396.99

    5、Accept: 指浏览器可以接收的内容类型;

    6、Accept-Encoding: 客户端浏览器可以支持的web服务器返回内容压缩编码类型;

    7、Accept-Language:浏览器支持的语言类型,

    8、Cookie: 某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密);例如当我们上网时,某些网站能准确的推送我们想要的信息。

    第三部分:"\r\n" --> 分割header和body部分的分界线

    响应消息:

    1 HTTP/1.1 200 OK

    2 Bdpagetype: 1

    3 Bdqid: 0x8bda58760001baca

    4 Cache-Control: private

    5 Connection: Keep-Alive

    6 Content-Encoding: gzip

    7 Content-Type: text/html

    8 Cxy_all:baidu+10412ee70bbb9e9eec33f3dbcb3e2df7

    9 Date: Wed, 18 Jul 2018 03:26:13GMT

    10 Expires: Wed, 18 Jul 2018 03:25:42 GMT

    11 Server: BWS/1.1

    12 Set-Cookie: BDSVRTM=0; path=/

    13 Set-Cookie: BD_HOME=0; path=/

    14 Set-Cookie: H_PS_PSSID=1435_21118_20929; path=/; domain=.baidu.com

    15 Strict-Transport-Security: max-age=172800

    16 Vary:Accept-Encoding

    17 X-Ua-Compatible: IE=Edge,chrome=1

    18 Transfer-Encoding: chunked

    响应消息的解析:

    第一部分:响应头,包含:HTTP协议版本、状态码(1XX-告知请求处理进度和情况,2XX-成功,3XX-表示需要进一步操作,4XX-客户端错误;5XX-服务器错误;)

    第二部分:响应头部,包含服务器发送的附加信息;这里针对几个重要的进行解析说明:https://www.cnblogs.com/mylanguage/p/5689879.html-->有详细说明。

    第三部分:"\r\n" --分割header和body的分割线

    第四部分:包含服务器向客户端发送的数据。

    以上就请求消息和响应消息的内容格式,由浏览器或者客户端将信息根据HTTP协议转换而来。

    3、怎么根据域名获取服务器的IP地址?

    首先web浏览器会调用操作系统下的解析器即DNS客户端,随后由解析器发送请求给最近的DNS服务器(发送过程与C/S架构模型一样),若所需域名不在最近的DNS服务器,则由该服务器向域的DNS服务器发送询查消息,若该域名不在根域DNS服务器上,则让最近DNS服务器向其下级域发送询查消息,以此递归便能查找到该域名所在域的DNS服务器,最后由请求的DNS服务器发送响应消息到最近的DNS服务器,得到该域名的IP地址;

    同时DNS服务器有一个缓存功能,可以记住之前查询过的域名,如果所查询的域名和相关信息已经在缓存中,那么久可以直接返回响应。

    二、TCP的三次握手和四次挥手

    首先我们需要知道在客户端与服务器基于TCP协议建立联系时需要经过三次握手,而在断开连接时需经历四次挥手的过程,那么我们来看一下该过程是怎样的?

    三次握手:

    解析:

    首先服务器通常是处于监听的状态,而客户端通常是主动建立连接的一方,即

    1、TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;

    2、TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

    3、TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。

    4、TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。

    5、当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

    四次挥手:

    同时我们需要知道的是:通常服务器不会主动断开连接,而是客户端主动断开连接。

    1、客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

    2、服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

    3、客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

    4、服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

    5、客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗

    6、服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

    三、实现web静态服务器

    直接看示例:

    import socket

    import re

    def server_client(server_client_socket):

        """接收来自浏览器的数据和发送报文"""
        # 对接收到的请求消息进行解析
    request = server_client_socket.recv(1024).decode("utf-8")# 请求消息头部格式大概为 : GET /index.html HTTP/1.1 request_lines = request.splitlines()  # 将接收到的信息按行分割,并返回列表ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])# 若正则表达式匹配成功有返回值,则检测是由为 "/"或者空字符,则设置默认文件为/index.html文件if ret:
            filename = ret.group(
    1)if filename == "/" or filename == "":
                filename =
    "/index.html"# print(request)respone = "HTTP/1.1 200 OK\r\n"respone += "\r\n"# respone += "

    hello world

    "
        #
    检测服务器中是否有该文件,有则发生内容,无则返回错误 try:
            f =
    open("html" + filename, "rb")except:
            respone =
    "HTTP/1.1 404 Not found file \r\n"respone += "\r\n"respone += "

    Not found File

    "respone = respone.encode("utf-8")else:
            file_content = f.read()
            f.close()
            respone = respone.encode(
    "utf-8") + file_content  # 字节之间的拼接server_client_socket.send(respone)
        server_client_socket.close()
    def main():# 1、创建套接字对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,
    1)# 2、绑定本地信息server_socket.bind(("", 6969))# 3、监听server_socket.listen(128)while True:# 4、等待客户端连接server_client_socket, client_addr = server_socket.accept()# 5、服务客户端server_client(server_client_socket)
        server_socket.close()
    if __name__ == "__main__":
        main()

    了解新钛云服

    新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

    冯祯旺:普惠运维--像用水电一样使用运维和安全服务

    从盛大游戏G云COO到独自创业!2018中国财经峰会专访新钛云服CEO冯祯旺

    新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

    新钛云服出品的精品技术干货

    七个用于Docker和Kubernetes防护的安全工具

    运维人的终身成长,从清单管理开始|万字长文!

    99%运维不知道,系统文件md5变了,竟然是因为......

    OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

    孩子通CTO李文杰:孩子通运维2.0的升级之路。

    什么是云原生?

    IT混合云战略:是什么、为什么,如何构建?

    c5e26ad09160fdc97fb2b8eccf988fdb.png

    展开全文
  • Web服务器

    2019-09-21 01:31:33
    1、DNS(Domain Name System)域名系统(1)两大特点:分布式、层次性(2)域名空间结构:根域、顶级域(国家/地区域名)、二级域(3)完整域名格式:FQDN=主机名.DNS 后缀,例:www.baidu.com. 转载于:...

    一 、 域名概述

    1、DNS(Domain Name System)域名系统
    (1)两大特点:分布式、层次性
    (2)域名空间结构:根域、顶级域(国家/地区域名)、二级域
    (3)完整域名格式:FQDN=主机名.DNS 后缀,例:www.baidu.com.

    转载于:https://www.cnblogs.com/cxm123123form/p/11479279.html

    展开全文
  • 本篇主要为为了实现WEB服务器,其中包含了HTTP协议的理解,以及TCP的三次握手、四次挥手等方面相关知识,同时还包含了关于web浏览器与服务器之间的通信过程。一、web浏览器通常在我们上网时会在浏览器的地址栏输入...

         本篇主要为为了实现WEB服务器,其中包含了HTTP协议的理解,以及TCP的三次握手、四次挥手等方面相关知识,同时还包含了关于web浏览器与服务器之间的通信过程。

    一、web浏览器

    通常在我们上网时会在浏览器的地址栏输入网址,

    ①、浏览器首先要对URL进行解析,

    ②、随后通过HTTP协议定义消息内容和步骤,即规定发送请求的格式;

    ③、根据服务器的域名通过操作系统下的解析器(DNS客户端)向最近的DNS服务器发送请求获取目标服务器的IP地址并存储在指定的内存空间内,,通过操作系统下的协议栈以及socket库将消息发送出去,

    ④、当服务器接收到请求消息会返回响应消息(该响应消息也是根据HTTP协议定义消息内容的格式)最后经过类似的过程返回给web浏览器。

    接下来我们根据这几个步骤进行解析:

    1.浏览器怎么对URL进行解析?

    通常常用的访问数据的机制有以下几种:

    HTTP协议:即 Hypertxt Transfer Protocal 超文本传送协议)访问Web服务器,例如:http://www.baidu.com/dir/file1.html

    FTP协议:File Transfer Protocol,文件传输协议,主要用于文件的上传和下载,例如:ftp://ftp.glasscom.com/dir/file1.html

    File协议:本地文件传输协议,例如:file://localhost/c:path/file1.zip。

    maito协议:该协议可以创建一个指向电子邮件地址的超级链接,通过该链接可以在Internet中发送电子邮件。例如:maito.tone@glasscom.com等等

    2、根据HTTP协议生成怎样格式的请求消息和接收的响应消息?

    需要我们需要知道的是:  

    HTTP协议:

    我们知道服务端和客户端之间进行通信过程便是:首先客户端根据HTTP协议给服务端发送请求消息,随后服务器给客户端发送响应消息。那么请求消息和响应消息具体是什么样的呢?

    请求消息:

    1 以下便是浏览器给服务器发送的请求消息

    2 GET / HTTP/1.1

    3 Host: www.baidu.com

    4 Connection: keep-alive

    5 Cache-Control: max-age=0

    6 Upgrade-Insecure-Requests: 1

    7 User-Agent: Mozilla/5.0 (Windows NT 10.0;Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99Safari/537.36

    8Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

    9 Accept-Encoding: gzip, deflate, br

    10 Accept-Language: zh-CN,zh;q=0.9

    接下来对这些信息进行解析

    第一部分:请求头行,包含请求类型、URI、HTTP协议版本;

    请求信息类型通常有:get、post、put等等;

    第二部分:即紧跟第一行之后的,请求头部,包含服务器所使用的说明信息;接下来解释一下这些说明信息的意思:

    1、host:请求web服务器的域名地址;

    2、Connection: 表示是否持久连接;即keep-alive表示持久连接;

    3、Cache-Control:指定请求和响应的缓存机制;no-cache(不能缓存)、no-store(在请求消息中发送将使得请求和响应消息都不使用缓存)、max-age(客户机可以接收生存期不大于指定时间(以秒为单位)的响应)、max-stale(客户机可以接收超出超时期间的响应消息)、min-fresh(客户机可以接收响应时间小于当前时间加上指定时间的响应)、only-if-cached等等;

    4、User-Agent: HTTP协议运行的浏览器类型的详细信息;比如:谷歌/67.0.3396.99

    5、Accept: 指浏览器可以接收的内容类型;

    6、Accept-Encoding: 客户端浏览器可以支持的web服务器返回内容压缩编码类型;

    7、Accept-Language:浏览器支持的语言类型,

    8、Cookie: 某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密);例如当我们上网时,某些网站能准确的推送我们想要的信息。

    第三部分:"\r\n" --> 分割header和body部分的分界线

    响应消息:

    1 HTTP/1.1 200 OK

    2 Bdpagetype: 1

    3 Bdqid: 0x8bda58760001baca

    4 Cache-Control: private

    5 Connection: Keep-Alive

    6 Content-Encoding: gzip

    7 Content-Type: text/html

    8 Cxy_all:baidu+10412ee70bbb9e9eec33f3dbcb3e2df7

    9 Date: Wed, 18 Jul 2018 03:26:13GMT

    10 Expires: Wed, 18 Jul 2018 03:25:42 GMT

    11 Server: BWS/1.1

    12 Set-Cookie: BDSVRTM=0; path=/

    13 Set-Cookie: BD_HOME=0; path=/

    14 Set-Cookie: H_PS_PSSID=1435_21118_20929; path=/; domain=.baidu.com

    15 Strict-Transport-Security: max-age=172800

    16 Vary:Accept-Encoding

    17 X-Ua-Compatible: IE=Edge,chrome=1

    18 Transfer-Encoding: chunked

    响应消息的解析:

    第一部分:响应头,包含:HTTP协议版本、状态码(1XX-告知请求处理进度和情况,2XX-成功,3XX-表示需要进一步操作,4XX-客户端错误;5XX-服务器错误;)

    第二部分:响应头部,包含服务器发送的附加信息;这里针对几个重要的进行解析说明:https://www.cnblogs.com/mylanguage/p/5689879.html-->有详细说明。

    第三部分:"\r\n" --分割header和body的分割线

    第四部分:包含服务器向客户端发送的数据。

    以上就请求消息和响应消息的内容格式,由浏览器或者客户端将信息根据HTTP协议转换而来。

    3、怎么根据域名获取服务器的IP地址?

    首先web浏览器会调用操作系统下的解析器即DNS客户端,随后由解析器发送请求给最近的DNS服务器(发送过程与C/S架构模型一样),若所需域名不在最近的DNS服务器,则由该服务器向域的DNS服务器发送询查消息,若该域名不在根域DNS服务器上,则让最近DNS服务器向其下级域发送询查消息,以此递归便能查找到该域名所在域的DNS服务器,最后由请求的DNS服务器发送响应消息到最近的DNS服务器,得到该域名的IP地址;

    同时DNS服务器有一个缓存功能,可以记住之前查询过的域名,如果所查询的域名和相关信息已经在缓存中,那么久可以直接返回响应。

    二、TCP的三次握手和四次挥手

    首先我们需要知道在客户端与服务器基于TCP协议建立联系时需要经过三次握手,而在断开连接时需经历四次挥手的过程,那么我们来看一下该过程是怎样的?

    三次握手:

    解析:

    首先服务器通常是处于监听的状态,而客户端通常是主动建立连接的一方,即

    1、TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;

    2、TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

    3、TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。

    4、TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。

    5、当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。

    四次挥手:

    同时我们需要知道的是:通常服务器不会主动断开连接,而是客户端主动断开连接。

    1、客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

    2、服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

    3、客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

    4、服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

    5、客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗

    6、服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

    三、实现web静态服务器

    直接看示例:

    import socket

    import re

    def server_client(server_client_socket):

        """接收来自浏览器的数据和发送报文"""
        # 对接收到的请求消息进行解析
    request = server_client_socket.recv(1024).decode("utf-8")# 请求消息头部格式大概为 : GET /index.html HTTP/1.1 request_lines = request.splitlines()  # 将接收到的信息按行分割,并返回列表ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])# 若正则表达式匹配成功有返回值,则检测是由为 "/"或者空字符,则设置默认文件为/index.html文件if ret:
            filename = ret.group(
    1)if filename == "/" or filename == "":
                filename =
    "/index.html"# print(request)respone = "HTTP/1.1 200 OK\r\n"respone += "\r\n"# respone += "

    hello world

    "
        #
    检测服务器中是否有该文件,有则发生内容,无则返回错误 try:
            f =
    open("html" + filename, "rb")except:
            respone =
    "HTTP/1.1 404 Not found file \r\n"respone += "\r\n"respone += "

    Not found File

    "respone = respone.encode("utf-8")else:
            file_content = f.read()
            f.close()
            respone = respone.encode(
    "utf-8") + file_content  # 字节之间的拼接server_client_socket.send(respone)
        server_client_socket.close()
    def main():# 1、创建套接字对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,
    1)# 2、绑定本地信息server_socket.bind(("", 6969))# 3、监听server_socket.listen(128)while True:# 4、等待客户端连接server_client_socket, client_addr = server_socket.accept()# 5、服务客户端server_client(server_client_socket)
        server_socket.close()
    if __name__ == "__main__":
        main()

    了解新钛云服

    新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

    冯祯旺:普惠运维--像用水电一样使用运维和安全服务

    从盛大游戏G云COO到独自创业!2018中国财经峰会专访新钛云服CEO冯祯旺

    新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

    新钛云服出品的精品技术干货

    七个用于Docker和Kubernetes防护的安全工具

    运维人的终身成长,从清单管理开始|万字长文!

    99%运维不知道,系统文件md5变了,竟然是因为......

    OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

    孩子通CTO李文杰:孩子通运维2.0的升级之路。

    什么是云原生?

    IT混合云战略:是什么、为什么,如何构建?

    fb31ca996114199a224101bf7fe28965.png

    展开全文
  • 规定了浏览器和web服务器通信数据格式 2.url 通常理解为网址 格式HTTP协议,域名,路径 3.请求报文 请求分为get和post两种 get请求报文格式: 请求行 请求头 空行 post请求报文格式: 请求行 请求头 ...

    1.HTTP
    超文本传输协议
    底层原理基于TCP协议
    规定了浏览器和web服务器通信数据格式
    2.url
    通常理解为网址
    格式HTTP协议,域名,路径
    3.请求报文
    请求分为get和post两种
    get请求报文格式:
    请求行
    请求头
    空行
    post请求报文格式:
    请求行
    请求头
    空行
    请求体
    #后边\r\n
    4.响应报文
    响应报文格式:
    响应行
    响应头
    空行
    响应体
    #后边\r\n
    5.静态web服务器返回固定页面数据
    import socket
    srevent_socket=socket.socket(socket.AF_IEAT,socket.SOCK_STREAM)
    srevent_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    srevent_socket.bind((‘ip地址‘,端口号))
    srevent_socket.listen(128)
    while True:
    client,ip_port = srevent_socket.accept()
    print(“客户端{}使用{}连接成功”.format(ip_port[0],ip_port[1]))
    recv_data = client.recv(1024).decode(‘UTF-8’)
    print(recv_data)
    with open(‘路径名’,‘rb’) as file:
    file_concent = file.read()
    requise_line = ‘HTTP/1.1 200ok\r\n’
    requise_heard = ‘Sever: SPWS\r\n’
    requise_data = (requise_line+requise_heard+’\r\n’).encode+file_concent
    client.send(requise_data)
    client.close()
    srevent_socket.close()
    6.静态web服务器返回指定页面数据
    import socket
    srevent=socket.socket(socket.AF_IEAT,socket.SOCK_STREAM)
    srevent.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    srevent.bind((‘ip地址‘,端口号))
    srevent.listen(128)
    client,ip_port = srevent_socket.accept()
    while True:
    client,ip_port = srevent.accept()
    print(“客户端{}使用{}连接成功”.format(ip_port[0],ip_port[1]))
    recv_data = client.recv(1024).decode(‘UTF-8’)
    print(recv_data)
    if len(recv_data) ==0:
    client.close()
    else:
    recv_path = recv_data.split(’ ‘)[1]
    if recv_path =’/’:
    recv_path='指定路径名’
    try:
    with open('路径文件’+recv_path,‘rb’)as file:
    file_concent = file.read()
    except:
    with open('路径文件‘+’错误‘,‘rb’)as file:
    file_concent = file.read()
    file_line =‘HTTP/1.1 404NOTFOUND\r\n’
    file_heard = ‘Sever: SPWS\r\n’
    requise_data = (file_line + file_heard + ‘\r\n’).encode(‘UTF-8’)+file_concent
    reuise_data = client.send(requise_data)
    else:
    with open(‘路径文件’+recv_path,‘rb’)as file:
    file_concent = file.read()
    file_line =‘HTTP/1.1 200ok\r\n’
    file_heard = ‘Sever: SPWS\r\n’
    requise_data = (file_line + file_heard + ‘\r\n’).encode(‘UTF-8’)+file_concent
    requise_data=client.send(requise_data)
    findally:
    client.close()
    srevent.close()
    7.多任务版静态服务器
    import socket
    import multiprocessing
    def task():
    srevent=socket.socket(socket.AF_IEAT,socket.SOCK_STREAM)
    srevent.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    srevent.bind((‘ip地址‘,端口号))
    srevent.listen(128)
    client,ip_port = srevent_socket.accept()
    while True:
    client,ip_port = srevent.accept()
    print(“客户端{}使用{}连接成功”.format(ip_port[0],ip_port[1]))
    recv_data = client.recv(1024).decode(‘UTF-8’)
    print(recv_data)
    if len(recv_data) ==0:
    client.close()
    else:
    recv_path = recv_data.split(’ ‘)[1]
    if recv_path =’/’:
    recv_path=‘指定路径名’
    try:
    with open(‘路径文件’+recv_path,‘rb’)as file:
    file_concent = file.read()
    except:
    with open(‘路径文件‘+’错误‘,‘rb’)as file:
    file_concent = file.read()
    file_line =‘HTTP/1.1 404NOTFOUND\r\n’
    file_heard = ‘Sever: SPWS\r\n’
    requise_data = (file_line + file_heard + ‘\r\n’).encode(‘UTF-8’)+file_concent
    reuise_data = client.send(requise_data)
    else:
    with open(‘路径文件’+recv_path,‘rb’)as file:
    file_concent = file.read()
    file_line =‘HTTP/1.1 200ok\r\n’
    file_heard = ‘Sever: SPWS\r\n’
    requise_data = (file_line + file_heard + ‘\r\n’).encode(‘UTF-8’)+file_concent
    requise_data=client.send(requise_data)
    findally:
    client.close()
    srevent.close()
    t= multiprocessing.Process(target=task)
    t.daemon=True
    t.start()
    #多任务版自行设置无具体格式
    8.面向对像版多任务
    import socket
    import threading
    class Process(object):
    def init(self,port):
    self.sevent=socket.socket(socket.AF_IEAT,socket.SOCK_STRAET)
    self.sevent.setsockopt(socket.SOL_SOCKET,socket.SO-REUSEADDR,True)
    self.sevent.bind((’’,port))
    self.sevent.listen(128)
    def test(self,):
    while True:
    client,ip_port=self.sevent.accpet()
    print("客户端{}使用{}连接成功”)
    t = threading.Thread(target=start)
    t.start()
    self.sevent.close()
    def start():
    recv_datat=client.recv(1024).decode(‘UTF-8’)
    if len(recv_data) ==0:
    client.close()
    else:
    recv_path = recv_data.split(’ ‘)[1]
    if recv_path =’/’:
    recv_path='指定路径名’
    try:
    with open('路径文件’+recv_path,‘rb’)as file:
    file_concent = file.read()
    except:
    with open('路径文件‘+’错误‘,‘rb’)as file:
    file_concent = file.read()
    file_line =‘HTTP/1.1 404NOTFOUND\r\n’
    file_heard = ‘Sever: SPWS\r\n’
    requise_data = (file_line + file_heard + ‘\r\n’).encode(‘UTF-8’)+file_concent
    reuise_data = client.send(requise_data)
    else:
    with open('路径文件’+recv_path,‘rb’)as file:
    file_concent = file.read()
    file_line =‘HTTP/1.1 200ok\r\n’
    file_heard = ‘Sever: SPWS\r\n’
    requise_data = (file_line + file_heard + ‘\r\n’).encode(‘UTF-8’)+file_concent
    requise_data=client.send(requise_data)
    findally:
    client.close()
    srevent.close()
    if name ==‘main’:
    Process(6666).start
    #自定义设置面向对象过程,没有规定格式

    展开全文
  • 作用:规定浏览器和web服务器通信的数据格式 HTTP协议是在应用层的协议,基于传输层的TCP传输协议,设计之初 是传输网页数据,现在可以传输任何数据。 浏览器访问web服务器的通信过程 2.URL 1.url概念 ​ 意思是...
  • 域名的概念 IP地址不易记忆 早期使用Hosts文件解析域名 主机名称重复 主机维护困难 DNS(Domain Name System 域名系统) 分布式 层次性 域名空间接口 根域 顶级域 组织域 国家/地区域名 二级域名 FQDN...
  • 接口调用web服务器nginx返回乱码问题

    千次阅读 2018-05-07 17:27:32
    线下调用公司web服务器的接口。一开始使用ip:端口号 访问接口一直都没有问题。后面访问的路径使用域名。结果出现了乱码。域名访问和ip访问最根本的区别就是域名访问经过了nginx做代理。后来发现。线下调用的url,...
  • Web静态服务器

    2018-12-15 15:07:48
    1前情回顾域名后面没有加端口,就是采用默认的端口。HTTP是80HTTPS是443请求报文格式:请求行,请求头,空行,请求体。前三个每个后面都有\r\n响应报文格式:响应行、响应头、空行、...
  • 一、网址 ​ URL,统一资源定位符...​ 通过HTTP协议来规定浏览器和Web服务器传输的数据格式 层次结构 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ExTez3s-1604711779921)(C:\Users\
  • 一、 Web基础 1.1 域名概述 ■域名概念 ●IP地址不易记忆 ■早期使用Hosts文件解析域名 ●主机名称重复 ●主机维护困难 ■DNS(域名系统): ●分布式 ●层次性 ■域名空间的结构 ●根域 ●顶级域 ◆组织域 ◆国家或...
  • 最近在读《深入分析Java Web技术内幕》,算是对DNS服务器域名解析有个大体的理解,以下的内容来自个人对书中内容的整理 1.什么是域名解析? 当我们在浏览器的地址栏输入一个地址时,如www.xxxx.com,之后就可以跳转到...
  • 1.1 常用的Web服务器简介/3 1.1.1 Apache服务器/3 1.1.2 Lighttpd服务器/3 1.1.3 Tomcat服务器/4 1.1.4 IBMWebSphere服务器/4 1.1.5 MicrosoftIIS/4 1.2 Nginx简介/4 1.3 选择Nginx的理由/5 1.3.1 它可以高并发连接/...
  • 花生壳+Tomcat架构个人WEB服务器

    千次阅读 2019-02-17 19:29:14
    2.下载Tomcat9.0服务器,搭建JDK环境。 (1)Tomcat下载 Tomcat官网:Tomcat官方网址,可以在此处下载Tomcat。 (2)点击左侧Download下的对应版本。 注意有zip和exe两种格式的,zip是免安装版的,exe是安装版。同时...
  • 转自...   HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_path] ...host表示合法的Internet主机域名或者IP地址;port指...
  • 根据功能来说服务器可分为web服务器、ftp服务器、数据库服务器、邮件服务器等等,做什么用途就可以叫做什么服务器,根据地域来说可分为国内服务器、香港服务器、美国服务器、日本服务器等等,服务器放在什么地方就...
  • 每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力...
  • 需求2.nginx rewrite重写格式3.实验 1.需求 调整用户浏览的URL,看起来规范 合乎开发及产品人员的需求为了让搜索引擎收录网站内容,让用户体验更好 企业会将动态URL地址伪装成静态地址提供服务网站更换新域名后 ...
  •  当用户登录成功后,将用户信息保存在session中,session的唯一标识符jessionid保存在cookie中,当浏览器再次访问时,属于同一域名下,自动传递cookie从而达到有状态性获取服务器的session信息。  多个web平台...
  • jsonp跨域请求处理Jsonp(JSON with Padding) 是 json的一种"使用模式",可以让网页从别的域名(网站)那获取资料,绕过同源策略(若地址里面的协议、域名和端口号均相同则属于同源),即跨域读取数据。jsonp:利...
  • 一、DNS(Domain Name System) Internet上主机/路由器的识别问题 IP地址 域名:www.hit.edu.cn 域名解析系统DNS 多层命名服务器构成的分布式数据库 ...负载均衡:Web服务器 问题:问什么不使用...
  • http服务器原理

    2020-03-10 22:33:05
    web服务器工作原理 从零实现web服务器 http协议简易教程 http的url格式 http协议的URL格式: http: //host[:port][abs_path] , http表示使用http协议来进行资源定位;host是主机域名;port是端口号,一般有默认的...
  • 邮件服务器迁移

    2017-05-10 14:35:00
    新邮件服务启动并设置,本次使用的为硬件一体机,出厂自带邮件服务及杀毒模块,web界面设置... 导入账号密码之后,设置新服务器域名为原有域名,然后在域名设置界面设置该域名指向的IP地址为新服务器的IP地址;  ...
  • Web基础 URL的格式: schema://host[:port#]/path/.../...host HTTP服务器的IP地址或者域名 port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblog...
  • postfix 邮件服务器

    2011-09-11 22:42:15
    Postfix 邮件服务器的搭建 首先关闭selinux 和 防火墙 本机IP: 192.168.16.250 主机名要按照正确的FQDN域名格式 本机为...1. 安装apache(httpd web服务器) [root@localhost Server]# yum -y inst...
  • java web

    2019-06-20 10:44:00
     一个服务器可以设置多个域名来访问 映射同一个IP 监听域名(主机)给出相应的格式 获取字节码: 内省:在运行时能够获取JavaBean当中的属性名称和get与set方法 反射: 动态获取的信息以及动态...
  • 去端口号功能主要用于Apache与IIS等WEB服务器共存时,去除域名后面所带的端口 本文案例采用我开发的纯绿色PHP集成环境PHPWAMP里面的“去端口”功能模块。 案例演示: 点击常用工具,打开“去掉域名非80端口”...
  • WEB安全基础-WEB通信

    千次阅读 2017-12-29 22:46:14
    1.URL(Uniform Resource Locator)协议:就是站点连接; ... URL作用:定位网站资源(相当于快递里面的收货地址) URL标准格式: schema://host[:port#]/path/.../[?query-string][#anchor] ...host 服务器域名

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 242
精华内容 96
关键字:

web服务器域名格式