关于http

news/2024/5/18 11:49:10 标签: java, session, cookie, https

在浏览器中输入url地址到显示主页的过程

  1. DNS解析
  2. TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报⽂
  5. 浏览器解析渲染⻚⾯
  6. 连接结束
    https://img-blog.csdnimg.cn/2021010418122810.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzI3ODY0NA==,size_16,color_FFFFFF,t_70" alt="《图解HTTP》" />
    来源于《图解HTTP》

HTTP长连接,短连接

在HTTP/1.0中默认使⽤短连接。也就是说,客户端和服务器每进⾏⼀次HTTP操作,就建⽴⼀次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web⻚中包含有其他的Web资源(如JavaScript⽂件、图像⽂件、CSS⽂件等),每遇到这样⼀个Web资源,浏览器就会重新建⽴⼀个HTTP会话。
⽽从HTTP/1.1起,默认使⽤长连接,⽤以保持连接特性。使⽤⻓连接的HTTP协议,会在响应头加⼊⾏代码:Connection:keep-alive
在使⽤⻓连接的情况下,当⼀个⽹⻚打开完成后,客户端和服务器之间⽤于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使⽤这⼀条已经建⽴的连接。Keep-Alive不会永久保持连接,它有⼀个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现⻓连接需要客户端和服务端都⽀持⻓连接。

Cookie和Session

Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Session 安全性更⾼。
Cookie ⼀般⽤来保存⽤户信息 ⽐如①我们在 Cookie 中保存已经登录过得⽤户信息,下次访问⽹站的时候⻚⾯可以⾃动帮你登录的⼀些基本信息给填了;②⼀般的⽹站都会有保持登录也就是说下次你再访问⽹站的时候就不需要重新登录了,这是因为⽤户登录的时候我们可以存放了⼀个 Token 在 Cookie中,下次登录的时候只需要根据 Token 值来查找⽤户即可(为了安全考虑,重新登录⼀般要将 Token重写);③登录⼀次⽹站后访问⽹站其他⻚⾯不需要重新登录。
Session 的主要作⽤就是通过服务端记录⽤户的状态。 典型的场景是购物⻋,当你要添加商品到购物⻋的时候,系统不知道是哪个⽤户操作的,因为 HTTP 协议是⽆状态的。服务端给特定的⽤户创建特定的 Session 之后就可以标识这个⽤户并且跟踪这个⽤户了。

HTTP如何保存用户状态?

HTTP 是⼀种不保存状态,即⽆状态(stateless)协议。也就是说 HTTP 协议⾃身不对请求和响应之间的通信状态进⾏保存。那么我们如何保存⽤户状态呢?Session 机制的存在就是为了解决这个问题,Session 的主要作⽤就是通过服务端记录⽤户的状态。典型的场景是购物⻋,当你要添加商品到购物⻋的时候,系统不知道是哪个⽤户操作的,因为 HTTP 协议是⽆状态的。服务端给特定的⽤户创建特定的Session 之后就可以标识这个⽤户并且跟踪这个⽤户了(⼀般情况下,服务器会在⼀定时间内保存这个Session,过了时间限制,就会销毁这个Session)。

保存Session的方法

最常⽤的就是内存和数据库(⽐如是使⽤内存数据库redis保存)。既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?⼤部分情况下,我们都是通过在Cookie 中附加⼀个 Session ID 来⽅式来跟踪。
Cookie 被禁用怎么办?
最常⽤的就是利⽤ URL 把 Session ID 直接附加在URL路径的后⾯。

HTTP 和 HTTPS

  1. 端⼝ :HTTP的URL由“http://”起始且默认使⽤端⼝80,⽽HTTPS的URL由“https://”起始且默认
    使⽤端⼝443。
  2. 安全性和资源消耗: HTTP协议运⾏在TCP之上,所有传输的内容都是明⽂,客户端和服务器端都
    ⽆法验证对⽅的身份。HTTPS是运⾏在SSL/TLS之上的HTTP协议,SSL/TLS 运⾏在TCP之上。所有传输的内容都经过加密,加密采⽤对称加密,但对称加密的密钥⽤服务器⽅的证书进⾏了⾮对称
    加密。所以说,HTTP 安全性没有 HTTPS⾼,但是 HTTPS ⽐HTTP耗费更多服务器资源。
    对称加密:密钥只有⼀个,加密解密为同⼀个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
    ⾮对称加密:密钥成对出现(且根据公钥⽆法推知私钥,根据私钥也⽆法推知公钥),加密解密使⽤不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度比较慢,典型的⾮对称加密算法有RSA、DSA等。

http://www.niftyadmin.cn/n/1034288.html

相关文章

数据库大表优化

单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万级以下是没有太大问题的。 字段: 1.尽量使用…

linux 编辑html文件命令,查看和编辑文件(Linux的快捷键和主要命令)

查看和编辑文件(Linux的快捷键和主要命令)cat filename | more这个命令用于查看一个被称为 "filename"的文本文件的内容,每次一页. "|"符号是"pipe" 符号(在很多美式键盘里, 它与"\"共用一个键). more 使文本内容的输出显示停止在每一…

SQL慢的原因

读操作慢 在大部分的项目中,对于数据库的读操作是要比写操作多的,所以首先来谈一下读操作慢的原因。 如何定位慢SQL MySQL中有慢查询日志,默认是关闭的,需要手动打开。 1.查询慢日志是否开启 mysql> show variables like %sl…

github最好的linux教程,一分钟认识GitHub

机缘巧合之下,我开始使用 GitHub ,但事实上,刚刚入门的我不知道如何才能使 GitHub 发挥他的全部功能。不久之前,我偶然听了李福斯先生对 GitHub 的介绍,受益匪浅。简单的来说, Git 是一个分布式的版本控制系…

unlimited linux释放内存,为什么不能分配内存

运行一段时间perror报错如下::Cannot allocate memoryTOP此时打印如下:Mem: 261060K used, 140316K free, 0K shrd, 3072K buff, 36812K cachedCPU: 70% usr 0% sys 0% nice 10% idle 0% io 20% irq 0% softirqLoad average: 0.62 0.97 1.14P…

如何解决数据库主从数据不一致的问题

数据库集群架构 目前流行的数据库集群架构包括以下三点: 一主多从:高可用方案,主库挂掉,从库会变成主库; 读写分离:减少单机数据库压力,主库提供写服务,从库提供读服务;…

linux磁盘大小汇总,Linux 磁盘空间大小统计du命令常见用法

1、对指定文件或文件夹进行统计,缺省单位为kbyte(k或千字节),下例对文件夹testa进行统计:[[email protected] ~]$ du -s testa1589308 testa2、对文件夹统计的正确做法,如果想知道某个文件夹所占空间的大小,用什么命…

Java线上排查

CPU 1.top看一下那些进程占用比较高 2.top -H -p pid(进程号),找到占用比较高的线程 3.将占用最高的pid转换为16进制printf ‘%x\n’ pid得到nid 4.打印堆栈信息jstack pid >> jstack.log 5.打开日志搜索nid 对jstack文件进行分析&…