网络编程
一、概要
实现前端和后端之间的交互,这个就叫做是网络编程。实现前端与后端的交互就需要用到Socket技术。
二、通信架构
1、C/S架构
需要安装客户端的软件,这个需要下载,但是相对B/S比较安全
2、B/S架构
用浏览器访问内容即可,这个不需要下载即可使用
三、网络通信三要素
1、IP
访问一个网站时,需要一个地址才能访问;在网络中实现不同计算机的通信,这时每个计算机必须要有一个标识才能进行访问,这个标识就是IP。
1.1 本机IP
每台计算机都有一个回环地址127.0.0.1,这个代表本机,单平时都是在浏览器的地址栏输入localhost进行访问本机。
1.2 ip地址的分类
1)IPv4
- 由32位二进制组成。为了方便记忆,分成了4段,每段8位
- 将这4段转为十进制并用点分割,此种方式叫做点分十进制
2)IPv6
- ipv4个数有限,最多生成42.27亿个IP地址。所以衍生出了ipv6
- 由128位十六进制表示。分成了8段,每段16位表示4个十六进制数
- 各组之间用":"隔开,如我自己的ipv6地址fe80::67c7:da2d:204:12d8%16
- 如果ipv6中出现了连续几组的0,可以用"::"代替,但是一个地址只能出现一次"::"
1.3 内/外网
- 内网表示局域网LAN
- 外网表示广域网WAN
联想:城域网MAN
1.4 查看本机的IP地址
- 用ipconfig命令可以查看本机的IP地址
2、Port
2.1 定义
Port就是端口号,端口号定义为1到65535,0一般不做使用
2.2 分类
1)公认端口
从0到1023,公认端口是明确表明了某种服务的协议
2)注册端口
从1024到49151,这个是JavaWeb程序建议使用的范围
3)动态/私有端口
从49152到65535,理论上,不应为服务分配这些端口,机器通常从1024起分配动态端口
4)缺省端口号
- 80:当请求是http协议时可以不写端口号,默认就是80
- 443:当请求是https协议时可以不写端口号,默认就是443
注意:同一台机器上不能同时有两个应用程序使用同一个端口。否则会造成端口冲突,会报错:RuntimeError: Address already in use
3、网络通信协议
3.1 概要
国际组织统一规定好的一套建立连接、数据传输的规则被称为网络通信协议。只有当大家都遵守这个协议时,才能彼此建立连接。
网络通信协议中使用的是7层模型,7层模型的优化版本是四层模型:
- 应用层 => HTTP
- 传输层 => TCP、UDP
- 网络层 => IP
- 物理/数据链路层 => 光纤/比特流
3.2 UDP协议
1、UPD(User Datagram Protocol):用户数据报协议;
2、特点:无连接、不可靠通信、通信效率高;适用于直播和语音通话;
3、说明:
- 无连接,不可靠通信:此协议本身并未建立连接,所以发送方并不知道是否与接受方建立连接。
- 此协议是按照包的形式发送:包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据;当超过64kb就会分包进行发送。
3.3 TCP协议
1、TCP(Transmission Control Protocol):传输控制协议;
2、特点:面向连接、可靠通信、通信效率相对UDP低,适用于文件下载、支付等业务;
3、说明:
- TCP实现可靠传输: 三次握手,四次挥手
- 三次握手
-
- 客户端向服务端发送请求
- 服务端相应请求
- 再次确认连接
- 四次挥手
-
- 客户端向服务端发送断开请求
- 服务端相应并等待
- 服务端相应并确认是否断开
- 正式发送断开请求
3.4 HTTP协议
1)定义
http(Hyper Text Transfer Protocol),超文本传输协议:规定了浏览器与服务器之间的数据传输的规则
2)特点
- 基于TCP协议:面向连接,安全可靠
- 一次请求对应一次响应
- 无法在多次请求之间共享数据,每次请求、响应都是独立的。
3)请求协议
浏览器 ->服务器
浏览器以请求格式发送到服务器,包括请求行、请求头、请求体
- 请求行:HTTP请求中的第一行数据
-
- 组成格式(中间用空格隔开):请求方式 资源路径 协议/版本
- 请求方式
请求方式 | 请求说明 |
GET | 获取资源 |
POST | 新建、更新资源,数据存放在请求体中 |
PUT | 更新资源 |
DELETE | 删除资源 |
- 请求头:从第二行开始就是请求头,格式都是以键值对的形式(key:value)
-
- Host:主机名
- User-Agent:浏览器的版本
- Accept:浏览器能接受的资源类型
- Accept-Language:浏览器的语言
- Accept-Ecoding:浏览器支持的压缩类型
- Content-Type:请求主体的数据类型
- Content-Length:数据主体的大小
- 请求体:存储请求的参数,POST请求体一般就在Payload中看
GET和POST请求的区别:
- GET请求的参数在地址栏中,POST的请求参数在请求体中
- GET的请求参数有长度限制(一般为2KB),POST的请求参数没有长度限制
- GET请求的安全性低(因为参数暴露在地址栏中),POST请求安全性高
- 一般请求都是看payload,响应看preview
3)响应协议
服务器 -> 浏览器
服务器将数据以响应格式返回给浏览器,包括响应行、响应头、响应体
- 响应行:响应数据的第一行
-
- 组成格式(用空格隔开):协议及版本 响应状态码 状态码的描述
- 响应头:从第二行开始就是响应头,格式都是以键值对的形式(key:value)
-
- Content-Type:表示该响应内容的类型
- Content-Length:表示该响应内容的长度
- Content-Encoding:表示该响应压缩算法
- Cache-Control:指示客户端应如何缓存
- Set-Cookie: 告诉浏览器为当前页面所在的域设置cookie
- 响应体:响应数据的最后一部分,存储响应的数据,响应体一般在Response中看
-
- 响应转态码:
-
-
- 200 OK => 客户端请求成功
- 404 Not Found => 请求资源不存在
- 400 Bad Request => 请求语法错误
- 500 Internal Server Error =>服务端发生不可预期的错误
-
四、域名
域名是便于人类记忆的IP地址,是需要购买的
域名是从右往左分级,分为: 一级 二级 三级,书写是从右往左书写:...三级.二级.一级
五、DNS
域名需要靠DNS域名解析器进行解析,每台电脑本地有一个域名解析器,我们可以在里面配置本机的127.0.0.1映射到哪个域名地址
六、web服务器
1、定义
Web服务器是一个软件程序,其根本是基于ServerSocket编写的程序。它是用来运行我们的项目,帮助我们解析请求和携带响应信息,并且可以让我们的项目可以接收请求
2、作用
部署Web项目,对外提供资源访问功能
3、Tomcat
3.1 概要
Tomcat是一个免费的开放源代码的Servlet容器,在Tomcat内部运行就是Servlet,它支持Html解析
- Servlet:是一个容器,可以接收请求,Tomcat之所以可以接收请求就是因为底层就是Servlet,我们写的一个方法在servlet中就是一个servlet实例
3.2 使用
- Tomcat启动:在bin目录下双击startup.bat
-
- 如果遇到乱码问题:
- Tomcat停止:
-
- 直接关闭黑窗口
- Ctrl+c
- 在bin目录下双击shutdown.bat
- Tomcat修改端口号:在conf目录下的server.xml中搜索8080,修改为你自己想要的端口号
- 使用本机IP+tomcat端口号会默认访问webapps/ROOT/index.html/htm/jsp页面
- 部署自己的前端项目:把前端项目放入到webapps/ROOT下,使用本机IP+tomcat端口号+前端页面文件夹路径
- Tomcat常见问题:
-
- 如果启动两个端口号相同的tomcat会报错
- 如果tomcat一闪而过就是Java_home环境变量配置错误
七、SpringBoot入门
SpringBoot实现
1、现在idea创建一个新的项目
2、选择SpringBoot项目,并填写相应的内容,填写完成后点击"Next"。
3、选择依赖版本并勾选初始化依赖,SpringBoot必须要Web依赖
4、为了让项目简洁,我们可以删掉项目用不到的文件
5、更改项目的具体版本
6、创建请求处理类——专门用来接收前端发起到后端的请求,此类必须放在cotroller包下
7、运行SpringBoot项目
运行结果
8、浏览器访问——浏览器输入地址:http://localhost:8080/hello 访问
在控制台中的结果:
八、资源路径
1、URL
- 定义:URL称为统一资源定位符,可以直接使用此地址找到互联网上的资源。例如:接口、页面。
- 组成:协议名://IP地址:端口号/资源名称 (如:http://localhost:8080/hello)
2、URI
- 定义:URI统一资源标识符,俗称请求资源路径,URL地址中端口号后面的地址叫做URI。(如:/hello)
- 区别:URL包含URI,URI只是URL的一部分