| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> Http协议分享之——协议组成 -> 正文阅读 |
|
[网络协议]Http协议分享之——协议组成 |
什么是HTTP?超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。 Http历史发展1989年, 当时在欧洲核子研究组织(CERN)工作的 Tim Berners-Lee 博士写了一份关于建立一个通过网络传输超文本系统的报告。这个系统起初被命名为 Mesh,在随后的1990年项目实施期间被更名为万维网(World Wide Web)。它在现有的TCP和IP协议基础之上建立,由四个部分组成:
Http0.9 — 单行协议 请求由单行指令构成,以唯一可用方法GET开头,其后跟目标资源的路径(一旦连接到服务器,协议、服务器、端口号这些都不是必须的)。
响应也极其简单的:只包含响应文档本身。
跟后来的版本不同,HTTP/0.9 的响应内容并不包含HTTP头,这意味着只有HTML文件可以传送,无法传输其他类型的文件;也没有状态码或错误代码:一旦出现问题,一个特殊的包含问题描述信息的HTML文件将被发回,供人们查看。 Http1.0 — 构建可扩展性
在1991-1995年,这些新扩展并没有被引入到标准中以促进协助工作,而仅仅作为一种尝试:服务器和浏览器添加这些新扩展功能,但出现了大量的互操作问题。直到1996年11月,为了解决这些问题,一份新文档(RFC 1945)被发表出来,用以描述如何操作实践这些新扩展功能。文档 RFC 1945 定义了 HTTP/1.0,但它是狭义的,并不是官方标准。 Http1.1 —(标准化的协议) 1997年1月,HTTP/1.1 版本发布,只比 1.0 版本晚了半年。它进一步完善了 HTTP 协议,一直用到了20年后的今天,直到现在还是最流行的版本。
Http支持的请求方法 Http2.0 — 为了更优异的表现
http和https的区别
http协议结构请求报文结构 响应报文结构 Http首部HTTP 首部字段根据实际用途被分为以下 4 种类型:
请求报文和响应报文两方都会使用的首部。
从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。 通用首部字段 请求首部字段 响应首部字段 实体首部字段 常用的字段类型
Accept:text/html :代表浏览器客厅接受服务器回发的类型为text/html也就是我们常说的html文档,如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(Not Acceptable) Accept: * / * :代表浏览器可以处理所有类型 若想要给显示的媒体类型增加优先级,则使用 q= 来额外表示权重值,用分号(;)进行分隔。权重值 q 的范围是 0-1(可精确到小数点后3位),且1为最大值。不指定权重 q 值时,默认权重为 q=1.0。当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。
意思:浏览器支持的 MIME 类型分别是 text/html、application/xhtml+xml、application/xml 和 /,优先顺序是它们从左到右的排列顺序。
1. 控制不在转发给代理的首部字段 在客户端发送请求和服务器响应内,使用 Connection 首部字段,可控制不在转发给代理的首部字段(即 Hop-by-hop首部) 2.管理持久连接。 HTTP/1.1版本的默认连接都是持久连接。为此,客户端会在持久连接上连续发送请求。当服务器端想明确断开连接时,则指定 Connection 首部字段的值为 close
请求被发送至服务器时,请求中的主机名会用 IP 地址直接替换解决。但如果这时,相同的 IP 地址下部署运行着多个域名时,那么服务器就会无法理解究竟是哪个域名对应的请求。因此,就需要使用首部字段 Host 来明确指出请求的主机名。若服务器未设定主机名,那直接发送一个空值即可。
客户端一般都会发送 Referer 首部字段给服务器。但当直接在游览器的地址输入 URI ,或处于安全考虑时,也可以不发送该首部字段。
状态码
常用的状态码1. 204 Not Content 服务器接收的请求已成功处理,但是在返回的报文中不含实体的主体部分(没有response body) 2. 206 Paritial Content 服务器成功执行了部分请求 3. 302 Found 临时性重定向,表示资源已被重新分配了资源,希望可以使用location返回的URI 4. 304 Not Modified 客户的缓存资源是最新的,要客户端直接使用缓存 5. 401 Unauthorized 未授权,需要客户端对自己认证。 该HTTP状态码表示认证错误,它是为了认证设计的,而不是为了授权设计的。收到401响应,表示请求没有被认证—压根没有认证或者认证不正确—但是请重新认证和重试。(一般在响应头部包含一个WWW-Authenticate来描述如何认证)。 6. 403 Forbidden 没有权限,请求被服务端拒绝了 7. 500 Internal Server Error 通用的服务器错误响应,服务器内部在执行时出现了故障 8. 503 Service Unavailable 服务器暂时出于超负荷或者正在停机维护,无法处理请求 浏览器缓存机制为什么要使用HTTP缓存
缓存的内容是什么 html, css, js, img等更新频率不大的静态资源 HTTP缓存头部字段 1. Cache-Control 请求/响应头,缓存控制字段
2. Expires 响应头,代表资源过期时间,由服务端提供,是http1.0的属性,在与max-age共存的情况下,优先级要低 3. Last-Modified 响应头,资源最新修改时间,由服务器告诉浏览器 4. if-Modified-Since 请求头,资源最新修改时间,由浏览器告诉服务器,和Last-Modified是一对,用作对比 5. Etag 响应头,资源标识,由服务器告诉浏览器 6. if-None-Match 请求头,缓存资源标识,由浏览器告诉服务器(其实就是上一次服务器给的Etag),跟Etag是一对,用作对比 使用场景 场景一: 让服务器与浏览器约定一个文件过期时间-Expires
场景三: 让服务器与浏览器在Expires+Last-Modified的基础上,增加一个文件资源的标记Etag/if-None-Match
如果在有效期内,文件内容变动了,浏览器如何感知呢? 缓存改进方案 1. MD5/hash缓存 通过不缓存html,为静态文件增加MD5或者hash标识,解决浏览器无法跳过缓存过期时间主动感知文件改动的问题 2. CDN缓存 全称Content Delivery Network,即内容分发网络。CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。 参考文档 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/27 12:57:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |