Django学习笔记2 HTTP协议

2023-05-16

HTTP协议

  • web前端系统和后端系统之间是通过HTTP协议进行通信的
  • HTTP 协议全称是超文本传输协议,英文是 Hypertext Transfer Protocol
  • HTTP 协议最大的特点是通讯双方分为客户端服务端
  • 由于目前HTTP是基于TCP协议的,所以要进行通讯,客户端必须先和服务端创建TCP连接。
  • HTTP 双方的信息交互,必须是这样一种方式:客户端先发送http请求(request)给服务端,然后服务端发送 http响应(response)给客户端
  • 特别注意:HTTP协议中,服务端不能主动先发送信息给客户端。

HTTP请求消息

  1. 请求行 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 请求服务器删除资源信息。比如要删除某个用户、某个药品等等。

  1. 请求头 request headers
  • 请求头是http请求行下面的的内容,里面存放一些信息。比如,请求发送的服务端域名是什么, 希望接收的响应消息使用什么语言,请求消息体的长度等等。
  • 通常请求头都有好多个,一个请求头占据一行
  • 单个请求头的 格式是: 名字: 值
  • HTTP协议规定了一些标准的请求头,参考链接https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
  • 开发者,也可以在HTTP消息中添加自己定义的请求头
  1. 消息体 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}
  1. 状态行 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
    表示服务端在处理请求中,发生了未知错误。通常是服务端的代码设计问题,或者是服务端子系统出了故障(比如数据库服务宕机了)
  1. 响应头 response headers
    响应头是响应状态行下面的内容,里面存放一些信息。 作用和格式与请求头类似.

  2. 消息体 message body

  • 如果HTTP响应有消息体,协议规定需要在消息头和消息体之间插入一个空行,隔开它们。
  • 比如,浏览器地址栏输入登录网址,浏览器请求一个登录网页的内容,网站服务器,就在响应的消息体中存放登录网页的html内容。
  • WEB API响应消息体通常也是某种格式的文本,常见的有:Json、Xml、www-form-urlencoded。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django学习笔记2 HTTP协议 的相关文章

随机推荐

  • 使用LiveNVR实现RTSP视频监控、直播推送

    LiveNVR LiveNVR能够通过简单的网络摄像机通道配置 xff0c 将传统监控行业里面的高清网络摄像机IPCamera NVR等具有RTSP Onvif协议输出的设备接入到LiveNVR xff0c LiveNVR能够将这些设备源的
  • 四旋翼飞行器——电调篇

    1 电调的作用 xff1a 电调的作用就是将飞控板的PWM控制信号转变为电流信号 xff0c 以控制电机的转速 因为电机的电流是很大的 xff0c 通常每个电机正常工作时 xff0c 平均有3A左右的电流 xff0c 如果没有电调的存在 x
  • GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG、ZDA、DTM

    NMEA协议是为了在不同的GPS xff08 全球定位系统 xff09 导航设备中建立统一的BTCM xff08 海事无线电技术委员会 xff09 标准 xff0c 由美国国家海洋电子协会 xff08 NMEA The National M
  • Github的branch是什么

    Github的branch是什么
  • extern C的作用详解

    extern 34 C 34 的主要作用就是为了能够正确实现C 43 43 代码调用其他C语言代码 加上extern 34 C 34 后 xff0c 会指示编译器这部分代码按C语言的进行编译 xff0c 而不是C 43 43 的 由于C 4
  • Linux socket CAN编程示例

    如下所示 xff0c 代码展示了Linux下CAN的发送和接收 xff1a include lt stdio h gt include lt stdlib h gt include lt string h gt include lt uni
  • windows下面安装git

    注意在安装过程中选择override这个选项
  • QT中Map的使用

    Qt中的QMap介绍与使用 xff0c 在坛子里逛了一圈 xff0c 发现在使用QMap中 xff0c 出现过很多的问题 xff0c Map是一个很有用的数据结构 它以 键 值 的形式保存数据 在使用的时候 xff0c 通过提供字符标示 x
  • ubuntu 更新内核切换内核启动

    1 查看需要更新的内核命令 xff1a apt cache search linux 该命令将会显示所有可以获取的内核 2 安装内核 xff0c 假设你要安装的内核为2 6 39 0 xff0c 则使用下面的命令 sudo apt get
  • 多线程实现对同一个或多个文件的读写操作

    程序用途 xff1a 实现多个线程对同一文件的读写操作 程序代码 xff1a test c 该程序在Ubuntu下测试通过 include lt stdio h gt include lt pthread h gt include lt s
  • linux下设置共享目录

    Linux系统的文件或目录的共享功能是非常强大 xff0c 而且是非常灵活的 xff0c 其对权限的控制可以做到非常的细致 xff0c 当然如果你是通过命令行方式进行设置的 话 xff0c 那么对于刚接触linux系统的用户来说将是一件十分
  • shell 数组赋值

    shell编程 xff0c 给数组赋值及两个数组初始化与比较 bin sh output files 61 cat outfiles for i 61 0 i lt output files 64 43 43 i do echo 34 ar
  • vnc的两种配置方法及解决vnc连不上的情况

    1 vnc连不上的现象 xff1a Timed out waiting for a response from the computer 解决方法 xff1a sudo sbin iptables I INPUT 1 p TCP dport
  • linux制作本地镜像

    1 前提条件 xff1a 有安装linux系统的iso 2 添加yum文件 xff1a touch etc yum repos d iso repo iso name 61 CentOS releasever Media baseurl 6
  • 使用parted创建分区

    今天在网上查找分区方法 xff0c 发现都是用的fdisk xff0c 但自己使用总是出错 xff0c 后来请求大神帮忙 xff0c 发现了一个好用的工具 xff0c 这里把具体的使用过程记录下来 root 64 pc160 parted
  • “结构体名”和“结构体名是个指针”的区别

    经常看见下面这样的定义 xff1a typedef struct int a double b emp i pemp i typedef 了两个新的数据类型 xff08 结构体 xff09 xff0c 其中一个是指针方式的名字 int ma
  • 简答实用的宏的写法

    本篇文章主要实现打印参数的传递 xff0c 这里定义了一个宏 define debug printf format printf 34 s d 34 format 34 34 func LINE VA ARGS
  • RK1126从入门到放弃:(二)Buildroot说明

    一 目录介绍 buildroot arch 存放CPU架构相关的配置脚本 xff0c 如arm mips x86 xff0c 这些CPU相关的配置 xff0c 在制作工具链时 xff0c 编译uboot和kernel时很关键 board x
  • 二进制基础及位运算

    一 什么是二进制 二进制是计算机运算时所采用的数制 xff0c 基数是2 xff0c 也就是说它只有两个数字符号 xff0c 即0和1 如果在给定的数中 xff0c 除0和1外还有其他数 xff08 例如1061 xff09 xff0c 那
  • Django学习笔记2 HTTP协议

    HTTP协议 web前端系统和后端系统之间是通过HTTP协议进行通信的HTTP 协议全称是超文本传输协议 xff0c 英文是 Hypertext Transfer ProtocolHTTP 协议最大的特点是通讯双方分为客户端和服务端 由于目