F_picacho:Hello,World!

ID: F_picacho    Sharp丶Picacho冻梨  小C    鳄鱼(我不想说这段历史)

个人:男   1.51亿岁

语言:中文 C++  python(Django)  HTML  易语言   C#   (别跟我扯英语我不会,也别问我那些你这么学会的。)

兴趣爱好:画画   写程序  压马路  体育运动  装B= =!

个人标签:铅笔   技术不宅   Minecraft   红石   404   Win10   专治腹黑  剑走偏锋   二次元

yingyingyingyingyingyingyingyingyingyingyingyingyingyingyingyingyingyingyingyin~

WEB框架本质(2)未完工

呐….书接上回,刚刚查完成绩怀着悲痛的心情再写这篇Blog

 

import socket   #服务端

sock = socket.socket()    #创建socket对象
sock.bind(('127.0.0.1',2333))    #监听ip以及端口
sock.listen(5)    #默认等待

#使服务端一直等待客户连接
while True:
    conn, abbr = sock.accept()    #阻塞直到有新用户进行连接
    #有人进行连接,获取用户发送的请求
    data = conn.recv(9090)    #获取到数据
    print(data) 
    conn.send(b'Hello')    #响应请求发送数据
    conn.close()    #断开目标链接

上面这些代码是上一期所写的HTTP请求的服务端处理过程,今天继续完善它,让它成为一个标准的WEB框架。

思考一下浏览器会发送什么内容到服务端

假设上面这些代码正在运行,而又有用户连接上了,那此时用户连接后根据上一期访问流程(HTTP)用户应该会给服务端发送消息,但是此时无论是用户请求还是服务端相应都是应该有一套规则去规定,那就是HTTP协议

HTTP协议

  • 用户发送

心细的人应该已经发现了上面的代码比上一期多了一行print(data)  其作用是拿到用户的请求数据

data输出的数据为:b’GET / HTTP/1.1\r\nHost: 127.0.0.1:2333\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\r\nAccept-Encoding: gzip, deflate\r\nCookie: csrftoken=j9YK01JuAFfRdGV6t0yZWIKHvPEwZLXqmvD55yhuYZQoX4Fq1A3V7jaj9LjNLnRl\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\n\r\n’

其中b’表示字节忽略掉/n/r代表换行 那我们整理一下就是

GET / HTTP/1.1

Host: 127.0.0.1:2333

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0

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

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\

Accept-Encoding: gzip, deflate

Cookie:csrftoken=j9YK01JuAFfRdGV6t0yZWIKHvPEwZLXqmvD55yhuYZQoX4Fq1A3V7jaj9LjNLnRl

Connection: keep-alive\r\nUpgrade-Insecure-Requests: 1

 

 

  • 服务器相应

【又一新坑】WEB框架本质(1)

Wed框架本质

对于web应用来说,本质上就是一个socket服务端,用户使用的浏览器就是一个scoket客户端。

HTTP请求

HTTP:无状态丶短链接(简单来说就是进行一次连接然后服务器做出回应最后直接断开)

TCP:不断开(只要不断开,就可以进行任意的发送接收请求 于上面的HTTP进行对比)

ps.最简单的http请求例子就是用浏览器访问一个网站

访问流程(HTTP)

  •     浏览器(scoket客户端)

2.用户访问域名(但是访问域名的话DNS服务器会把域名解析成IP地址本质访问的还是IP,默认访问端口80)

3.发送请求

5.接收相应 此时已经完成了一整套链接响应操作 http的话就会直接断开连接

7.链接断开

  •     服务器(scoket服务端)

1.监听自己的ip以及访问端口(160.124.48.213:80)以mkaliez.com为例

4.接收请求(响应)

6.断开客户

以上就是整个网站访问流程

使用代码实现HTTP相应请求过程

呐,这里使用的是python不过都差不多,有其他语言版本的可以在下方留言提交,这里仅仅演示过程!

scoket客户端不用你去写,ie 火狐等等浏览器就是一个scoket客户端但是对scoket服务端就得我们自己去实现。


 

 

 

 

 

 

 

 


具体实现过程也迎合了上面的HTTP请求过程,也就是说所有的WEB应用网站等等本质上就这么10来行代码 然后往上面添加功能(当然下一期再说啦)。