学习Django,http协议,

学习Django

http协议

规则

'''
http协议:超文本传输协议
①基于TCP/IP协议基础上的应用层协议,底层实现仍为socket
②基于请求-响应模式:通讯一定是从客户端开始,服务器端接受到客户端一定会做出对应响应
③无状态:协议不对任何一次通讯状态和任何数据做保存
③无连接:一次连接只完成一次请求-响应,请求响应完毕后立即断开连接
'''

http工作原理(事务)

# 一次http操作称之为一个事务,工作过程可分为四步
# 1.客户端与服务端建立连接
# 2.客户端发生一个http协议指定格式的请求
# 3.服务器端接收请求后,响应一个http协议指定格式的响应
# 4.客户端将服务器的响应显示展现给用户

请求

'''
请求行:GET|POST(请求方式) /(请求路径) HTTP/1.1(http协议版本)
请求头:(了解)
请求体:GET 请求体放到请求路径后进行拼接 
    POST会在请求行与请求头结束后,以数据包方式单独发送

请求报文
# 请求行  请求头  请求体
'''
POST / HTTP/1.1\r\n    #请求行(必须)
Host: 127.0.0.1:8001\r\n 
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8\r\n
\r\n
usr=abc&pwd=123  #请求体(可选)
'''

响应

'''
响应行(必须):HTTP/1.1(http协议版本) 200(状态码) ok(状态结束)
                           1打头:消息通知
                           2打头:请求成功
                           3打头:重定向(重新定向)
                           4打头:客户端错误
                           5打头:服务器端错误
响应头(可选):(了解)
响应体(可选):具体数据
注意:响应规则与响应体内容之间还需要一个\r\n标识分割 响应规则:响应行和响应头

响应报文:
# 响应行  响应头  响应体
'''
HTTP/1.1 200 OK\r\n  #响应行
Content-type:text/html\r\n  #响应头
\r\n 
Login Success #响应体
'''
'''
import socket
PORT = 4396
server = socket.socket()
server.bind(('127.0.0.1',PORT))
server.listen(5)
print('服务端启动:http://127.0.0.1:%s'% PORT)
while True:
    browser,_ = server.accept()
    data = browser.recv(1024).decode('utf-8')
    print(data) #一次请求就会获得一次响应,连接不上会一直请求,所以会产生多个响应,超时结束
#server
import socket
PORT = 4396
server = socket.socket()
server.bind(('127.0.0.1',PORT))
server.listen(5)
print('服务端启动:http://127.0.0.1:%s'% PORT)
while True:
    browser,_ = server.accept()
    data = browser.recv(1024).decode('utf-8')
    print(data)
    # 要遵循http协议返回数据:响应行(必须) 响应头 响应体
    browser.send(b'HTTP/1.1 200 OK\r\n')  # 响应行(必须),以\r\n结束
    browser.send(b'Content-type:text/html\r\n') # 响应头(可选),服务于响应体
    browser.send(b'\r\n')  # 响应规则与响应体内容之间还需要一个\r\n标识分割
    browser.send(b'normal msg')  # 响应体(可选)
    browser.send(b'<h1>hello wold</h1>') # 响应体(可选)
    browser.close()

  

 

猜你喜欢

转载自www.cnblogs.com/lizeqian1994/p/10468762.html