目录
一,HTTP协议的工作过程
当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收 到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.
HTTP协议和Web服务器的使用
没有Web服务器的时候只能在资源所在的电脑上通过浏览器访问资源,有了Web服务器就可以为所有电脑提供服务,只要有网络和Web服务器所在的电脑连接,都可以访问Web资源
二,HTTP是什么?
1,HTTP概述
HTTP (全称为 "超文本传输协议"---Hyper Text Transfer Protocol) 是一种应用非常广泛的应用层协议
HTTP属于应用层的一种协议,基于TCP协议(除了HTTP3.0,3.0是基于UDP的),我们重点学习HTTP/1.1协议
2,HTTP协议格式
HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节
传输的数据 = 控制信息(主要格式) + 携带的负荷信息(如html.css,js的内容)
HTTP是一种纯文本协议,其中的控制信息是纯文本的,但其携带的数据信息是不做要求的
1),请求
请求代表从浏览器到服务端
请求需要告诉服务端什么信息:
1),我们是索取资源还是提供资源
2),明确哪个资源(URL或者路径)
3),协议版本
4),关于资源的一些具体描述(元信息)
5),具体的资源内容
∆HTTP请求 = 请求的方法 + 资源 + 协议版本 + 请求头 + 正文/请求体
前四个称为协议的控制信息,最后一个称为协议的有效负荷信息
∆请求的标准格式:
Method + 空格 + Path + 空格 + 协议号 \r\n--------------------------------------------------请求行
Key1: 空格 + value1\r\n--------------------------------------------------------------------请求头
Key2: 空格 + value2\r\n
…
\r\n------------------------------------------------------------------------------遇到空行请求头结束
html, css, js, 图片,音频,视频等(HTTP协议不负责规定这里)----------请求体
∆请求方法:
1)GET:获取资源
2)POST:传输实体主体
区别:
1),GET请求不携带请求体,POST请求允许携带请求体,但是否携带看具体情况;
2),GET请求具备幂等性,POST请求不具备;
幂等性:假设没有其他第三方在动服务器资源的前提下,GET请求即使发出多次,得
到的结果应该是完全一致的,POST请求发出第二次请求可能得到可第一次请求不同的结果;
3),GET请求是缓存友好的,POST请求不允许缓存
注:一般情况下发送的请求全部都是GET请求,只有两种途径可以发送POST请求:
1)通过<form method="post">…</form>发起post请求(method没有赋值默认情况下
是get
2)通过JS代码发起post请求(前期不学)
2),响应
响应代表从服务端到浏览器
服务器响应哪些信息:
1)协议版本;
2)本次请求的结果;
3)本次响应的元信息:响应头;
4)响应的资源内容:响应体/正文;
响应格式:
版本 + 空格 + 状态码 + 空格 + 状态描述\r\n(状态码+状态描述:本次请求是否成功)
Key: Value\r\n
Key: Value\r\n
…
\r\n---------------------------------------------------------------------以上类似于请求
正文(没有规定)--------------------------------------------------有效负荷信息
状态码和状态描述
状态码一般都是三位数,1开头说明这个事情还没有结束;2开头说明请求成功;3开
头说明请求错资源;4开头说明客户端发起的请求有问题;5开头说明服务器在处理请求时
出问题了
比较重要的几个状态码:
1)200 OK:成功
2) 404 Not Found:你请求的资源是不存在的(这是一个很大的坎儿)
3) 500 Internal Server Error:动态资源,由于我们的Java代码异常,所以
Tomcat报500
3),请求/响应头
1,Host(请求)
表示服务器主机的地址和端口。由于一个Tomcat可以为不同域名提供服务,所以通过Host来明确访问Tomcat的哪个域名下的服务,初学阶段都是一个Tomcat对应一个ip
2,Content-Type
正文的类型(浏览器根据Content-Type决定如何处理资源)
常见的Content-Type(掌握)
text/…:文本,具体是什么类型的文本看后边的类型
text/html:文本 + html格式
text/css:文本 + css格式
text/plain:文本 + 纯文本信息(类似txt文件)
application/…:应用(大部分现在也是文本)
application/javascript:js应用(js文件)
application/json:结构化的数据格式
image/…:图片
image/jpeg:jpg格式的图片
image/png:png格式的图片
image/gif:gif格式的图片
查阅关键字MIME-Type
3, Content-Length
正文有多长(字节数)
4,User-Agent(请求)
浏览器说明自己的身份
5,Referer
是从哪个页面发起的请求
三,关于URL
URL(Uniform Resource Locator 统一资源定位符)属于URI的一种具体实现,一个完整的URL一定可以描述网络上的唯一的一个资源
其中登录信息一般都会省略;
1)服务器地址和端口
web服务器所在 = web服务器所在的主机 (ip地址 / 域名)+ web服务器所占用的端口
当web服务器占用的是:80时,由于HTTP协议规定的默认端口就是80,所以可以省略端口信息
2)关于路径
目前为止的所有电脑的文件系统都是按照树形结构来进行文件组织的,web服务器维护资源也是同理,只是以webroot作为资源树的整体的根
绝对路径:从树的根节点出发,进行路径的描述就是绝对路径(从根开始的路径,/开头)
特点:无论”我“深处何处,一个资源的绝对路径是唯一的
相对路径:相对于当前所在的位置的目录下的路径(从当前位置开始的路径,不以/开头)
特点:不以/开头,而是从当前位置出发
点(.):代表当前位置不动
点点(..):代表当前位置的父目录(相当于往回走了一步)
4),查询字符串(query string)
跟在路径后面,以问号开头,后边是一组key = value的形式,之间用&分割,主要应用于动态资源请求(资源固定,但内容不固定)
5),片段标识符(segment)
格式:#+id名
用来在同一资源上,定位当前显示位置的,展示该资源的哪个位置,一般用来做目录
完整的URL组成:
1,协议号;
2,定位主机 = ip/域名 + 端口(其中端口可以省略);
3,路径;
4,查询字符串;
5,片段标识符
省略版的URL组成:
1,省略协议号,如://www.baidu.com;(跟着当前资源的协议走)
2,省略协议号 + web服务器地址;(跟着当前资源的协议+web服务器地址走)
6),URL中的编码问题
由于URL中能出现的字符是有限的,所以当出现RL中不允许出现的字符时,会被URL编码