http具体讲解

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)

drrnIA.png

三、后端代码

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请求

dsnGwQ.png

http2.0

只需要一个tcp链接就可以了,因为一个tcp链接可以并发的执行多个http请求

数据协商

主要是客户端向服务器提供,我想要返回的数据类型和数据打包格式语言等

  • 客户端

在这里插入图片描述

  • 服务器

dsszRI.png

访问跳转

例如:访问/就跳转到/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链接的返回范围

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值