先来看看百度百科对HTTP的解释

http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。

下面我会以逐步化简和细分流程图的形式告诉你HTTP的原理

当你访问这篇博客时,浏览器向服务器发出请求,服务器收到请求后,返回一个响应内容,浏览器渲染响应的内容后再展现给你。

graph LR
view(用户视图) --打开页面--> webbrowser(浏览器)
webbrowser --请求--> server(服务器)
server --响应--> engine(浏览器内核)
engine --渲染--> view

精简一下

graph LR
webbrowser(浏览器) --请求--> server(服务器)
server --响应--> webbrowser

深入一下请求和响应的过程

graph TD
webbrowser(浏览器) --> send-header(发送请求头)
send-header --> send-content(发送请求内容)
send-content --> server(服务器)
server --> res-header(发送响应头)
res-header --> res-content(发送响应内容)
res-content --> webbrowser

看到这里,你肯定会疑惑“请求头和响应头是什么?”

我们先来看看请求头的内容是什么

你可以用以下两种方式查看自己的请求头:

  1. (以chrome为例)打开开发者模式,前往任意一个网站,选择network,筛选为Doc, 点击一个html,在右侧栏中你会看到request headers。
  2. 前往http://httpbin.org/headers,它会返回你的请求头。

这里我们采用第2种,下面是返回的信息(为了方便理解,我添加了注释)

我们可以看到请求头采用了键值对的格式:

键:就是存的值的编号

值:就是要存放的数据

冒号前的就是键(编号),冒号后的就是值(数据)

ps:第1种和第2种方法查看的请求头格式可能不太一样,但是内容应该是一样的

{
"headers": {
//接受的文件格式
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate", //接受的编码方式
"Accept-Language": "zh-CN,zh;q=0.9", //接受的语言
"Cache-Control": "no-cache", // 缓存控制,告诉服务器不要使用缓存
"Host": "httpbin.org", //请求的域名
"Pragma": "no-cache", //这是为了兼容http/1.1之前的版本,现用Cache-Control
"Upgrade-Insecure-Requests": "1", //未知
//用户代理,也就是告诉服务器用户使用什么工具发起的请求,如果你用浏览器访问,得到的一般是浏览器内核
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
"X-Amzn-Trace-Id": "************************" //这是一个跟踪ID,暂时不知道有什么用,好像是负载均衡用的
}
}

观察上面的键值对和我写的注释,可以发现请求头告诉了服务器一些基本信息

那么响应头是什么呢?我们还是先看看它的内容。

响应头查看方式:

  1. (以chrome为例)打开开发者模式,前往任意一个网站,选择network,筛选为Doc, 点击一个html,在右侧栏中你会看到response headers。
HTTP/1.1 200 OK
Date: Sat, 06 Jun 2020 02:53:40 GMT
Content-Type: application/json
Content-Length: 580
Connection: keep-alive
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

我们来分析一下响应头

第1行:HTTP协议版本 状态码 状态码描述

第2到最后一行:键:值

你有没有发现什么相似之处?对了!请求头和响应头都是键值对格式。

在http中,这种键值对叫作字段,键就是字段名称,值就是字段值。

到这,我们可以整合出两张图(图源网络)

HTTP请求格式

HTTP响应格式

HTTP协议浅析(一)的更多相关文章

  1. 计算机网络通信TCP/IP协议浅析 网络发展简介(二)

    本文对计算机网络通信的原理进行简单的介绍 首先从网络协议分层的概念进行介绍,然后对TCP.IP协议族进行了概念讲解,然后对操作系统关于通信抽象模型进行了简单介绍,最后简单描述了socket   分层的 ...

  2. Http协议浅析

    目录 Http协议浅析 http协议简介 http协议特性 http请求协议与响应协议 请求协议 响应协议 响应状态码 请求URI定位资源 HTTP方法 GET:获取资源 POST:传输实体主体 PU ...

  3. protobuf 协议浅析

    目录 Protobuf 协议浅析 1. Protobuf 介绍 1.1 Protobuf 基本概念 1.2 Protobuf 的优点 1.3 Protobuf, JSON, XML 的区别 2. Pr ...

  4. 【转载】远程桌面协议浅析(VNC/SPICE/RDP)

    远程桌面协议浅析(VNC/SPICE/RDP) 2016年05月14日 01:27:06 wait_for_that_day5 阅读数:18317 标签: VNCRDPSPICE 更多 个人分类: 工 ...

  5. 远程桌面协议浅析(VNC/SPICE/RDP)

    由于最近项目涉及到虚拟桌面,就花了点时间找了点资料看了一下,目前常用的协议有VNC/SPICE/RDP三种,就在这里做一个简单的介绍. 三种协议的对比 SPICE VNC RDP BIOS屏幕显示 能 ...

  6. CAN-FD协议浅析

    引言 随着电子.半导体.通讯等行业的快速发展,汽车电子智能化的诉求也越来越强,消费者希望驾驶动力性.舒适性.经济性以及娱乐性更强的汽车.汽车制造商为了提高产品竞争力,将越来越多的电子控制系统加入到汽车 ...

  7. UIApplicationDelegate 协议 浅析

    @protocol UIApplicationDelegate<NSObject> @optional - (void)applicationDidFinishLaunching:(UIA ...

  8. web开发微信文章目录

    Web开发微信文章目录 2015-12-13 Web开发 本文是Web开发微信的文章目录.通过目录查看文章编号,回复文章编号就能查看文章全文. 回复编号查看全文,搜索分类名可以获得该分类下的文章.   ...

  9. [转] 浅析HTTP协议

    浅析HTTP协议 来源:http://www.cnblogs.com/gpcuster/archive/2009/05/25/1488749.html HTTP协议是什么? 简单来说,就是一个基于应用 ...

随机推荐

  1. 数独c++

    #include <bits/stdc++.h> using namespace std; const int maxn = 10; bool maps[maxn][maxn], row[ ...

  2. 利用logrotate将mysql log截断

    https://blog.pythian.com/mysql-log-rotation/ 1.授权用户 CREATE USER 'log_rotate'@'localhost' IDENTIFIED ...

  3. mysql小白系列_05 日常操作

    mysql启动/关闭 my.cnf的调用顺序 [root@docker02 bin]# ./mysql --help Default options are read from the followi ...

  4. js 简单有效判断日期有效性(含闰年)

    原文:https://zhidao.baidu.com/question/1701946584925153620.html 要想精确验证,最容易想到的方法就是通过月份判断日期是否合法(1~28/29/ ...

  5. 关于Android的真机测试

    步骤: 1.开启手机USB调试 2.数据线连接手机和电脑 3.eclipse需要重启 4.在eclipse的run里面的runconfig...里面设置为启动时总是提醒开发者选择 具体事例: 我的手机 ...

  6. 蓝桥杯 试题 历届试题 填字母游戏 博弈+dfs剪枝

    问题描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: “我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了”. K大师在纸上画了一行n个格子,要小明和他交替往其中填入 ...

  7. Spring MVC介绍和第一个例子

    1.Spring mvc概述 spring mvc是spring提供给web应用框架设计,实际上MVC框架是一个设计理念.它不仅存在java世界中而且广泛在于各类语言和开发中,包括web的前端应用.对 ...

  8. pandas删除DataFrame中任意字段等于'null'字符串的行

    删除df中任意字段等于'null'字符串的行: df=df.astype(str)#把df所有元素转为str类型 df=df[df['A'].isin(['null','NULL'])] #找出df的 ...

  9. AdaBoost理解

    AdaBoost是一种准确性很高的分类算法,它的原理是把K个弱分类器(弱分类器的意思是该分类器的准确性较低),通过一定的组合(一般是线性加权进行组合),组合成一个强的分类器,提高分类的准确性. 因此, ...

  10. Robot Framework(15)- 扩展关键字

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 前言 什么是扩展 ...