http协议分析

秒速五厘米 2023-05-28 15:47 79阅读 0赞

目录

http 协议介绍

http 协议的版本

html 文本架构

  1. html 文档的生成方式

http 协议的报文

HTTP协议原理和流程

HTTP的连接类型:

HTTP 请求方法(常用)

HTTP 的状态码(常见)

HTTP 首部介绍

HTTP统计术语

区分URI和 URL


http 协议介绍

http : Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议,

主要用于 Web 服务。通过计算机处理文本信息,格式为 HTML ( Hyper Text Mark Language )

超文本标记语言来实现。(发明者:蒂姆.伯纳斯.李)

èå§Â·ä¼¯çº³æ¯Â·æ

http 协议的版本

http 0.9:仅于用户传输 html 文档

http 1.0:

  1. 引入了 MIME(Multipurpose Internet Mail Extesions) 机制:多用途互联网邮件扩展,引

入这个技术之后, http 可以发送多媒体(比如视频、音频等)信息。此机制让 http

不在单单只支持 html 格式,还可以支持其他格式来进行发送了。

  1. 引入了 keep-alive 机制,支持持久连接的功能(但这个 keep-alive 原理是在首部添加了

某个字段而形成的,并非原生就支持此功能)

  1. 引入支持缓存功能

http 1.1:

支持更多的请求方法,更加精细的缓存控制,原生直接支持持久连接功能( presistent )。

http 2.0:

  1. 提供了 HTTP 语义优化的传输, spdy : google 引入了的一个技术,能够加速 http 数据交互,

尤其是使用 ssl 加速机制,但是 spdy 现在用的还不多。

目前常用的版本就是 http 1.0 版本和 http 1.1 版本

html 文本架构

TITLE<title></strong></p> <p><strong> </head></strong></p> <p><strong> <body></strong></p> <p><strong> <h1>H1</h1></strong></p> <pre><code> <p> </p1> <h2>H2</h2> <p>< a href="admin.html>ToGoogle< /a ></p> </code></pre><p> </body></p> <p></html></p> </blockquote> <h2 id="h2--strong-html-strong-strong-strong-"><a name="<strong>html</strong> <strong>文档的生成方式</strong>" class="reference-link"></a><span class="header-link octicon octicon-link"></span><strong>html</strong> <strong>文档的生成方式</strong></h2><p><strong>静态</strong> </p> <p>事先就编辑并定义完成的 </p> <p>1 、 Web 服务器向内核注册 socket </p> <p>2 、客户端通过浏览器,向 Web 服务器发起 request 请求 </p> <p>3 、 Web 服务器收到客户端的 request 信息 </p> <p>4 、如果用户请求的资源在服务器本地的话, http 服务会向系统内核申请调用 </p> <p>5 、内核调用本地磁盘里的数据,并将数据发给 http 服务 </p> <p>6 、 http 将用户请求的资源通过 response 报文,最终响应给客户端 </p> <p><img src="https://image.dandelioncloud.cn/images/20230528/4574eb3edc4640f6a403aadc8e99d817.png" alt="watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzgxNTE0MA_size_16_color_FFFFFF_t_70"></p> <p><strong>动态</strong></p> <p>通过编译语言编写的程序后输出 html 格式的结果 </p> <p>动态语言有: php , jsp , asp , .net </p> <p>备注:这些脚本都必须有相应的解释器,比如说 php 需要有 php 解释器等等 </p> <p>与静态不同的是,如果用户请求的是动态内容,那么此时 http 服务会调用后端的 解析器,</p> <p><img src="https://image.dandelioncloud.cn/images/20230528/fabdab07f01547a8ac0e78c533d67ba4.png" alt="watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzgxNTE0MA_size_16_color_FFFFFF_t_70 1"></p> <h2 id="h2--strong-http-strong-strong-strong-"><a name="<strong>http</strong> <strong>协议的报文</strong>" class="reference-link"></a><span class="header-link octicon octicon-link"></span><strong>http</strong> <strong>协议的报文</strong></h2><p>HTTP 报文中存在着很多行的内容,一般是由 ASCII 码串组成,各字段长度是不确定的。</p> <p>HTTP 的报文可分为两种:请求报文与响应报文</p> <blockquote> <p>request Message( 请求报文 ) </p> <p>客户端 - → 服务器端 </p> <p>由客户端向服务器端发出请求,不同的网站用于请求不同的资源( html 文档) </p> <p>response Message( 响应报文 ) </p> <p>服务器端 - → 客户端 </p> <p>是服务器予以响应客户端的请求 </p> </blockquote> <h2 id="h2--strong-http-strong-"><a name="<strong>HTTP协议原理和流程</strong>" class="reference-link"></a><span class="header-link octicon octicon-link"></span><strong>HTTP协议原理和流程</strong></h2><p><strong>(1)用户输入用户名->浏览器跳转->app缓存->DNS解析(递归查询|迭代查询)<br>(2)由浏览器向服务器发起tcp连接(三次握手)<br>(3)客户端发起HTTP请求:<br> 请求的方法(获取)<br> 请求的主机:域名<br> 请求的资源类型(html)<br> 请求的端口(80、443)<br> 请求携带的参数(类型、压缩、认证等)<br>(4)服务器的响应:<br> 服务器的web软件<br> 响应的文件类型<br> 是否压缩<br> 是否长连接<br>(5)客户端向服务器发起tcp断开(四次握手)</strong></p> <h2 id="h2-http-"><a name="HTTP的连接类型:" class="reference-link"></a><span class="header-link octicon octicon-link"></span>HTTP的连接类型:</h2><blockquote> <p>短连接:建立一次tcp的连接,发起一次HTTP的请求,结束,tcp断开<br>长连接:建立一次tcp的连接,发起多次HTTP的请求,结束,tcp断开</p> </blockquote> <h2 id="h2--strong-http-strong-strong-strong-"><a name="<strong>HTTP</strong> <strong>请求方法(常用)</strong>" class="reference-link"></a><span class="header-link octicon octicon-link"></span><strong>HTTP</strong> <strong>请求方法(常用)</strong></h2><blockquote> <p><strong>get 获得请求文件信息的数据内容(下载)</strong></p> <p><strong> post 用户提交数据到服务器(上传)</strong></p> </blockquote> <h2 id="h2--strong-http-strong-strong-strong-"><a name="<strong>HTTP</strong> <strong>的状态码(常见)</strong>" class="reference-link"></a><span class="header-link octicon octicon-link"></span><strong>HTTP</strong> <strong>的状态码(常见)</strong></h2><p><strong>200 请求成功<br>201 上传文件成功<br>301 永久重定向(redirect)<br>302,307 临时重定向(redirect)<br>304 浏览器缓存<br>403 请求不到首页,没有权限<br>404 请求的资源在前端查明不存在<br>405 请求方法不支持<br>500 服务器的内部错误,程序错误<br>502 请求的资源前端有记录指向后端数据库,却找不到后端资源<br>503 服务暂时不可用<br>504 请求超时</strong></p> <h2 id="h2-http-"><a name="HTTP 首部介绍" class="reference-link"></a><span class="header-link octicon octicon-link"></span>HTTP 首部介绍</h2><p>• 通用首部<br>• 请求首部<br>• 响应首部<br>• 实体首部:专门用来表示实体中资源内部的类型、长度、编码格式等<br>• 扩展首部:非标准首部,可有程序员自行创建<br><strong>通用首部</strong></p> <p><strong>• Connection:定义 C/S 之间关于请求、响应的有关选项在 http1.0 的时候,如果他想使用持久连接,那么他所设置的选项即为Connection:keep-alive</strong></p> <p><strong>• Cache-Control:缓存控制,实现更精细的缓存控制方式。在 http 1.1 上比较常见</strong></p> <p><strong>请求部首</strong></p> <ul> <li>Client-IP :客户端 IP 地址</li><li>Host :请求的主机,这在实现基于主机名的虚拟主机时很有用</li><li>Referer :指明了请求当前资源原始资源的 URL,使用 referer 是可以防盗链</li><li>User-Agent:用户代理,一般而言是浏览器</li><li><p>Accept 首部:指客户端可以接受哪些编码的类型</p> <ul> <li>Accept:服务端能够发送的媒体的类型</li><li>Accetp-Charset:接收的字符集</li><li>Accept-Encoding:编码格式</li><li>Accept-Lanage:所能接受的语言编码格式</li></ul> </li><li>条件式请求首部:(在 http1.1 中才会用到)</li></ul> <p>当发送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请求</p> <ul> <li><p>跟安全相关的请求:</p> <ul> <li>Authorization</li><li>Cookie</li></ul> </li></ul> <p><strong>响应首部</strong></p> <ul> <li>Age:资源响应给你之后可以使用的时长</li><li>Server:向客户端说明自己用到的程序名称和版本</li><li><p>协商类的首部:</p> <ul> <li>Vary:首部列表,服务器会根据此列表挑选最适合的版本发给客户端</li></ul> </li></ul> <ul> <li><p>跟安全相关:</p> <ul> <li>WWW-Authentication</li><li>Set-Cookie</li></ul> </li></ul> <p> <strong>实体首部</strong></p> <ul> <li>Location:指明资源的新位置,实现 302 响应码时通常会用到</li><li>Allow:允许对此资源使用的请求方法</li><li><p>内容相关的首部</p> <ul> <li>Content-Encoding</li><li>Content-Language</li><li>Content-Length</li><li>Content-Location:内容所在的位置</li><li>Content-Type</li></ul> </li><li><p>缓存相关:</p> <ul> <li>ETag:扩展标签/标记</li><li>Expires:过期时间</li><li>Last-Modified:最后修改时间</li></ul> </li></ul> <h2 id="h2-http-"><a name="HTTP统计术语" class="reference-link"></a><span class="header-link octicon octicon-link"></span>HTTP统计术语</h2><p><strong>PV:页面浏览量<br>UV:独立客户浏览量<br>IP:独立ip浏览量</strong><br>例子:50人,每人通过手机和电脑访问同一网站各两次,全部都用公司宽带上网,会产生多少pv、uv、ip?<br> 答案:200 100 1 </p> <h2 id="h2--strong-uri-strong-strong-strong-url-"><a name="<strong>区分URI**</strong>和<strong> </strong>URL**" class="reference-link"></a><span class="header-link octicon octicon-link"></span><strong>区分URI**</strong>和<strong> </strong>URL**</h2><ul> <li><strong>URI(Uniform Resource Identifier) 同一资源标示符</strong></li></ul> <p>用于标识某一互联网资源名称的字符串,通过这种标识来允许你用户对资源可通过特定的协议进行交互操作。在 Web 上可用的每种资源,包括 HTML 文档、图像、视频片段、程序等, 由一个通用资源标识符进行定位。所以我们可以使用</p> <p>URI 来标识每个资源的名称</p> <ul> <li><strong>URL(Uniform Resource Locator)(统一资源定位符) 用于描述一个特定服务器上某资源的特定位置。</strong></li></ul> <p>例如:http://www.baidu.com:80/download/bash-4.3.1-1.rpm</p>

发表评论

表情:
评论列表 (有 0 条评论,79人围观)

还没有评论,来说两句吧...

相关阅读