Linux知识--HTTP协议分析

标签: HTTP协议分析介绍

第一次发表文章,请多多关照。
首先我们先来介绍一下http协议,相信大家都不陌生。
一、http协议介绍

	Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议,主要用于 Web 服务。通过计算机处理文本信息,格式为 HTML(Hyper Text Mark Language)超文本标记语言来实现。
	
	http:超文本传输协议 ,通常使用在web应用上。	
	html:超文本标记语言。
	当然这都是官方语言,通俗点说,当我们访问一个网页时,这时就用到了http协议,只是我们的关注点不在这里而已。
	http协议的版本0.9、1.0、1.1、2.0,不过0.9版本已经淘汰 ,应用最广泛的版本为1.0 和1.1 版本。
	http0.9 版本 只支持html界面
	1.0版本:**引入MIME(多用途互联网邮件扩展)  支持keep-alive持久连接   支持页面缓存**
	**1.1 版本是1.0版本的升级,支持更多的连接方式、优化了持久连接,优化页面缓存。**
	http 2.0:提供了 HTTP 语义优化的传输,spdy : google 引入了的一个技术,能够加速 http 数据交互,尤其是使用 ssl 加速机制,但是 spdy 现在用的还不多。
目前我们用到最广泛的HTTP协议版本就是1.0和1.1版本了。

二、接下来我们说一下,我们浏览网页时常见的网页类型有哪几种呢?

动态的页面和静态的页面?其实还有一种。
常见的网页页面类型:  **静态页面  动态页面  伪静态页面**
静态页面常见的后缀:
		文本:*html  htm  txt  css  doc*
		图片:*gif  jpg  png*
		视频;  *mp4  flv*
这些后缀有些我们不陌生把。
**静态页面的特点**:开发人员编写什么就是什么,由开发人员预先编写好的,存放在文件系统当中,响应速度快,页面维护比较麻烦,数据交互性差,容易被搜索引擎收录。

**动态页面常见的后缀**:*php  jsp   asp net*
**动态页面的特点**:web服务器自身不支持动态页面的处理,需要有专门的解释器来进行完成,页面数据多变,页面维护比较简单,响应速度慢,数据有交互性,页面访问时包含特殊符号  ? % & ,不能被搜索引擎收录。
**伪静态页面**:将动态页面伪装成静态页面,被搜索引擎收录,消耗硬件资源。

三、http协议报文:请求报文与响应报文

1.**request  Message(请求报文)**
**客户端--服务器端
由客户端向服务器端发出请求,不同的网站页面用于请求不同的资源(html文档)**
当我们打开百度时,在网页输入关键字,回车时,就是相当于我们在请求服务器了。
2.**response  Message(响应报文)**
**服务器端--客户端
是服务器予以响应客户端的请求**
我们回车以后,显示出各种结果,这就是服务器给我们的回应。

请求报文的格式

请求行+请求首部+空白行+请求实体
请求行里面的内容: 请求的方式    请求的URL   访问采用的http协议的版本
请求首部包含一个或者多个。
请求实体:请求的是哪个页面。

在这里插入图片描述
响应报文格式

起始行+响应首部+空白行+响应实体
起始行里面的内容:响应时采用的http协议版本    响应的状态码   状态码的简略信息
响应首部包含一个或者多个
响应实体:真正访问页面包含的内容。

四、常见的请求方式 get put pust delete
常见状态码

400往上就是访问页面失败。   
200访问成功。  
201上传成功。  
301永久重定向。   
304资源在转发的过程中没有被修改。 
401网页认证失败。  
403权限被拒绝。
404资源未找到 。 
502通常是动态服务器处理不了数据或者web配置文件发生错误。
503服务暂时不可用

HTTP 首部介绍

•通用首部
• 请求首部
• 响应首部
• 实体首部:专门用来表示实体中资源内部的类型、长度、编码格式等
• 扩展首部:非标准首部,可有程序员自行创建

通用首部

• Connection:定义 C/S 之间关于请求、响应的有关选项
在 http1.0 的时候,如果他想使用持久连接,那么他所设置的选项即为
Connection:keep-alive
• Cache-Control:缓存控制,实现更精细的缓存控制方式。在 http 1.1 上比较常见

请求首部

• Client-IP :客户端 IP 地址
• Host :请求的主机,这在实现基于主机名的虚拟主机时很有用
• Referer :指明了请求当前资源原始资源的 URL,使用 referer 是可以防盗链
• User-Agent:用户代理,一般而言是浏览器
• Accept 首部:指客户端可以接受哪些编码的类型
		▪ Accept:服务端能够发送的媒体的类型
		▪ Accetp-Charset:接收的字符集
		▪ Accept-Encoding:编码格式
		▪ Accept-Lanage:所能接受的语言编码格式
• 条件式请求首部:(在 http1.1 中才会用到)
	当发送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请求 
• 跟安全相关的请求:
	▪ Authorization
	▪ Cookie

响应首部

• Age:资源响应给你之后可以使用的时长
• Server:向客户端说明自己用到的程序名称和版本
• 协商类的首部:
▪ Vary:首部列表,服务器会根据此列表挑选最适合的版本发给客户端
• 跟安全相关:
▪ WWW-Authentication
▪ Set-Cookie

实体首部

• Location:指明资源的新位置,实现 302 响应码时通常会用到
• Allow:允许对此资源使用的请求方法
• 内容相关的首部
	▪ Content-Encoding
	▪ Content-Language
	▪ Content-Length
	▪ Content-Location:内容所在的位置
	▪ Content-Type
• 缓存相关:
	▪ ETag:扩展标签/标记
	▪ Expires:过期时间
	▪ Last-Modified:最后修改时间

五、
HTTP 的事务

包含了一个 HTTP 请求,和对应请求的响应就叫做一个 http 事务,也可以理解 http 事务就是一个完整的 HTTP 请求和 HTTP 响应的过程。
http 协议默认情况下每个事务都会打开和关闭一个新的连接,所以会相当耗费时间和带宽,
由于 TCP 慢启动特性,所以每条新的连接的性能本身就会有所降低,所以可打开的并行连接的数量上限是有限的。所以使用持久连接这种模式比默认情况下不使用持久连接的方式会好一点,他的好处表现在其请求和 tcp 断开的过程所消耗的时间会被减少。

HTTP 资源

资源就是通过 HTTP 协议可以让用户通过浏览器或用户代理能够通过基于 http 协议向服务器端请求并获取的内容,像 html 文档,一张图片等等。
资源类型:是通过 MIME 进行标记
格式:major/minor 主标记和次标记

常用的 MIME 类型

MIME 类型       							 文件类型
test/html 								html、htm 文本类型
text/plain 								text 文本类型
image/jpeg								 jpeg 图像类型
image/gif 								gif 图像类型
vedio/mpeg4								 音频标记类型
application/vnd.ms-powerpoint			 动态资源的标记方式

URI 和 URL
• URI(Uniform Resource Identifier) 同一资源标示符

用于标识某一互联网资源名称的字符串,通过这种标识来允许你用户对资源可通过特定的协议进行交互操作。
在 Web 上可用的每种资源,包括 HTML 文档、图像、视频片段、程序等, 由一个通用资源标识符进行定位。所以我们可以使用URI 来标识每个资源的名称

• URL(Uniform Resource Locator)(统一资源定位符)

用于描述一个特定服务器上某资源的特定位置。

CGI

Common Gateway Interface 通用网关接口
fastCGI 快速通用网关接口

web 服务器发现需要执行脚本了,就通过 CGI 协议跟后端的应用程序打交道,
把用户的请求动态交给服务器,这个服务器的结果通过 CGI 协议返回给 http 服务器。

六、一次 Web 资源请求的具体过程。

  1. 客户端在 Web 浏览器输入需要访问的地址
  2. Web 浏览器会请求 DNS 服务器,查询解析到指定域名和 Web 服务器的地址
  3. 客户端与请求的 Web 服务器端建立连接(TCP 三次握手)
  4. TCP 建立成功之后,发起 HTTP 请求
  5. 服务器端收到客户端 HTTP 请求之后,会处理该请求
  6. 处理客户端指定请求的资源
  7. 服务器构建响应报文,响应给客户端
  8. 服务器端将此信息记录到日志中

打开浏览器F12,然后再发起http请求,缓存获取到URL:

``响应报文
在这里插入图片描述
关于cookies解释:cookies和session会话介绍

请求报文
在这里插入图片描述

原文链接:加载失败,请重新获取