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协议包含:

  1. 由浏览器发送到服务器遵循的请求协议
  2. 服务器发送数据到浏览器遵循的相应协议

2.1 请求协议

2.1.1 请求格式

2.1.2 请求方式:GET请求和POST请求
  1. GET请求
  • GET提交的数据会放在请求头中,即URL之后,以?分割URL和传输数据,参数之间以&相连,如 EditBook?name=test1&id=123456
  • GET提交的数据大小有限制(因为浏览器对URL长度有限制)
  1. POST请求
  • POST数据一般放在HTTP包的请求体中,但是也可以放在请求头中
  • POST提交数据没有限制
  • GET与POST请求在服务端获取数据方式不同

2.2 响应协议

2.2.1 响应格式

2.2.2 响应状态码

状态码是当客户端向服务器端发送请求时, 返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现异常了。例如状态码 200 OK,由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:


2.2.3 示例代码
  1. 服务端.py
  1. # filename: 服务端.py 
  2. import socket 
  3.  
  4. sock=socket.socket() 
  5. sock.bind(("127.0.0.1",8808)) 
  6. sock.listen(5
  7.  
  8. while True
  9. print("server waiting....."
  10. conn,addr=sock.accept() 
  11. data=conn.recv(1024
  12. print("data",data) 
  13.  
  14. # 读取html文件 
  15. with open("login.html","rb") as f: 
  16. data=f.read() 
  17.  
  18. conn.send((b"HTTP/1.1 200 OK %s"%data)) 
  19. conn.close() 
  1. login.html
  1. <!DOCTYPE html> 
  2. <html lang="en"> 
  3. <head> 
  4. <meta charset="UTF-8"> 
  5. <title>Title</title> 
  6. </head> 
  7. <body> 
  8.  
  9. <form action="" method="post"> 
  10. 用户名 <input type="text" name="user"> 
  11. 密码 <input type="password" name="pwd"> 
  12. <input type="submit"> 
  13. </form> 
  14.  
  15. </body> 
  16. </html> 
原文地址:https://www.cnblogs.com/sama/p/9286827.html