你需要了解的HTTP知识都在这里了!

前言

HTTP网络通信协议在任何的开发工作中都起到非常重要的作用,今天,我们来讲解下关于HTTP的相关知识。


目录

5分钟全面了解HTTP相关知识.png


计算机网络相关知识

计算机网络体系结构分为五层,自上而下分别是应用、运输、网络、数据链路和物理层,如下图:

五层协议体系结构

HTTP存在于最高层的应用层,简单介绍下应用层:

  • 作用
    通过应用层协议定义应用进程间(运行的程序)的通信规则

    应用层协议主要有HTTP、SMTP、FTP协议等等

  • 交互的数据单元称为报文
  • 基本上是基于C/S方式

HTTP介绍

1. 定义

即HyperText Transfer Protocol,超文本传输协议,属于应用层协议的一种

2. 作用

规定了应用进程间通信(请求&响应)的准则

3. 特点

  • 无连接:HTTP本身是无连接的,即交换HTTP报文前不需要建立HTTP连接
  • 无状态:HTTP协议是无状态的:数据传输过程中,并不保存任何历史信息和状态信息。无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。
  • 传输可靠性高:采用TCP作为运输层协议(面向连接、可靠传输),即交换报文时需要预先建立TCP连接
  • 兼容性好:支持B/S模式及C/S模式;
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST
  • 灵活:HTTP 允许传输任意类型的数据对象

4. 工作方式

HTTP协议采用了请求/响应的工作方式,工作流程如图:

index.png

5. HTTP报文详解

HTTP的报文分为请求报文和响应报文

5.1 HTTP请求报文

HTTP请求报文的组成

HTTP请求报文组成.png

  • 请求行:用于声明”请求报文“、主机域名、资源路径和协议版本
  • 请求头:说明客户端、服务器或报文的部分信息
  • 请求体:用于存放需要发送给服务器的数据信息
1. 请求行
  • 组成

请求行的组成

空格不能省

  • 组成介绍

1.1 请求方法
即对请求对象的操作,请求方法有8种:

方法类别 意义
OPTION 请求“选项”的信息
HEAD 请求读取”URL标志信息的首部“信息
GET 请求读取“URL标志的信息“的信息
POST 为服务器添加信息
PUT 为指定的URL下添加(存储)一个文档
DELETE 删除指定URL所标志的信息
TRACE 用于进行环回测试的请求报文
CONNECT 用于代理服务器

最常用的就是GET和POST方法

1.2 请求路径
要了解请求地址,先来了解下URL概念:

  • 定义:Uniform Resoure Locator,统一资源定位符,是一种自愿位置的抽象唯一识别方法。
  • 作用:用于表示资源位置和访问这些资源的方法
  • 组成:
    <协议>://<主机>:<端口>/<路径>
    1. 协议:采用的应用层通信协议,比如在HTTP协议下的URL地址:
      HTTP://<主机>:<端口>/<路径>
    2. 主机:请求资源所在主机的域名
    3. 端口和路径有时可以省略(HTTP默认端口号是80)

从上面可以了解到,路径则是端口号后面符号”/“的部分,下面举例

URL(统一资源定位符) PATH(路径)
http://www.baidu.com/ /
http://www.weibo.com/2874748/home /2874748/home

1.3 协议版本
HTTP协议版本主要是1.0、1.1、2.0

具体区别这里不多解释,大家有兴趣可以去了解下

请求行举例

先假设:

2. 请求头
  • 作用:说明客户端、服务器或报文的部分信息
  • 使用方式:采用”header(字段名):value(值)“的方式
  • 常用请求头
    1. 请求和响应报文的通用Header

请求和响应报文的通用Header

2. 常见请求Header

常见请求Header

3. 请求体
  • 作用:用于存放需要发送给服务器的数据信息
  • 使用方式:目前来说,一共有三种

1. 数据交换格式
请求体是可以是任意类型的,但服务器需要额外进行解析,如JSON

{"skill":{
          "web":[
                 {
                  "name":"html",
                  "year":"5"
                 },
                 {
                  "name":"ht",
                  "year":"4"
                 }],
           "database":[
                  {
                  "name":"h",
                  "year":"2"
                 }]
`}}

想详细了解Android开发中的JSON解析可以看下我写的另外一篇文章:
Android开发:JSON简介及最全面解析方法!

2.键值对形式
键与值之间用”=“连接,每个键值对间用&连接,且只能用ASCII字符,如Query String

key1=value1&key2&value2

3. 分部分形式
请求体被分为多个部分,应用场景是文件上传,比如邮件上传等等

  • 每段以-- {boundary}开头
  • 然后是该段的描述头
  • 描述头之后空一行接内容
  • 每段以-- {boundary}--结束

如下:

分部分格式

请求报文实例

结合上述说的请求行、请求头和请求体,现假设

  • URL地址为:http://www.tsinghua.edu.cn/chn/yxsz/index.htm
  • 请求报文采用GET方法
  • 请求报文采用HTTP1.1版本
  • 请求报文希望表明主机域名和用户代理是使用Netscape浏览器
  • 请求体采用键值对形式

则请求报文如下:

请求报文

5.2HTTP响应报文

HTTP响应报文的组成

HTTP响应报文组成.png

从上面可以看出,与请求报文相比,除了第一行(请求行VS状态行)以外,响应报文的其他结构与请求报文非常相似。其中,响应体是用于存放需要返回给客户端的数据信息的。

1. 状态行
  • 组成

状态行组成

其中,空格不能省

1.1 协议版本
HTTP协议版本主要是1.0、1.1、2.0

具体区别这里不多解释,大家有兴趣可以去了解下

1.2 状态码
状态码分为5大类:

类别 含义
1xx 表示信息通知,如请求收到了或正在进行处理
2xx 表示成功,如接受或知道了
3xx 表示重定向,如要完成请求还必须采取进一步行动
4xx 客户的差错,如请求中有错误的语法或不能完成:404
5xx 表示服务器的差错,如服务器失效无法完成请求

1.3 状态信息
对状态码的简单解释

具体详细的状态码信息可以看状态码详解

状态行举例

  • HTTP/1.1 202 Accepted(接受)
  • HTTP/1.1 301 Bad Request(永久性转移)
  • HTTP/1.1 404 Not Found(找不到)
2. 响应头
  • 作用:说明客户端、服务器或报文的部分信息
  • 使用方式:采用”header(字段名):value(值)“的方式
  • 常用请求头
    1. 请求和响应报文的通用Header

请求和响应报文的通用Header

2. 常见响应Header

常见响应Header

3. 响应体
  • 作用:用于存放需要返回给客户端的数据信息
  • 使用方式:和请求体是一致的,同样分为:任意类型的数据交换格式、键值对形式和分部分形式,这里不作过多描述。
时间: 2024-11-09 19:26:42

你需要了解的HTTP知识都在这里了!的相关文章

关于变量的知识都在这里了,不看后悔终生!

前两天有一个朋友问了我4个问题,如下: 1.什么是变量?2.变量有哪些分类?3.环境变量是什么?4.普通变量是什么?5.写好变量的要求和标准有什么? 由于他忘性比较大,所以我简单整理做成了一篇博客,让他每天早晚看一遍,ready go! #1.什么是变量? 简而言之就像我们小学学过的方程式,比如:x=1+1x就是变量名,=就是赋值符号,1+1就是内容,这就是一个简单的变量. #2.变量的分类变量分为4类:环境变量和普通变量,全局变量和局部变量开个玩笑,其实 变量分为两类:环境变量(亦称全局变量)

Android性能优化:阿里、腾讯等关于内存泄露的知识都在这里了!

建议收藏,不然就找不到了!!! 前言 在 Android 中,内存泄露的现象十分常见:而内存泄露导致的后果会使得应用Crash本文 全面介绍了内存泄露的本质.原因 & 解决方案,最终提供一些常见的内存泄露分析工具,希望你们会喜欢. 目录 1. 简介 即 ML (Memory Leak)指 程序在申请内存后,当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象 2. 对应用程序的影响 容易使得应用程序发生内存溢出,即 OOM内存溢出 简介: 3. 发生内存泄露的本质原因 具体描述 特

web前端知识总结

1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的是想要颠覆人们对于前端只有三大块(html.css.js)的认识--做web前端需要的比这三大块要多得多. 拖了好几个月了,但是由于近期将要参加的某一个活动,我不得不这两天把这个东西整出来. 大家不要害怕,其实下文中的这个知识框架要比草图中的好看的多,草图大家权当没看见. 在看内容之前,先看一下这个知识框架的

第23篇 js快速学习知识

前面说了js的一些高级方面的基础知识,这些都是比较容易出错的和比较难理解的东西,除了这些之外其它的知识都比较简单了,基础学好了,扩展起来就是小意思.今天说说js方面可以快速学习和入门的知识. 1.闭包 对于闭包来说,很多人对它有误解,有的说的怎么怎么好,但是我觉得这个东西说的那么悬无非是忽悠人的,对于闭包我看到有一篇博客上面说的很好: (1)闭包是一种设计原则,它通过分析上下文,来简化用户的调用,让用户在不知晓的情况下,达到他的目的: (2)网上主流的对闭包剖析的文章实际上是和闭包原则反向而驰的

项目中几个需要学习的新知识

首先说今天学习的是做一个图书商城的小项目,但是之前学习的好多知识都要使用上面的啦,嘿嘿,顿时感觉有点成就感,因为之前学习的好多的知识点还是蛮碎的,现在可以通过做程序练习练习,这是在还不过的,在小项目做今天学习了很多的新知识,也许以后工作以后我会使用到这些吧,想清晰点的总结一下,以免忘记可以重新在这里找回,好啦总结一下今天学习的新知识. 一.发送邮件激活注册的账号 public static void SendManyEmail(string id, params string[] EamilTo

编程要自学或报班这事你都想不明白, 那必然是你智商不够

跟着这逼学python掐指一算已经有5个月了,上网搜了下,原来是很早就写过的文章--but i dot't care.金三银四,各大互联网巨头开始招实习了,最近学习有点燥-- 昨天有人在我的技术群里又讨论起了学python是自学还是报培训的话题, 事端引起是一个小白网友说自己没什么基础,想学一下python,然后有人说这东西简单,建议他自己买本书跟着学学就行了,也有人说想快速提升还是报班快, 双方就这样各执一词,一会就吵起来了,坚持 自学的说培训学校都 是骗钱的,说那些推荐报班人都是培训机构的托

技术人,为什么需要构建知识图谱

这个时代,信息极大丰富,人每时每刻都被各种各样的知识.信息轰炸着.如何有效的选择对自己有价值的知识,如何构建一个独属于自己的知识体系并让它为自己创造价值,变得越来越重要.只有知识经过了你的选择和应用,内化为自己的隐性经验,纳入到你的知识体系中,才能真正地为你创造财富. 怎样才能建立自己的知识体系呢? 选择方向,设定目标 学习.实践.输出.内化 同主题扩散 运用工具整理记录知识图谱 迭代与更新知识图谱 有目标,才有知识体系 如果只能选择一个方向,你希望在什么方向上做到出类拔萃? 对这个问题的思考,

在知识管死的道路上裸奔

   T公司做CPC已经7年了,号称是囊括了PDM.KM.CPC(产品协同商务)的CPC产品,进去用过后发现不过是鸡肋,里面似乎PDM.KM.CPC啥都有点,但却又啥都不像不地道.暂且先说说知识管理吧,不过是一个类VSS的文件夹管理软件加上文件夹的权限管理即可号称知识管理来招摇撞骗,其结果是不明就里的T公司据说陷在知识的海洋里了,不能搜索.不能识别知识.不能为员工所用,结果全民皆兵的"建档伟业"从文档创建的那一刻起,这份知识就注定寿终正寝了!公司S总戏称为白菜萝卜都可进的图书馆! 所以

网页设计基础知识总结

在网页设计中,总有一些技术是我们常用的,而且作用也是很重要的,所以来总计一下这些技术都有哪些,对以后的网页设计的学习帮助更大. 字体:Css中的字体属性可以应用到各种有文字的地方. 1.HTML标签<b>:<bstyle="color:rgb(0,0,255)">蓝色的粗体文字</b>. 2.字体的变形:font-variant. 3.字体类型:font-family:黑体.宋体.隶书,默认的宋体. 4.字体粗细:font-weight:粗体bole