http学习笔记---超详细

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等类型时显示为图像。

  

原文地址:https://www.cnblogs.com/nanfengnan/p/14408936.html