http五层结构
- 物理层主要作用是定义物理设备如何传输数据
- 数据链路层在通信的实体间建立数据链路连接
- 网络层为数据在结点之间传输创建逻辑链路
- 传输层为向用户提供可靠的端到端(End-to-End)服务
- 应用层为应用软件提供了很多服务
http/1.1与http2
三次握手
- 第一次握手
客户端请求建立连接。 - 第二次握手
服务端应答客户端,并请求建立连接。 - 第三次握手
客户端针对服务端请求确认应答。
URI,URL,URN
- URI:统一 资源标志符(包括url和urn)
- URL:统一资源定位符
- URN:永久统一 资源定位符,在资源移动之后还能被找到
nodejs简单服务器
const http = require('http')
http.createServer(function (req, res) {
console.log(req.url)
res.end('callback')
}).listen(8080)
console.log('listen on 8080')
curl
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思
具体用法–>http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
cookie共享
不同域名下的相同二级域名可以实现cookie共享
例如:a.test.com和b.test.com的二级域名都是test可以给test设置cooike,就可以实现cooike共享了
一、访问test.com(因为先访问test.com才能设置cookie)
二、访问有相同二级域名的不同域名(结果都出现的相同的cookie)
三、后端代码
const fs = require('fs')
const http = require('http')
http.createServer(function (req, res) {
const host = req.headers.host
var html = fs.readFileSync('index.html', 'utf-8')
if (host === 'test.com:8080') {
res.writeHead(200, {
// 默认就是text/html,text/plain为字符
"Content-Type": 'text/html',
'set-cookie': ['test=999;domain=test.com']
})
}
res.end(html)
}).listen(8080)
console.log('listen on 8080')
长连接
http1.1
- 前提:一个建立http请求前,要先建立一个tcp链接
- 目的:创建tcp链接并复用此链接(不用重复的建立tcp链接,省掉了三次握手的时间)
- 内容:例如chrome允许一次创建6个tcp并发链接,一开始并发的创建6个tcp链接,之后的请求链接可以复用期中的tcp链接来执行http请求,但是如果有10个链接要发送就要等6个tcp创建传输完成之后剩下的htpp再进去
- 注意:在http1.1中http请求有先后顺序,一个tcp可以执行多个http请求
http2.0
只需要一个tcp链接就可以了,因为一个tcp链接可以并发的执行多个http请求
数据协商
主要是客户端向服务器提供,我想要返回的数据类型和数据打包格式语言等
- 客户端
- 服务器
访问跳转
例如:访问/
就跳转到/new
页面
- 内容:设置返回头为
302
并且设置返回头信息为Location:'/new'
const http = require('http')
http.createServer(function (req, res) {
if (req.url === '/') {
res.writeHead(302, {
'Location': '/new'
})
res.end('')
}
if (req.url === '/new') {
//设置响应头的类型信息
res.setHeader('content-type', 'text/html;charset=utf-8');
res.end('<div>我是一个内容</div>')
}
}).listen(8080)
console.log('listen on 8080')
csp
- 目的是显示浏览器发送的请求
限制方式
- default- src限制全局
- 资源类型限制
限定使用
- 只能通过http和https请求数据,其他的请求报错
- 限制域名(self为本机域名)另一个为别的域名
- 限制form中action链接的返回范围