前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最全面的HTTP知识总结

最全面的HTTP知识总结

作者头像
Carson.Ho
发布2019-02-22 10:13:20
5060
发布2019-02-22 10:13:20
举报
文章被收录于专栏:Android知识分享Android知识分享

前言

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


目录

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

计算机网络相关知识

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

五层协议体系结构
五层协议体系结构

HTTP存在于最高层的应用层,简单介绍下应用层: - 作用 通过应用层协议定义应用进程间(运行的程序)的通信规则

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

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

HTTP介绍

1. 定义

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

2. 作用

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

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

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

index.png
index.png
5. HTTP报文详解

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

5.1 HTTP请求报文
HTTP请求报文的组成
HTTP请求报文组成.png
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

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

请求行举例

先假设: - URL地址为:http://www.tsinghua.edu.cn/chn/yxsz/index.htm - 请求报文采用GET方法 - 请求报文采用HTTP1.1版本 则请求行是:GET /chn/yxsz/index.htm HTTP/1.1

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

2. 常见请求Header

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

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

代码语言:javascript
复制
{"skill":{
          "web":[
                 {
                  "name":"html",
                  "year":"5"
                 },
                 {
                  "name":"ht",
                  "year":"4"
                 }],
           "database":[
                  {
                  "name":"h",
                  "year":"2"
                 }]
`}}

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

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

代码语言:javascript
复制
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
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
请求和响应报文的通用Header

2. 常见响应Header

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

总结

本文对HTTP的基础知识进行了的讲解,详细、易懂而清晰。接下来我会介绍继续介绍Android开发中的相关知识,有兴趣可以继续关注Carson_Ho的安卓开发笔记

请点赞!因为你们的鼓励是我写作的最大动力!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年06月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 目录
  • 计算机网络相关知识
  • HTTP介绍
  • 请求行举例
    • 5.2HTTP响应报文
      • 状态行举例
        • 总结
        • 请点赞!因为你们的鼓励是我写作的最大动力!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档