目录
1.什么是http协议?
2.http协议的版本?
3.http文本框架
4.http请求报文
5.http报文格式
6.http响应报文
7.HTTP的状态码
8.HTTP首部介绍
9.什么是URL和URI?
10.CGI是什么?
1.什么是http协议?
http:Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议, 主要用于 Web 服务。通过计算机处理文本信息,格式为 HTML(Hyper Text Mark Language) 超文本标记语言来实现。
2.http协议的版本?
http 0.9:仅于用户传输 html 文档
http 1.0 :
1.引入了 MIME(Multipurpose Internet Mail Extesions)机制:多用途互联网邮件扩展,引 入这个技术之后,http 可以发送多媒体(比如视频、音频等)信息。此机制让 http 不在单单只支持 html 格式,还可以支持其他格式来进行发送了。
2.引入了 keep-alive 机制,支持持久连接的功能(但这个 keep-alive 原理是在首部添加了 某个字段而形成的,并非原生就支持此功能)
3.引入支持缓存功能 http 1.1 支持更多的请求方法,更加精细的缓存控制,原生直接支持持久连接功能(presistent)。
http 2.0 :
提供了 HTTP 语义优化的传输,spdy : google 引入了的一个技术,能够加速 http 数据交互, 尤其是使用 ssl 加速机制,但是 spdy 现在用的还不多。
目前常用的版本就是 http 1.0 版本和 http 1.1 版本。
3.http文本框架
<html><head><title></title></head><body><h1>hello</h1></body>
</html>
4.http请求报文
1.request Message(请求报文) 客户端 -→ 服务器端
由客户端向服务器端发出请求,不同的网站用于请求不同的资源(html 文档)
2.response Message(响应报文) 服务器端 -→ 客户端
是服务器予以响应客户端的请求
5.http报文格式
请求行+请求头+空白行+请求实体
1.请求行
请求行主要有三部分组成:请求方式+URL字段+HTTP协议版本
组成:
<method>:这次请求的方式
<request-URL>:请求资源的路径
<version>:请求的协议版本
http请求方式:
HTTP请求方法 | 描述 |
---|---|
GET | 用于客户端请求指定资源信息,并返回指定资源的实体 |
HEAD | 跟GET相似,但是不需要返回客户端请求的资源,只返回响应首部,(告诉客户端我有或者没有) |
POST | 基于HTML表单向服务器提交数据,通常是需要存储数据的时候,像mysql存储 |
PUT | 与GET相反,是向服务器发送资源,服务器存储此数据,像百度网盘,阿里云盘 |
DELETE | 请求服务器删除URL指定的资源 |
MOVE | 请求服务器将指定的页面移至到另一个网络位置 |
OPTIONS | 探测服务器端对请求的URL所支持使用的请求方法 |
TRACE | 第一次请求中间所经历的代理服务器,防火墙或网关等 |
2.请求头
请求头由关键字+关键字的值组成,直接使用 : 隔开,格式:Name:value,请求头的作用是通过客户端将请求的相关内容告知服务器,首部不止有一个。
3.空白行
请求头之后会有一个空白行,通过方式回车和换行字符,用于通知服务器端以下的内容不会再出现请求首部的信息
4.请求实体
真正请求的内容
6.http响应报文
格式:起始行 + 响应首部 + 空白行 + 响应实体
1.起始行
也被称为状态行,用于服务器响应客户端请求的状态信息,由版本号<version>+状态码<status>+原因短语<reason-phrase>组成
<Version>:响应客户端请求的是什么版本,服务器就响应什么版本 <status>:状态码,200,404等 <reason-phrase>:响应的状态码的信息是深, 原因短句 <headers>:一大堆的响应首部 <entity-body>:响应体
2.响应首部
类似于请求报文,起始行后面一般有若干个头部字段。每一个头部字段都包含一个名字和一个值。格式:name:value
Content-Type: test/html; charset=utf-8 Content-Length: 78
3.空白行
最后一个响应首部信息之后就是一个空行,通知客户端无首部信息了
4.响应体
响应实体中装载了要返回给客户端的数据,这些数据可以是文本,也可以是二进制
7.HTTP的状态码
状态码 | 说明 |
---|---|
1XX | 信息性状态码,用于指定客户端相应的某些操作 |
2XX | 成功状态码,我请求一个资源,这个资源在,这就表示请求成功 |
3XX | 重定向的状态码,有时会返回一个新的地址 |
4XX | 客户端类错误,你请求的资源不存在,或者你请求的时候,我们这个资源拒绝你访问,你没有权限 |
5XX | 服务器类错误信息。向服务器发起请求,服务器发现需要运行一个脚本,从而调用解析库,如果在调用过程中出错就会出现这种情况,或者你的脚本有错误,也可能导致这种问题 |
常用状态码
状态码 | 说明 |
---|---|
200 | 服务器成功返回网页,这是成功的HTTP请求返回的标准状态码 |
201 | created上传文件成功后显示 |
301 | Move permanently,永久重定向,会返回一个新地址,并告诉我们你所请求的地址将永久挪到哪个新地址去了 |
302 | fonud,临时重定向,临时放到某个地方,会在响应报文中使用”location:新位置“ |
304 | not modified 资源没有做任何修改 |
403 | forbidden 请求拒绝 |
404 | not found 请求资源不存在 |
405 | method not allowed 你使用的方法不被允许,不支持 |
500 | internal server error:服务器内部错误 |
502 | Bod gateway,代理服务器从上游服务器收到一条伪响应,上一层服务器返回了一个无法理解的报文,所以代理服务器就会表示错误 |
503 | serive unavailable,服务暂时不可用 |
8.HTTP首部介绍
首部的分类:通用首部,请求首部,响应首部,实体首部(专门用来表示实体中资源内部的类型,长度,编码格式等),扩展首部(非标准首部,可有程序员自行创建)
1.通用首部
• Connection:定义 C/S 之间关于请求、响应的有关选项 在 http1.0 的时候,如果他想使用持久连接,那么他所设置的选项即为 Connection:keep-alive 、
• Cache-Control:缓存控制,实现更精细的缓存控制方式。在 http 1.1 上比较 常见
2.请求首部
• Client-IP :客户端 IP 地址
• Host :请求的主机,这在实现基于主机名的虚拟主机时很有用
• Referer :指明了请求当前资源原始资源的 URL,使用 referer 是可以防盗链
• User-Agent:用户代理,一般而言是浏览器
• Accept 首部:指客户端可以接受哪些编码的类型
▪ Accept:服务端能够发送的媒体的类型
▪ Accetp-Charset:接收的字符集
▪ Accept-Encoding:编码格式
▪ Accept-Lanage:所能接受的语言编码格式
• 条件式请求首部:(在 http1.1 中才会用到)
当发送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请 求
• 跟安全相关的请求:
▪ Authorization
▪ Cookie
3.响应首部
• Age:资源响应给你之后可以使用的时长
• Server:向客户端说明自己用到的程序名称和版本
• 协商类的首部:
▪ Vary:首部列表,服务器会根据此列表挑选最适合的版本发给客户端
• 跟安全相关:
▪ WWW-Authentication
▪ Set-Cookie
4.实体首部
• Location:指明资源的新位置,实现 302 响应码时通常会用到
• Allow:允许对此资源使用的请求方法
• 内容相关的首部
▪ Content-Encoding
▪ Content-Language
▪ Content-Length
▪ Content-Location:内容所在的位置
▪ Content-Type
• 缓存相关:
▪ ETag:扩展标签/标记
▪ Expires:过期时间
▪ Last-Modified:最后修改时间
9.什么是URL和URI?
• URI(Uniform Resource Identifier) 同一资源标示符
用于标识某一互联网资源名称的字符串,通过这种标识来允许你用户对资源可通 过特定的协议进行交互操作。在 Web 上可用的每种资源,包括 HTML 文档、图 像、视频片段、程序等, 由一个通用资源标识符进行定位。所以我们可以使用 URI 来标识每个资源的名称
• URL(Uniform Resource Locator)(统一资源定位符)
用于描述一个特定服务器上某资源的特定位置。
例如:http://www.baidu.com:80/download/bash-4.3.1-1.rpm
URL 的格式分为三个部分
i. scheme(方案)(也叫协议):http://
ii. Internet 地址:一般这个地址指的是服务器:www.baidu.com:8080
iii. 特定服务器上的资源:download/bash-4.3.1-1.rpm
10.CGI是什么?
Common Gateway Interface 通用网关接口
web 服务器发现需要执行脚本了,就通过 CGI 协议跟后端的应用程序打交道, 把用户的请求动态交给服务器,这个服务器的结果通过 CGI 协议返回给 http 服 务器。