Python HTTP 协议

应用层

应用层的协议,只是在传输层上的进一步封装。所以 HTTP协议 只是利用的 TCP协议 的通信架构,定义了一些基本信息交流术语。


HTTP 基础

完成一次HTTP通信的过程,分为两步,客户端一个请求 request 、服务器处理请求返回一个响应 responce,HTTP每次请求都是一次全新的TCP连接,无状态的 stateless

# HTTP 请求格式
GET /index.html HTTP/1.1
Host: www.example.com
...

# HTTP 响应格式 (响应分两部分 header 和 body,这两部分的中间通过一个 “空行” 分割)
HTTP/1.1 200 OK # 状态码,本次请求得到一个什么的结果 (response header)
Content-type: text/plain # 返回的内容格式,浏览器通过这个信息解析 (response header)

Hello World! # 返回的内容 (response body)

---

# 状态码
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务器错误

# Content-type
text/plain (普通文本)
text/html (HTML文本)
image/jpeg (jpeg图片)
image/gif (gif图片)
application/x-www-form-urlencoded (POST)
application/json

# 学习 HTTP 就是对这一行一行 header 的理解

从 TCP 到 HTTP

我们通过 TCP 协议,构建一个最原始的 HTTP服务器

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('127.0.0.1', 9999))

s.listen(5)

while True:
 conn, addr = s.accept()

 # 请求处理 | 得到客户端的请求信息,请求的路径,请求的方法 ... 我们在通过这些信息做出不同的响应
 request = conn.recv(1024) 

 # 响应处理
 response = b'''HTTP/1.x 200 OK
 Content-Type: text/html

 <html>   
 <head>
 <title>hi</title>
 </head>
 <html>
 <p>hi, python</p>
 </html>
'''

 method = request.decode('utf-8').split(' ')[0]
 if method == 'GET':
  conn.sendall(response)

 conn.close()

浏览器其实就是一个 HTTP的客户端,启动HTTP服务器,通过浏览器访问 127.0.0.1:9999,就能得到 hi, python

更多教程 HTML5 教程 CSS3 教程 JavaScript 教程 JQuery 教程 React.js 教程 Node.js 教程 Koa2 教程 Python 教程 Linux 教程