URL【重点】
概述
Uniform Resource Locator
统一资源定位符在万维网上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫 URL,是用于完整地描述 Internet 上网页和其他资源的地址的一种标识方法。简单地说,URL 就是常说的网址
格式【重点】
URL 的部分组成为:协议、主机、端口、路径、参数
URL的一般语法格式为:
protocol :// hostname:port/path/?parameters
protocol(协议)
指定使用的传输协议,最常用的是HTTP协议,它也是WWW中应用最广的协议。常见的还有 file:///,ftp://等。
hostname(主机名)
是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址。有时,在主机名前也可以包含连接到服务器所需的用户名和密码(格式:username:password@hostname)。
port(端口号)
整数,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http的默认端口为80。如果输入时省略,则使用默认端口号。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项。
path(路径)
由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。此文件可以是任意格式,如文本、图片、音频、视频等
parameters(参数)
这是用于指定特殊参数的可选项。参数通过 = 连接,用键值对的形式标识,多个参数之间用 & 连接
【注意】强制要求以后所有的 URL 全部按照标准格式来写!!!
HTTP
概述
Hyper Text Transport Protocol
: 超文本传输协议,是一个用于从web服务器传输超文本到本地浏览器的传送协议和标准
特点
-
基于请求/响应模型:客户端发起请求,服务器回送响应【重点】
-
简单快速:HTTP 比较简单,服务器的程序规模小,因此通信速度很快
-
灵活:HTTP 允许传输任意类型的数据对象
-
无连接:每次只处理一个请求,处理完请求后,接收到了客服端的应答后就立刻断开连接。客户端再次发送请求就是一个新的连接,节省了传输时间。
-
无状态:HTTP 是无状态协议。每次请求都是独立的,任何两个请求之间没有必然的联系
-
默认端口号:80【重点】
-
基于 TCP/IP 协议
请求传输数据的方式【重点】
HTTP请求的方法:HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法
其中最常用的有两种:
GET
和POST
GET:用于请求指定的页面信息,并返回消息的主体
1. 通过URL明文传递
2. 数据传输不安全
3. 数据传输有大小限制,一般在2KB左右
4. 速度传输快
5. 一般用于数据查询操作,百度搜索,Google搜索....
POST:用于指定的资源提交数据
1. 通过【HTTP请求实体】完成数据传递
2. 较为安全,需要其他技术进行数据加密
3. 数据传输大小不限制
4. 数据传输速度较慢
5. 一般用于数据添加,删除,修改,登录验证...
响应状态码
状态码 | 已定义范围 | 描述 |
---|---|---|
1XX | 100-101 | 信息提示 |
2XX | 200-206 | 成功 |
3XX | 300-305 | 重定向 |
4XX | 400-415 | 客户端错误 |
5XX | 500-505 | 服务器错误 |
【重点】
200 OK!!!
302 重定向提示
404 Source Not Found 资源未找到!!!最常见错误!!!
500 服务器挂了!!!
Web容器是如何处理 HTTP 协议?
HTTP协议在Web容器这端主要表现为请求数据的到达以及响应数据的返回。于是Web容器将这两部分数据解释为两个对象,一个是与请求数据对应的 HttpServletRequest 对象,一个是与响应数据对应的 HttpServletResponse 对象。对于Servlet来讲,主要的业务逻辑过程就是从请求对象【HttpServletRequest】中获取数据,经过加工后将结果附着在响应对象【HttpServletResponse】中发送回客户端
扩展:HTTP 1.0 和 HTTP 1.1 的主要区别
HTTP 1.0 最早在网页中的使用是在 1996 年,那个时候只是使用一些较为简单的网页和网络请求上,而 HTTP 1.1 则在 1999 年才开始广泛应用于现在的各大浏览器网络请求中,同时 HTTP 1.1 也是当前使用最为广泛的 HTTP 协议。 两者的主要区别体现在长连接、新增了部分错误响应吗、缓存处理等。
长连接 : 在 HTTP/1.0 中,默认使用的是短连接,也就是每次请求都要重新建立一次连接。HTTP 是基于 TCP/IP 协议的,每一次建立或者断开连接,都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大,因此最好能维持一个长连接,可以用长连接来发多个请求。HTTP 1.1 起,默认使用长连接,如果在一定的时间内有多个请求发送,那么就使用同一个连接,减少了一定开销。
扩展:HTTP 请求头分析
GET 请求
案例代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试Post请求</title>
</head>
<body>
<form action="index.jsp" method="get">
<label>姓名:
<input type="text" name="name">
</label>
<input type="submit">
</form>
</body>
</html>
请求头信息
GET /Http_war_exploded/index.jsp?name=%E5%BC%A0%E4%B8%89 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/Http_war_exploded/test_post.html
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Cookie: JSESSIONID=0369EA4247A8535DC42221A1016E4EF6
案例分析
GET / HTTP/1.1
请求方式为GET方法,请求的目标路径是/Http_war_exploded/index.jsp?name=%E5%BC%A0%E4%B8%89 ,目前采用的协议是HTTP 1.1
Host: localhost:8080
请求的主机地址,域名,主机名和端口号
Connection: keep-alive
保持连接状态
Cookie:
很重要!!!在WEB项目中的【会话控制】浏览器本地保存的聊天记录
COOKIE_SESSION=7706_0_8_6_17_11_0_0_8_4_1_0_0_0_13_0_1585376605_0_1585384298%7C9%230_0_1585384298%7C1
POST 请求
案例代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试Post请求</title>
</head>
<body>
<form action="index.jsp" method="post">
<label>姓名:
<input type="text" name="name">
</label>
<input type="submit">
</form>
</body>
</html>
请求头信息
案例
POST /Http_war_exploded/index.jsp HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 0
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
Origin: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/Http_war_exploded/test_post.html
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Cookie: JSESSIONID=0369EA4247A8535DC42221A1016E4EF6
案例分析
POST /Http_war_exploded/index.jsp HTTP/1.1
请求方式为POST方式,请求的资源是/Http_war_exploded/index.jsp,使用的HTTP协议为1.1协议
Host: localhost:8080
请求去主机名,域名或者说是IP地址,8080是Tomcat服务器在当前电脑上的端口号
POST请求中存在一个请求实体,在浏览器开发者工具内可以看到
From Data
name: 张三
扩展:HTTP 协议响应头分析
案例:百度页面
HTTP/1.1 200 OK
Bdpagetype: 2
Bdqid: 0xdb1fc9630002719a
Cache-Control: private
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Sat, 28 Mar 2020 08:51:37 GMT
Expires: Sat, 28 Mar 2020 08:51:36 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=430; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1426_31170_21111_30842_31186_30824_31085_26350; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1585385497161029095415789560245623353754
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
案例分析
HTTP/1.1 200 OK
响应数据使用的协议是HTTP1.1版本,状态码 200 OK
Server: BWS/1.1
当前服务器的版本名字和对应的编号
Date: Sat, 28 Mar 2020 08:51:37 GMT
日期格林尼治时间,中国是+8区
Set-Cookie: BDSVRTM=430; path=/
保存对应的Cookie信息,【会话控制技术】
BDSVRTM=430; BDSVRTM Cookie名字 430 Cookie数据
path=/ 有效路径