Django学习笔记2 HTTP协议
HTTP协议
- web前端系统和后端系统之间是通过HTTP协议进行通信的
- HTTP 协议全称是超文本传输协议,英文是 Hypertext Transfer Protocol
- HTTP 协议最大的特点是通讯双方分为客户端和服务端。
- 由于目前HTTP是基于TCP协议的,所以要进行通讯,客户端必须先和服务端创建TCP连接。
- HTTP 双方的信息交互,必须是这样一种方式:客户端先发送http请求(request)给服务端,然后服务端发送 http响应(response)给客户端
- 特别注意:HTTP协议中,服务端不能主动先发送信息给客户端。
HTTP请求消息
- 请求行 request line
-
http请求的第一行的内容,表示要操作什么资源,使用的 http协议版本是什么。包含三部分信息: 请求的方法,操作资源的地址, 协议的版本号。
-
GET /mgr/login.html HTTP/1.1
表示要获取资源,资源的地址是/mgr/login.html,使用的协议是HTTP/1.1。POST /api/medicine HTTP/1.1
表示添加资源信息,添加资源到地址/api/medicine,使用的协议是HTTP/1.1。 -
常见的HTTP 请求方法
1.GET 从服务器获取资源信息,这是一种最常见的请求。比如要从服务器获取网页资源、获取图片资源、获取用户信息数据等等。
2.POST 请求方法就应该是添加资源信息到服务器进行处理(例如提交表单或者上传文件)。比如要添加用户信息、上传图片数据到服务器 等等。具体的数据信息,通常在 HTTP消息体中。
3.PUT 请求服务器更新资源信息。比如要更新用户姓名、地址等等。具体的更新数据信息,通常在HTTP消息体中。
4.DELETE 请求服务器删除资源信息。比如要删除某个用户、某个药品等等。
- 请求头 request headers
- 请求头是http请求行下面的的内容,里面存放一些信息。比如,请求发送的服务端域名是什么, 希望接收的响应消息使用什么语言,请求消息体的长度等等。
- 通常请求头都有好多个,一个请求头占据一行
- 单个请求头的 格式是: 名字: 值
- HTTP协议规定了一些标准的请求头,参考链接https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
- 开发者,也可以在HTTP消息中添加自己定义的请求头
- 消息体 message body
-
请求的url、请求头中可以存放一些数据信息,但是有些数据信息,往往需要存放在消息体中。特别是 POST、PUT等请求,添加、修改的数据信息通常都是存放在请求消息体中的。
-
HTTP 协议规定在消息头和消息体之间插入一个空行,隔开它们。
-
请求消息体中保存了要提交给服务端的数据信息。比如:客户端要上传一个文件给服务端,就可以通过HTTP请求发送文件数据给服务端。
-
文件的数据 就应该在请求的消息体中。比如:上面示例中客户端要添加药品,药品的名称、编码、描述,就存放在请求消息体中。
-
WEB API 请求消息体通常是某种格式的文本,常见的有Json、Xml、www-form-urlencoded
举例:
POST /api/medicine HTTP/1.1
Host: www.baiyueheiyu.com
User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT)
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
name=qingmeisu&sn=099877883837&desc=qingmeisuyaopin
HTTP响应消息
举例:
HTTP/1.1 200 OK
Date: Thu, 19 Sep 2019 08:08:27 GMT
Server: WSGIServer/0.2 CPython/3.7.3
Content-Type: application/json
Content-Length: 37
X-Frame-Options: SAMEORIGIN
Vary: Cookie
{"ret": 0, "retlist": [], "total": 0}
- 状态行 status line
- 状态行在第一行,包含3个部分: 协议版本
HTTP/1.1
状态码200
描述状态的短语OK
-
状态码表示服务端对客户端请求的处理结果。用3位的数字来表示,第一位的数字代表处理结果的大体类型,常见的有如下几种:
• 2xx
通常表示请求消息没有问题,而且服务器也正确处理了,最常见的是 200。
• 3xx
这是重定向响应,常见的值是 301,302,表示客户端的这个请求的url地址已经改变了,需要客户端重新发起一个请求到另外的一个url。
• 4xx
表示客户端请求有错误,常见的值有:400 Bad Request
表示客户端请求不符合接口要求,比如格式完全错误401 Unauthorized
表示客户端需要先认证才能发送次请求403 Forbidden
表示客户端没有权限要求服务器处理这样的请求, 比如普通用户请求删除别人账号等404 Not Found
表示客户端请求的url不存在
• 5xx
表示服务端在处理请求中,发生了未知错误。通常是服务端的代码设计问题,或者是服务端子系统出了故障(比如数据库服务宕机了)
-
响应头 response headers
响应头是响应状态行下面的内容,里面存放一些信息。 作用和格式与请求头类似. -
消息体 message body
- 如果HTTP响应有消息体,协议规定需要在消息头和消息体之间插入一个空行,隔开它们。
- 比如,浏览器地址栏输入登录网址,浏览器请求一个登录网页的内容,网站服务器,就在响应的消息体中存放登录网页的html内容。
- WEB API响应消息体通常也是某种格式的文本,常见的有:Json、Xml、www-form-urlencoded。