目录
2、HTTP的工作原理(访问www.baidu.com背后发生了什么)
1、HTTP简介
什么是超文本?
包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又称网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
http:超文本传输协议(hyper text transfer protocol)。
作用:在网页上传输web网页。
http协议是在浏览器和web服务器之间使用,用来传输网页。所有的浏览器都懂http协议。;所有的web服务器:nginx、tomcat、IIS、python web、go web框架、jave web框架都能读懂http协议。
1.1、什么是URL
URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某个一文档(例如以html结尾的文档)。URL由协议、主机和端口(默认为80)以及文件名构成。如:
1.2、什么是超文本传输协议HTTP?
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
2、HTTP的工作原理(访问www.baidu.com背后发生了什么)
序号7和8要调换一下顺序。因为有长连接(现在用的是1.1(用的人数多一些)和2.0版本(新一些))和短连接(以前http协议用的是0.9版本,不支持长连接)
- 长连接:长时间连接--》保持一段时间,然后再四次断开。比如:ngxin中就是保持65秒然后断开
- 短连接:短时间连接--》事情完成就进行四次断开。
2.1、HTTP协议版本(常考)
- 0.9版本 不支持长连接 引入了GET方法
- 1.0版本 引入了POST HEAD方法
- 1.1版本 支持长连接,传输的数据是文本格式(现在还是主流版本) 引入了PUT、OPTIONS、DELETE等方法,引入了持久连接,即长连接
- 2.0版本 比较新的,速度更加快,数据格式是二进制,多路复用(提升效率,吞吐快)
在1.1之前,每次请求都会新建一个TCP连接(大量的浪费了资源)。
即下面的非持久性连接和持久性连接:
2.1.1、http方法
- GET 请求获取 浏览器默认参数只能放在url中 /sc?username=root&passwd=123456,不会携带body数据
- POST 新增 可以携带body数据
- PUT 修改
- DELETE 删除
- CONNECT 连接
- OPTIONS 查看服务器端的参数,比如支持哪些方法
- HEAD 请求头
2.2、非持久性连接和持久性连接(传输层)
2.2.1、HTTP的无状态性
定义:是指同一个客户端(浏览器)第二次访问同一个Web服务器上的页面时,服务器无法知道这个客户曾经访问过。HTTP的无状态性简化了服务器的设计,使其容易支持大量并发的HTTP请求。
web服务器端的nginx不知道你的请求是第一次来的请求,还是第二次。即不知道你是新的请求还是旧的请求。(可以用新老用户来理解,无状态性即每次都是新用户;有状态性即第二次来就是老用户了)
2.2.2、HTTP的有状态性
什么是Http无状态?Session、Cookie、Token三者之间的区别 - 翎野君 - 博客园
定义:服务器收集客户端的数据,记录它的信息,通过这些信息可以判断你是老用户还是新用户。
session和cookie技术可以保留用户的信息。都有一个过期时间。
用生活的例子来解释什么是Cookie和Session:
健身房的会员卡(Cookie)和人脸识别系统(Session)。
- Cookie:Web服务器让浏览器保存用户的信息。信息保存到客户端,放在浏览器的Cookie(存放数据的地方)。比作会员卡是因为会员卡会要自己携带,等进健身房,你掏出会员卡,人家才知道你是老用户。
- Session:用户的信息保存在服务器端,可以放在数据库中,也可以放在内存中的一个数结构中。获取信息的时候,可以到Session中取查找,要是查得到就是老用户。查不到就是新用户。比作人脸识别系统,是因为人脸识别系统的数据都是存放在服务器端的,我们只需要人过去就能够识别是不是新用户,不需要我们携带什么证明自己是老用户的东西。
现在流行使用的token验证。它会将token放在url的参数后面。
3、HTTP报文结构
3.1、请求报文
即从客户端(浏览器)向Web服务器发送的请求报文。报文的所有字段都是ASCII码。(因为http1.1是纯文本格式的)
根据《图解HTTP》书中所写,通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
我们拆开理解:
报文主体指HTTP报文本身的主体部分。那报文主体的作用是什么?HTTP报文的主体用于传输请求或响应的实体主体。
理解实体主体要先知道什么是实体,实体作为请求或响应的有效载荷被传输,其内容由实体首部和实体主体组成。(实体首部会放在报文首部之中)
所以通常情况下报文主体等于实体主体。
支持压缩,会让客户能够更快的加载网页提高用户的服务质量,但是会多是消耗服务器的资源。
这个表示自己用的什么途径(浏览器啥的)访问的服务器。
3.1.1、请求报文中有什么东西。首部字段有什么。
在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP 首部字段等部分构成。
- host
- user-agent
- method
- http1.1
- URL
- ACCEPT
Cookie属于可选字段。
3.1.2、请求报文中的方法
3.1.3、POST和GET的区别
get请求的数据会暴露在地址栏中,而POST请求则不会。GET方法携带的数据放在URL里,不能够携带非常多的参数;但是POST方法可以通过body部分从而携带的数据更加多。
- URL形式
- 传输数据的大小
- 安全性
3.2、响应报文
即从Web服务器到客户机(浏览器)的应答。报文的所有字段都是ASCII码。
3.3、响应报文中的状态码
状态码(Status-Code):是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没有满足,原因是什么。状态码分为以下五类:
3.3.1、常见的状态码以及含义
3.3.2、状态码200和304的区别
在请求报文中,有这个一个字段"If-Modified_since"。在响应报文中,有这一个字段叫做"Last-Modified"。这个字段会记录发出数据的时间,并且判断是200还是304都是要依靠这两个字段的时间来决定。
在嗅探抓包过程中,常见的有两种200和304。这两个状态码都关系到能否获取重要信息。当客户第一次请求服务器资源,服务器成功返回资源,这时状态码为200。所以,状态码为200的数据包往往包含用户从服务器获取的数据。
每个资源请求完成后,通常会被缓存在客户端,并会记录资源的有效时间和修改时间。当客户再次请求该资源,客户端首先从缓存中查找该资源。如果该资源存在,并且在有效期,则不请求服务器,就不会产生对应的请求数据包。
如果不在有效期,客户端会请求服务器,重新获取。服务器会判断修改时间,如果没有修改过,就会返回状态码304,告诉客户端该资源仍然有效,客户端会直接使用缓存的资源。针对304的响应,渗透人员可以分析对应的请求包,获取资源路径。如果该资源不限制访问,就可以直接请求获取。否则,就需要进行Cookie劫持,进行获取。
对于浏览器来说,若是原网页数据没有发生改变的情况下,我们第二次请求(第一次和第二次时时间差在有效时间以内)的时候,点击"刷新",返回的状态码是304。按"Ctrl+F5"(强制刷新)返回的状态码才是200。若是第二次请求的时候,原网页数据发生了改变,那么不管是刷新还是强制刷新,返回的状态码都是200。
3.3.3、403
若是我们把nginx里的网页文件的权限设置为000,那么我们浏览器再次请求网页的时候,因为请求不到,就会返回403这个状态码。当然这个权限设置为多少才能返回403,要看是谁用nginx创建了这个网页。若是普通用户创建的,我们只要在第三位设置为0,那么就会返回403;若是root用户创建的那么我们只要在第一位设置为0,就会返回403。
3.4、用go搭建一个小网站
# 先安装go
yum install go -y
[root@fttswlp go_server]# cat server.go
package main
import (
"fmt"
"net/http"
)
func handler(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintf(writer, "hello,world, %s !",request.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080",nil)
}
[root@fttswlp go_server]# go built server.go
[root@fttswlp go_server]# ./server &
# 在此之前我们要把防火墙关闭
[root@fttswlp go_server]# service firewalld stop
3.5、首部字段或消息头
1、通用首部:请求报文和响应报文两方都会使用的首部
2、请求首部:从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、请求内容相关优先级等信息
3、响应首部:从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息
4、实体首部:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的的信息
5、协商首部:某资源有多种表示方法时使用
3.6、HTTP代理
HTTP代理又称Web缓存或代理服务器(Proxy Server),是一种网络实体,能代表浏览器发出HTTP请求,并将最近的一些请求和响应暂存在本地磁盘中,当请求的Web页面先前暂存过,则直接将暂存的页面发给客户端(浏览器),无需再次访问Internet。
4、HTTPS
参考网站1:深入理解HTTPS工作原理 - SegmentFault 思否
参考网站2:HTTPS原理详解_猪哥66的博客-CSDN博客_https原理
协议
HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
如上图所示 HTTPS 相比 HTTP 多了一层 SSL/TLS
- SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
- TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公
4.1、HTTPS的加密原理
4.2、数字认证
4.2.1、中间人攻击
数字证书,解决公钥传输信任问题
证书颁发和使用过程
4.3、HTTPS的工作流程
4.4、HTTPS的四次握手