IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【Http1】Http协议 -> 正文阅读

[网络协议]【Http1】Http协议

一、简介

Http 即超文本传输协议,一种建立在 TCP 上的无状态连接,属于应用层协议,http传输的内容都是明文的,不安全的。Http 协议用于客户端与服务器端之间的通信,它规定了客户端与服务端之间的通信格式,包括请求和响应的格式。

Http的基本的工作流程是这样的:客户端发送一个 Http 请求,服务端收到请求之后开始处理,处理结果返回给客户端,客户端对结果进行处理。目前流行的 Http 版本是 HTTP/1.1。这里也主要结合Http1.1总结下Http协议。

二、Http报文

报文是在 Http 应用程序之间发送的数据块,它可以分为请求报文和响应报文,不过它们都是由三部分组成:报文首部、空行、报文主体。

1、请求报文
//起始行
POST /tools/mockapi/448/weBankstep HTTP/1.1	
// 请求首部 
Host: www.wanandroid.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: https://www.wanandroid.com/tools/mockapi
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: xxx 
// 请求体
name=sunnyday&age=18
2、响应报文
//起始行
HTTP/1.1 200 OK
//响应首部  
Server: Apache-Coyote/1.1
Cache-Control: private
Expires: Thu, 01 Jan 1970 08:00:00 CST
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked
Date: Fri, 15 Mar 2019 13:30:00 GMT
//响应体
test: {
    "good1": "http://a/b/1.png",
    "good12": "http://a/b/2.png"
}
3、小结

请添加图片描述

请添加图片描述

4、联系实际
  • 在开发中我们平时使用的GET、POST请求方法就是被赋值在请求报文的起始行中
  • 上面请求报文demo就是模拟用户登录的post请求,看到请求体内的内容是不是很熟悉,其实就是你发送post时上传的用户信息。在发送post请求时被封装到HTTP请求报文的请求体中。
  • 最常见的就是浏览器打开网页了吧,其实原理是这样的,比如客户端浏览器请求百度的sever,百度的sever收到请求后找到相应的资源,吧状态码置为200。响应体内返回html string。浏览器解析展示百度网页。
  • 其实响应内容可以是很多类型,如图片、视频、html、json 注意上面响应报文栗子Content-Type: application/json;charset=utf-8 说明响应类型为json,json数据编码为utf-8。

上面的都是最常见的栗子了,至于细分的话见下面首部字段分析。首部字段规定的内容还是比较多的。

三、请求报文方法有哪些?

方法说明支持的http协议版本
GET获取资源1.0、1.1
POST传输请求主体1.0、1.1
PUT传输文件1.0、1.1
HEAD获得报文首部1.0、1.1
DELETE删除文件1.0、1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立和资源之间的联系1.0
UNLINK断开连接关系1.0
1、GET:获取资源
  • 作用:get方法用来请求访问被URI识别的资源。指定的资源经服务端解析后返回响应内容

  • 例如:get请求的资源为纯文本,服务端就原样返回,如果是向CGI(通用网管接口)那样的程序,则返回经过执行后输出的结果。

  • 注意:get 方法时,请求报文的请求体一般为空。get一般不会发送请求体。

2、POST:传输请求主体
  • 作用:用来传输请求主体,请求的主体可为text、file、media等。

  • 注意:虽然get也可以传输请求主体,但一般不用get进行传输,而是使用post方法,post与get功能很相似,get侧重获取内容,post侧重传输请求主体。

3、PUT:传输文件
  • 作用:用来传输文件

  • 注意:put要求请求主体中需包含文件内容。但是http1.1的put方法不具备验证机制任何人都可以上传文件,存在安全性问题,一般web网站不使用这个方法。若配合web应用的验证机制或者采用REST标准设计的web网站就可能会开放使用put方法。

4、HEAD:获得报文首部
  • 作用:用户获取报文首部部分,用户获取URI的有效性、资源更新的日期时间等。

  • 注意:head与get的区别,head不返回报文主体。

5、DELETE:删除文件
  • 作用:用于删除文件,与put请求方法功能相反。在http1.1上与put一样不安全。
6、OPTIONS:询问支持的方法
  • 作用:查询服务器支持的请求方法有哪些
7、TRACE:追踪路径
  • 作用:客户端通过该方法可以查询发出去的请求是怎样被加工/篡改的。因为当请求目标服务器时可能会通过代理服务器中转,trace方法就是用来确认连接过程中的一系列操作的。

  • 流程:发送请求时请求首部的Max-Forwards字段会填入一个数值,每经过一个服务器该数字就会减一,当数字刚好为0时,就停止继续传输,最后接受到请求的服务器则返回状态码200 OK的响应。

  • 栗子:

在这里插入图片描述

//请求
TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards: 2
// 响应
HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 1024

TRACE / HTTP/1.1 //返回响应包含请求内容
Host: hackr.jp  //返回响应包含请求内容
Max-Forwards: 2 //返回响应包含请求内容
  • 注意:trace方法本来就不怎么常用,再加上它容易引发XST(Cross-Site Tracing,跨站追踪)攻击,通常就更不会用到了。
8、CONNECT:要求用隧道协议连接代理服务区旗
  • 作用:CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协
    议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接
    层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容
    加 密后经网络隧道传输。

  • 方法使用格式:

CONNECT 代理服务器名:端口号 HTTP版本
  • 栗子:
// 请求
CONNECT proxy.hackr.jp:8080 HTTP/1.1
Host: proxy.hackr.jp
// 响应
HTTP/1.1 200 OK(之后进入网络隧道)

四、响应报文状态码有哪些?

1、状态码主要分为五类
  • 1XX:信息性状态码,接收的请求正在处理
  • 2XX:成功状态码,请求正常处理完毕
  • 3XX:重定向状态码,需要进行附加操作以完成请求
  • 4XX:客户端错误状态码,服务器无法处理请求
  • 5XX:服务器错误状态码,服务器处理请求出错
3、常见状态码
状态码描述解释
200全部资源请求成功从客户端发来的请求在服务器端被正常处理
204无响应体请求成功服务器接收的请求已成功处理,但在返回的响应报文中无响应体,对应client端的HED请求
206范围资源请求成功客户端进行了范围请求,服务器成功执行了请求。响应报文中包含由 Content-Range 指定范围的响应体内容。
301永久重定向代表请求的资源已经被分为了新的URI,需要使用新的URI进行请求
302临时重定向请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
303临时重定向303 状态码和 302 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。浏览器会把POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。
304临时重定向客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。附带条件的请求是指采用 GET方法的请求报文中包含 If-Match,If-ModifiedSince,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。
307临时重定向浏览器收到响应后不会POST变为GET,大家必须遵守。

发送。

表格待续

报文首部字段

待续。。。。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:36:22  更:2021-09-18 10:39:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 1:44:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码