目录
HTTP1.1官方文档:Hypertext Transfer Protocol -- HTTP/1.1
实验:安装一个nginx,并配置nginx配置文件,使nginx实现HTTP协议和HTTPS协议
2、配置nginx.conf文件实现http和https环境
4、测试nginx的效果(如果你是在Windows机器上进行的,需要配置hosts文件,添加你需要访问的域名)
HTTP协议有状态性的实现(Cookie和Session和token)
Cookie和Session:可以理解为存放用户信息的地方或者技术编辑
Cookie字段使用在HTTP协议的请求报文(HTTP Request)中,并且它是保存在浏览器当中的。
查考文章:什么是token - 简书 (jianshu.com)
HTTP协议(超文本传输协议)
HTTP(Hypertext Transfer Protocol)(超文本传输协议)是一种用于传输超文本(例如网页、图片、视频等)的应用层协议。它是互联网上常用的一种协议,用于在客户端和服务器之间进行通信。是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
HTTP是一个无状态的协议,这意味着服务器不会保留与客户端之间的通信状态。每次客户端发送请求到服务器时,服务器都会独立地处理该请求,并将响应返回给客户端。这使得HTTP协议设计简单,但也需要客户端和服务器之间在每次请求和响应中都提供足够的信息来确保正确的通信。
HTTP通常在TCP/IP协议族的基础上运行,使用TCP作为其传输层协议。默认端口为80,但也可以使用其他端口。
HTTP协议的工作方式:
HTTP协议的工作方式如下:
客户端发送HTTP请求给服务器,请求的内容包括请求的方法(GET、POST、PUT、DELETE等)、资源的URI、HTTP协议版本号,以及可能包含的请求头部信息。
服务器接收到请求后,根据请求的URI和方法来处理请求,并可能附加一些响应头部信息。
服务器将处理后的响应和响应头部信息发送回客户端。
客户端接收到服务器的响应后,根据响应的状态码(如200表示成功,404表示未找到资源等)来处理响应的内容。
HTTP的工作原理:
HTTP协议实现拓扑图:
HTTP协议与HTTPS协议的区别:
HTTP协议是现代互联网应用中的核心协议之一,支持超文本传输以及客户端和服务器之间的数据交换,使得万维网(World Wide Web)成为可能。虽然HTTP在传输数据时不加密,但可通过在HTTP上加入安全层(HTTPS)来实现数据的安全传输。HTTPS使用SSL(Secure Socket Layer)或TLS(Transport Layer Security)协议来对数据进行加密,以保护用户隐私和数据的安全。
HTTP协议: 在应用层使用,里面封装的数据是明文的 --》不够安全 --》80
HTTPS协议: 就是给http协议的数据进行加密封装 --》更加安全 --》443
URI(统一资源标识符)
HTTP使用统一资源标识符(Uniform Resource Identifier,URI)来标识要请求或传输的资源。常见的URI是统一资源定位符,用于指定资源的具体位置。(统一资源定位符)
https://mp.csdn.net/mp_blog/creation/editor?spm=1001.2014.3001.4503
在上面的网址中,存在标准的URL,其中?问号后面的都是传递的参数,目的是告诉对方的web服务,我需要什么。
HTML文件是什么,里面存放什么东西?
HTML是编写网页的语言 ---》它通过浏览器渲染,使我们人能看到图片、视频、文字或者听到声音。
谁在使用HTTP协议?
浏览器和web服务器之间讲的语言
HTTP协议中经常出现的状态码?
200:成功响应了客户机的请求报文
304:浏览器缓存里的内容和nginx服务器里的内容是一样的,因此当我们刷新nginx网页的时候出现
403:web服务器没有权限去访问某个文件 --》 权限拒绝
404:网页不存在
405:get或者post方法不对
401:认证失败
499:499 client has closed connection
503:由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
502:502 Bad Gateway(网关故障)(就是负载均衡器是好的,但是后端的real server挂了)
504:504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。 (后端的服务器网络或者防火墙问题导致)
500:500 Internal Server Error(内部服务器错误)
302:临时重定向
301:永久重定向(访问http://www.sanchuangedu.cn/ 转发到https://www.sanchuangedu.cn/访问80端口转到443端口)
HTTP1.1官方文档:Hypertext Transfer Protocol -- HTTP/1.1
响应报文中的状态码:
实验:安装一个nginx,并配置nginx配置文件,使nginx实现HTTP协议和HTTPS协议
1、安装配置nginx
完整版一键安装配置nginx脚本
[root@mysql nginx]# cat onekey_install_henshan_nginx.sh
#!/bin/bash
#新建一个文件夹用来存放下载的nginx源码包
mkdir -p /nginx
cd /nginx
#新建工具人用户、设置无法登录模式
useradd -s /sbin/nologin clay
#下载nginx
#wget http://nginx.org/download/nginx-1.23.2.tar.gz
curl -O http://nginx.org/download/nginx-1.23.2.tar.gz
#解压nginx源码包
tar xf nginx-1.23.2.tar.gz
#解决软件依赖关系、需要安装的软件包
yum install epel-release -y
yum install gcc gcc-c++ openssl openssl-devel pcre pcre-devel automake make psmisc net-tools lsof vim geoip geoip-devel wget zlib zlib-devel -y
#到达nginx配置文件目录下
cd nginx-1.23.2
#编译前的配置
./configure --prefix=/usr/local/scnginx66 --user=clay --with-http_ssl_module --with-http_v2_module --with-stream --with-http_stub_status_module --with-threads
#编译、开启一个进程同时编译
make -j 1
#编译安装
make install
#启动nginx
/usr/local/scnginx66/sbin/nginx
#永久修改PATH变量
PATH=$PATH:/usr/local/scnginx66/sbin
echo "PATH=$PATH:/usr/local/scnginx66/sbin" >>/root/.bashrc
#设置nginx的开机启动--手动添加
#在/etc/rc.local中添加启动命令
#/usr/local/scnginx66/sbin/nginx
echo "/usr/local/scnginx66/sbin/nginx" >>/etc/rc.local
#给文件可执行权限
chmod +x /etc/rc.d/rc.local
#selinux和firewalld防火墙都需要关闭
service firewalld stop
systemctl disable firewalld
#临时关闭selinux
setenforce 0
#永久关闭selinux (需要开机重启)
#vim /etc/selinx/config
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
2、配置nginx.conf文件实现http和https环境
对nginx的配置文件nginx.conf进行配置(其中包括了nginx的一些基本模块的使用,如限制传输速度模块,限制连接数量模块,强制跳转https协议模块,info基本信息展示模块,和https服务页面模块)
[root@nfs conf]# cat nginx.conf
#user nobody;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 2048;
}
#HTTP协议的配置
http {
include mime.types;
default_type application/octet-stream;
#(定义访问日志的格式 日志保存在/usr/local/scnginx/logs/access.log文件中)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; #--》日志保存的地址
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; #--》65秒后用户和web服务器建立的连接就会断开、 保持连接65秒的时间、 连接的超时时间
#gzip on;
limit_conn_zone $binary_remote_addr zone=addr:10m; #创建一个连接区域(开辟了一个名叫addr的内存空间、像一个字典)
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; #创建一个连接区域(开辟了一个名叫one的内存空间、像一个字典)、每一秒产生1个可以访问的请求
server {
listen 80;
server_name www.claylpf.xyz; #目的是直接从http协议跳转到https协议去
return 301 https://www.claylpf.xyz; #永久重定向
}
server {
listen 80;
server_name www.feng.com; #可以自己定义域名
access_log logs/feng.com.access.log main;
limit_rate_after 100k; #下载速度达到100k每秒的时候、进行限制
limit_rate 10k; #限制每秒10k的速度
limit_req zone=one burst=5; #同一时间同一ip最多5人同时访问 峰值是5 每一秒通过one的设定、产生一个空位 1r/s
location / {
root html/feng;
index index.html index.html;
}
error_page 404 /404.html; #无法找到
error_page 500 502 503 504 /50x.html; #一般是nginx内部出现问题才会出现的提示
location = /50x.html {
root html;
}
location = /info {
stub_status; #返回你的nginx的状态统计信息
#access_log off; #在访问的时候不计入访问日志里面去
auth_basic "sanchuang website";
auth_basic_user_file htpasswd;
#allow 172.20.10.2; #允许172.20.10.2的ip地址访问
#deny all; #拒绝所有用户访问
}
}
# HTTPS server
server {
listen 443 ssl;
server_name www.claylpf.xyz; #证书上对应的域名
ssl_certificate 9581058_claylpf.xyz.pem; #自己在阿里云上申请的免费的CA证书
ssl_certificate_key 9581058_claylpf.xyz.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.html;
}
}
}
[root@nfs conf]#
3、配置成功后对nginx进行检查和运行
nginx -t 可以用来检查nginx的配置文件
[root@mysql keepalived]# cd /usr/local/scnginx66/sbin/
[root@mysql sbin]# ls
nginx
[root@mysql sbin]# ./nginx -s reload #重新启动nginx
4、测试nginx的效果(如果你是在Windows机器上进行的,需要配置hosts文件,添加你需要访问的域名)
HTTP协议的数据封装和连接的方式和属性:
Web服务器是如何封装数据的(HTTP协议响应包的封装)
HTTP的连接方式和无状态性:
HTTP协议有状态性的实现(Cookie和Session和token)
HTTP协议是无状态的,但是现在可以是有状态的了,其原因是它增加了一个字段如Cookie和Session和token。其目的就是让web服务器知道你是老用户,如你以前连接或者登陆过该网站,就不需要再次登陆了。
Cookie和Session:可以理解为存放用户信息的地方或者技术
Cookie字段使用在HTTP协议的请求报文(HTTP Request)中,并且它是保存在浏览器当中的。
Cookie和Session用法拓扑图:
什么是token?
查考文章:什么是token - 简书 (jianshu.com)
Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
Token是指在计算机科学中,特指一种用于标识用户身份和授权信息的令牌。在网络应用中,常用Token来进行用户身份验证和授权操作,以便用户可以安全地访问受保护的资源。
在Web应用中,Token通常是一个字符串,由服务器生成并发送给客户端,客户端在后续的请求中携带这个Token来证明自己的身份。这种方式比传统的基于用户名和密码的验证更为安全和灵活,因为Token本身并不包含用户的敏感信息,而仅仅是一个代表用户身份的标识符。
使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
HTTP的报文结构:
首部字段或者消息头部:
请求报文:
请求报文首部字段:
请求方法: GET、POST、DELETE、CONNECT等
协议版本: http1.1 http2.0host: 代表我们请求的URL是什么
Connection: keep-alive(连接状态)
user-agent: 代表我们客户机使用的浏览器是什么
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
Cookie: 存放在浏览器里的数据--》cookie里的数据
BAIDUID=76DC6BA708F2BD5191E65168A3C553BD:FG=1; BIDUPSID=76DC6BA708F2BD511A79D55B79C6C37E; PSTM=1690603364; BD_HOME=1; H_PS_PSSID=36550_39106_38942_38882_39114_39121_39038_38917_39088_26350_39041_39132_39100_39044_38952; BD_UPN=13314752; BA_HECTOR=8l0k8l84a50g2ka5052lag2a1ic93r81p; ZFY=rrEv8YkXUKHpto:As:BkrE07ZmNg7ICTBlN5OmsEQ33Fc:CAccept-Encoding: 浏览器可以接受压缩格式的数据
gzip, deflate, br(允许压缩文件格式) 对http协议里传输的数据进行压缩,目的是减少传输时间,加快速度Accept: 浏览器能够接受的数据的类型。
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Referer: 从哪个网站引流过来的 referer 引用页、推荐的意思 --》从哪里跳转过来的
https://news.baidu.com/
If-Modified-Since: 对网页内容的修改时间进行检查,如果没有修改
Wed, 19 Jul 2023 02:01:01 GMT
请求方法:
get: 是客户机向web服务器发生请求的方法,告诉服务器端我需要什么数据: 客户机是来索要数据的。在url携带数据,只能携带少量的数据,在http协议的头部里
post:是客户机向web服务器发生请求的方法,告诉服务器端我需要什么数据,客户机是来索要数据的。: 在表单携带数据,可以携带更加多的数据,可以放到body里
delete: 客户机告诉web服务器,要求它去执行删除某个数据的操作
使用Postman去测试请求方法的效果:
响应报文:
响应报文的首部字段:
date: Sat, 29 Jul 2023 07:09:35 GMT 响应的时间
server: nginx/1.20.1 服务器端使用的web服务器软件的名字
BWS/1.1 --》baidu web server
Trpc httpd
content-type: web服务器给客户机返回的内容的类型
image/gif 是图片
Content-Length:正文的字节数
23
Connection: 连接状态
keep-alive
Last-Modified: Web服务器里返回的网页上次修改的时间(可以用于避免两次HTTP连接中,响应报文发送的Web网页数据是一摸一样的,从而浪费网络流量)
Wed, 19 Jul 2023 02:01:01 GMT
Status Code: 状态码(重点)
http协议版本: http1.1 http2.0
什么是HTTP代理?
HTTP代理又称Web缓存或代理服务器(Proxy Server),是一种网络实体,能代表浏览器发出HTTP请求,并将最近的一些请求和响应暂存在本地磁盘中,当请求的Web页面先前暂存过,则直接将暂存的页面发给客户端(浏览器),无须再次访问Internet。
代理的方式:正向代理、反向代理
什么是正向代理和反向代理?
正向代理(Forward Proxy): 正向代理是位于客户端和目标服务器之间的中间服务器。客户端向正向代理发出请求,然后正向代理将请求转发给目标服务器,并将目标服务器的响应再转发回客户端。客户端并不直接访问目标服务器,而是通过正向代理来代表自己访问目标服务器。
反向代理(Reverse Proxy): 反向代理位于目标服务器和客户端之间,客户端向反向代理发出请求,然后反向代理将请求转发给后端的目标服务器,并将目标服务器的响应再转发回客户端。客户端并不知道目标服务器的存在,而是通过反向代理来获取所需资源。
正向代理和反向代理的工作环境:
正向代理: 代理局域网里的机器上网 --》站在用户的角度 ,让用户访问网站快一点
反向代理: 企业方做缓存和负载均衡使用 --》站在企业的角度(腾讯、美团、淘宝等)
nginx是一个web服务器软件也是一个反向代理软件(可用于做负载均衡器)