nginx是一个web服务器软件,而HTTP协议是服务器和浏览器之间交互的规范。
1.HTTP概述:(HyperText Transfer Protocol,超文本传输协议)是浏览器和web服务器之间数据交互需要遵守的一种规范.
客户端 -------(http请求)---> web服务器
客户端 <------(htpp响应)---- web服务器
http协议重要版本:http1.0和http1.1
2.HTTP1.0和HTTP1.1
基于http1.0协议的客户端与服务器在交互过程中需要经历建立连接,发送请求信息,回送响应信息,关闭连接四个步骤
发现bs架构是基于cs架构基础上的
http模型:
客户端 ----(建立tcp连接)-----> 服务器
客户端软件(如浏览器)----(发送http请求)-----> 服务器
客户端软件(如浏览器)<----(回送http响应)---- 服务器
客户端 <----(关闭tcp连接)----- 服务器
http1.0的缺陷:http1.0方式每次建立tcp连接后,只能处理一个http请求,效率低下。
eg:以下面代码为例
<html>
<body>
<img src="/image01.jpg">
<img src="/image02.jpg">
<img src="/image03.jpg">
</body>
</html>
上述html文档中包含3个<img>标签,src属性指定了图片的来源是本站目录下的图片地址。
当浏览器访问这个网页时,除了网页本身建立一次连接,这三张图片还要建立3次连接。如此一来,必然会导致客户端和服务器交互的耗时,影响网页访问速度。
HTTP1.1:为了克服http1.0的缺陷,http1.1诞生了.
http1.1支持持久连接,能够在一个tcp连接上传送多个http请求和响应,从而减少建立和关闭连接的消耗延时。
交互模型http1.1:只要浏览器从后台得到东西,都认为是http请求
客户端 -----(建立tcp连接)-----> 服务器
客户端软件(浏览器)-----(第1次http请求)----> 服务器
客户端软件(浏览器)-----(第2次http请求)----> 服务器
客户端软件(浏览器)-----(第n次http请求)----> 服务器
客户端软件(浏览器)-----(第1次http响应)----> 服务器
客户端软件(浏览器)-----(第2次http响应)----> 服务器
客户端软件(浏览器)-----(第n次http响应)----> 服务器
客户端 <-----(关闭tcp连接)----- 服务器
3.HTTP消息: http消息是指浏览器和服务器之间传送的具体数据,分为请求和响应。
一个完整的消息包括:请求行或响应行,消息头,实体内容
http请求:请求行,请求头,(请求的)实体内容
http响应:响应行,响应头,(响应的)实体内容
过程:先在客户端和服务器之间建立tcp连接
请求过程:
使用浏览器访问 http://www.itheima.com时,浏览器会向域名为www.itheima.com的服务器发送请求消息,请求头中装的是客户端信息(如:操作系统,浏览器版本,cookie等),实体内容中包含要客户端浏览器请求的内容(这样是请求首页)
响应过程:
服务器接收到请求后,将网站的首页html文档,放入响应消息的实体内容中,并通过响应消息中的消息头告诉客户端服务器的信息(如:操作系统,内容格式等)
3.1在使用浏览器时,http消息头是被隐藏的,也就是http请求的过程是透明的对普通人来说,普通用户只能看到html文档网页.
查看http消息的方法 两种
1.在linux中使用curl查看http消息,curl作用:可以发送请求并将服务器的响应消息直接显示出来
-I 只显示消息头,省略实体内容
curl url 发送请求并只显示实体内容
[root@iz2ze9zb2kkp58bej6qsbez tmp]# curl -I http://www.itheima.com
HTTP/1.1 200 OK #注释 响应行
Server: Tengine #消息头开始
Content-Type: text/html
Connection: keep-alive
Date: Wed, 13 Jan 2021 03:14:59 GMT
Vary: Accept-Encoding
Ali-Swift-Global-Savetime: 1610507699
Via: cache21.l2cn1812[107,200-0,M], cache42.l2cn1812[108,0], cache14.cn1366[179,200-0,M], cache1.cn1366[180,0]
X-Cache: MISS TCP_MISS dirn:-2:-2
X-Swift-SaveTime: Wed, 13 Jan 2021 03:14:59 GMT
X-Swift-CacheTime: 0
Timing-Allow-Origin: *
EagleId: 0e1d289516105076992301764e #消息头结束
[root@iz2ze9zb2kkp58bej6qsbez tmp]# curl http://www.itheima.com
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>黑马程序员官网-IT培训机构|java培训|前端培训|python培训|大数据培训</title>
<meta name="keywords" content="IT培训,IT培训机构,java培训,java培训学校,python培训,python培训班,大数据培训,大数据培训
机构,人工智能培训,UI设计培训,web前端培训,软件测试培训,产品经理培训"/>
<meta name="description" content="黑马程序员专注于IT培训,开设java培训、大数据培训、web前端培训、python培训、人工智能培训、软件测试培训、产品经理培训、智能机器人软件开发培训等多门IT培训课程,提供java培训、Java开发培训、python开发培训
、大数据培训、web前端开发培训、python培训、人工智能培训等IT培训服务,致力于培养中级程序员,是业内以口碑闻名的IT培训机构。"/>
<meta name="baidu-site-verification" content="UEShY9jA7q" />
<link rel="canonical" href="http://www.itheima.com/" />
<link type="image/x-icon" rel="shortcut icon" href="/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/css/reset.css"/>
<link rel="stylesheet" type="text/css" href="/css/style.css"/>
<link rel="stylesheet" type="text/css" href="/2020gw/css/index.css"/>
<script type="text/javascript" src="http://h5.itcast.cn/yles2018/nowtime"></script>
<p style="display: none;"><a key ="5a0d49850c9096099fb2aff5" logo_size="83x30" logo_type="business" href="http://www.anquan.org" rel="nofollow" ><script src="//static.anquan.org/static/outer/js/aq_auth.js"></script></a></p>
...(太多了,省略)
2.使用浏览器查看HTTP消息 早就会了 在开发者工具里面,火狐的最好
网络里面显示的一堆文件都是http请求获得的,一个文件就是一个http请求
3.2 HTTP请求消息:http请求消息由请求行,请求头,实体内容三部分组成
请求行
请求头
实体内容
3.2_1
请求行组成:请求方式,请求资源路径,HTTP协议版本
eg:GET /index.php HTTP/1.1
http有多种请求方式:post一般用于提交数据,get用于获取资源路径的文件(get是浏览器默认的请求方式,get方式没有实体内容,只有post方式提交数据才有实体内容)
请求资源路径:http://域名/请求资源路径(一般要看后台数据库怎末设置的)
请求头:请求头位于请求行之后,主要用于向服务器传递附加的客户端消息。例如:浏览器可以接受的数据类型,压缩方法,语言等等
eg:
Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection:keep-alive
DNT:1
Host:webchat.7moor.com
Referer:https://webchat.7moor.com/view/moor_chat.html?v=20201208&clientId=&urlTitle=%E9%BB%
TE:Trailers
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/2010010Firefox/84.0
Cookie:name=lewis
常见的请求头:这些字段大部分都是http协议规定的
请求头 含义
Accept 客户端浏览器支持的数据类型 mime多媒体类型:text/html,text/css等
Accept-Charset 客户端浏览器采用的编码
Accept-Encoding 客户端浏览器支持的数据压缩格式
Accept-Language 客户端浏览器所支持的语言包,可以指定多个
Host 客户端浏览器想访问的服务器主机
If-Modified-Since 客户端浏览器对资源的最后缓存时间
Referer 重点(ctf出现过) 客户端浏览器是从哪个页面过来的
User-Agent 客户端的系统信息,包括使用的操作系统,浏览器版本号等
Cookie 客户端需要带给服务器的数据
Cache-Control 客户端浏览器的缓存控制
Connection 请求完成后,客户端希望是保持连接还是关闭连接
实体内容:
当使用post方式提交数据时,数据将被放入实体内容中发送。
get方式时,http请求没有实体内容,但是可以利用url传递数据,而且一般get只用于请求文档 重点
1.get通过url向后台传递数据 注意:get的url方式传递数据,需要对中文和特殊符号进行编码,有时
http://www.itheima.com/test.php?name=xiaoming&password=123456
2.post方式发送数据 将数据插入实体内容中
post方式提交表单时,Content-Type消息头字段被自动设置为application/x-www-form-urlencoded,表示以url编码为格式的表单,Content-Length消息头自动被设置为实体内容的长度(单位字节)
3.2_2 HTTP响应消息:组成响应(状态)行,响应头,实体内容(要送到前端的)
响应行
响应头
实体内容
响应行组成:http协议版本,状态码,状态的描述信息
eg:HTTP/1.1 200 OK
响应状态码:表示服务器对客户端请求的各种不同的处理结果和状态
响应状态码分为5类
1xx:成功接受请求,要求客户端继续提交下一次请求才能完成整个处理过程
2xx:成功接收请求并已经完成整个处理过程
3xx:为完成请求,客户端需进一步细化请求
4xx:客户端的请求有错误
5xx:服务器出现错误
常见的状态响应码:
状态码 含义
200(正常) 客户端请求成功,响应消息返回正常的请求结果
301(永久移动) 被请求的文档已经被移动到别处,此文档的新url地址为响应头Location的值,浏览器以后对该文档的访问会自动跳转到新地址
304(未修改)
401(未经授权) 当浏览器试图访问一个受密码保护的页面时,且在请求头中没有Authorization传递用户信息,就会返回401状态码,要求浏览器重新发送带有Authorization的信息
403(禁止) 服务器理解客户端的请求,但是拒绝处理.通常是由服务器上文件或目录的权限设置导致的
404(找不到) 服务器上不存在客户端请求的资源
500(内部服务器错误) 服务器上不存在客户端请求的资源
502(无效网关)
504(网关超时)
响应头:位于响应状态行的后面,用于告知浏览器本次响应的一个基本信息,包括服务程序名,内容的编码格式,缓存控制等
常见的HTTP响应头
响应头 含义
Server 服务器的类型和版本
Data 服务器的响应时间
Expires 控制缓存的过期时间
Location 控制浏览器显示哪个页面(重定向到心得URL)
Accept-Ranges 服务器是否支持分段请求,以及请求范围
Cache-Control 服务器控制浏览器如何进行缓存
Content-Disposition 服务器控制浏览器以下载方式打开文件
Content-Encoding 实体内容的编码格式
Content-Length 实体内容的长度
Content-Language 实体内容的语言和国家名
Content-Type 实体内容的类型和编码类型
Last-Modified 请求文档的最后一次修改时间
Transfer-Encoding 文件传输编码
Set-Cookie 发送Cookie相关的信息
Connection 是否需要持久连接
http协议的请求头和响应头是浏览器和服务器之间交互的重要信息,由浏览器和web服务器自动处理,通常不需要人为干预。
实体内容:服务器响应的实体内容有多种编码格式。
eg:当用户请求的是一个网页时,实体内容的格式就是HTML.
如果请求的是图片,则响应图片的数据类新。服务器为了告知浏览器内容类型,会通过响应消息头中的Content-Type字段来标识。例如:网页类型通常是"text/html;charset=UTF-8",表示内容类型为html,字符集是utf-8,其中text/html是一种MIME类型表示方式
常见MIME类型
MIME类型 说明
text/plain 普通文档(.txt)
text/xml XML文档(.xml)
text/html html文档(.html)
image/gif GIF图像(.gif)
image/png PNG图像(.png)
image/jpeg JPEG图像(.jpg)
text/css CSS文件(.css)
application/javascript JavaScript文件(.js)
application/x-httpd-php PHP文件(.php)
application/pdf PDF文件(.pdf)
application/octet-stream 任意二进制数据
浏览器对于服务器响应的不同MIME类型会有不同的处理方式,如遇到普通文本时直接显示,遇到html时,渲染成网页,遇到gif,png,jpeg等类型时显示为图像。