HTTP协议
1. Http协议特性
1.1 基于TCP/TP
HTTP协议是基于TCP/IP协议智商的应用层协议
1.2 基于请求-响应模式
HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并 返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有 接收到请求之前不会发送响应
1.3 无状态保存,短连接
HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理(短连接)。
1.4 无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。(与之对应的TCP链接)
2. HTTP请求协议和响应协议
HTTP协议包含:
- 由浏览器发送到服务器遵循的请求协议
- 服务器发送数据到浏览器遵循的相应协议
2.1 请求协议
2.1.1 请求格式
2.1.2 请求方式:GET请求和POST请求
- GET请求
- GET提交的数据会放在请求头中,即URL之后,以?分割URL和传输数据,参数之间以&相连,如
EditBook?name=test1&id=123456
- GET提交的数据大小有限制(因为浏览器对URL长度有限制)
- POST请求
- POST数据一般放在HTTP包的请求体中,但是也可以放在请求头中
- POST提交数据没有限制
- GET与POST请求在服务端获取数据方式不同
2.2 响应协议
2.2.1 响应格式
2.2.2 响应状态码
状态码是当客户端向服务器端发送请求时, 返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现异常了。例如状态码 200 OK
,由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
2.2.3 示例代码
- # filename: 服务端.py
- import socket
- sock=socket.socket()
- sock.bind(("127.0.0.1",8808))
- sock.listen(5)
- while True:
- print("server waiting.....")
- conn,addr=sock.accept()
- data=conn.recv(1024)
- print("data",data)
- # 读取html文件
- with open("login.html","rb") as f:
- data=f.read()
- conn.send((b"HTTP/1.1 200 OK\r\n\r\n%s"%data))
- conn.close()
- login.html
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="" method="post">
- 用户名 <input type="text" name="user">
- 密码 <input type="password" name="pwd">
- <input type="submit">
- </form>
- </body>
- </html>