zoukankan      html  css  js  c++  java
  • 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等类型时显示为图像。
    

      

  • 相关阅读:
    Python 6 socket编程
    Python 5 面向对象进阶
    Python 4 面向对象
    Python 3 常用模块
    Python基础 2
    Python基础 1
    Django之会议室预预订
    vscode 修改快捷键 (回到上一处光标位置,下一处光标位置)
    C 库函数
    C 库函数
  • 原文地址:https://www.cnblogs.com/nanfengnan/p/14408936.html
Copyright © 2011-2022 走看看