[HTTP] HTTP各种特性总览
CORS跨域请求的限制与解决
返回数据时设置头信息,只能有一个域名,需要多个域名要判断
const http = require('http')
http. createServer(function (request, response) {res.writeHead(200,{"Access-Control-Allow-Origin":'*'})
}).listen( 8887 )
console.log( 'server listening on 8887' )
CORS跨域限制以及预请求验证
允许方法
GET
HEAD
POST
允许Content-Type
- text/ plain
- multipart/form-data
- application/x-www-form-urlencoded
其他限制
请求头限制
XMLHttpRequestUpload对象均没有注册任何事件监听器
请求中没有使用ReadableStream对象
预请求
const http = require('http')
http. createServer(function (request, response) {res.writeHead(200,{"Access-Control-Allow-Origin":'*',//设置允许的请求头'Access-Control-Allow-Headers':'X-Test-Cors ',//设置允许的请求方法'Access-Control-Allow -Methods': ' POST, PUT , Delete',//设置最长时间'Access-Control-Max -Age' : '1000'})
}).listen( 8887 )
console.log( 'server listening on 8887' )
缓存头Cache-Control的含义和使用
可缓存性
- public
- 任何代理服务器都可以对数据进行缓存
- private
- 只有发起请求的浏览器可以缓存
- no-cache
- 任何一个节点都不可以缓存
到期
max-age=
- 设置时间过期,过期后再次发送请求到服务器请求信内容
s-maxage=
- 在代理服务器里才生效
max-stale=
- 在max-stale时间内,即使max-age时间过期,也可以使用(
浏览器用不到
)
- 在max-stale时间内,即使max-age时间过期,也可以使用(
const http = require('http')
http. createServer(function (request, response) {res.writeHead(200,{'Cache-Control': ' max-age=200'})
}).listen( 8887 )
console.log( 'server listening on 8887' )
刷新缓存:可以文件名后加入根据内容生成的哈希码。
重新验证
must-revalidate
- 如果缓存已经过期,需要向源服务端重新获取数据,不能直接使用
proxy-revalidate
- 缓存服务器必须在过期时在源服务器重新请求
其他
- no-store
- 本地和代理不可以缓存
- no-transform
- 不可以随便改动返回的内容
缓存验证Last-Modified和Etag的使用
Last-Modified
上次修改时间
配合If-Modified- Since或者If-Unmodified-Since使用
对比上次修改时间以验证资源是否需要更新
Etag
- 数据签名
- 配合If-Match或者If-Non-Match使用
- 对比资源的签名判断是否使用缓存
if (request.url === '/script.js'){console.log(request.headers)const etag = request.headers('if-none-match')if(etag === '777'){response.writeHead(304,{'Content-Type': 'text/javascript','Cache-Control': ' max-age=200000,no-cache','Last-Modified':'123',"Etag":'777'})response.end('456')}else{response.writeHead(200, {'Content-Type': 'text/javascript','Cache-Control': ' max-age=200000,no-cache','Last-Modified':'123',"Etag":'777'})response. end('console.log("script loaded")' )}}
cookie和session
Cookie
- 通过Set-Cookie设置
- 下次请求会自动带上
- 键值对,可以设置多个
不能够跨域去设置Cookie
Cookie≠session
Cookie属性
- max-age和expires设置过期时间
- Secure只在https的时候发送
- HttpOnly无法通过document.cookie访问
const http = require('http')
http. createServer(function (request, response) {response.writeHead(200, {'Content-Type': ' text/html','Set-Cookie':['id=123;max-age=2','abc=456;HttpOnly']})
}).listen( 8887 )
console.log( 'server listening on 8887' )
HTTP长连接
HTTP1.1中有6个并发的链接
HTTP2在一个TCP链接可以并发的发送多个请求
const http = require('http')
http. createServer(function (request, response) {response.writeHead(200, {'Content-Type': ' text/html',"Connection":"close","Connection":"keep-alive"})
}).listen( 8887 )
console.log( 'server listening on 8887' )
数据协商
分类
请求(客户端)
- Accept
- 明确想要接收数据的类型
- Accept-Encoding
- 明确编码方式,限制服务端压缩方式
- Accept-Language
- 返回信息判断是中文还是英文
- User-Agent
- 判断浏览器相关信息
- Accept
返回(服务端)
- Content-Type
- 选择一种数据格式,作为真正返回的数据格式进行返回(申明)
- Content-Encoding
- 对应Accept-Encoding
- Content-Language
- 对应Accept-Language
- Content-Type
const http = require('http')
http. createServer(function (request, response) {response.writeHead(200, {'X-Content-Type-Options':'nosniff','Content-Encoding':'gzip'})
}).listen( 8887 )
console.log( 'server listening on 8887' )
Redirect
301:永久跳转(变更),除非清除浏览器缓存
302:临时跳转
const http = require("http");
const fs = require("fs");
http.createServer(function (req, res) {console.log("request come", req.url);if (req.url === "/") {res.writeHead(302, {Location: "/new",});res.end("");} else {res.writeHead(200, {"Content-Type": "text/html",});res.end("<div>this is content</div>");}
}).listen(8888);
console.log("server listening on 8888");
CSP
全称Content-Security-Policy
,意为内容安全策略
了解更多参考网址
作用
- 限制资源获取
- 报告资源获取越权
限制方式
- default-src限制全局
- 指定资源类型
- connect-src
- 请求发向的目标的限制
- font-src
- 策略可以包含一个或多个源
- frame-src
- 可以允许一个或多个源
- media-src
- 可以允许一个或多个源
- manifest-src
- 可以允许一个或多个源
- img-src
- 图片可以从哪些网址上加载
- style-src
- 样式和脚本的资源从哪些网址上加载
- script-src
- 样式和脚本的资源从哪些网址上加载
- 。。。
- connect-src
实例
只能限制去加载我们本站提供的外链的脚本
"Content-Security-Policy": "default-src default-src\'self\' "
只能限制加载某个网站的内容
"Content-Security-Policy": "default-src default-src\'self\' https://www.baidu.com"
只能限制表单
"Content-Security-Policy": "default-src \'self\'; form-action \'self\'"
[HTTP] HTTP各种特性总览相关推荐
- Html5新特性总览
Html5新特性总览 1.HTML5 新元素 标签 描述 < article> 定义页面独立的内容区域. < aside> 定义页面的侧边栏内容. < bdi> 定 ...
- 特性总览:核心特性、数据存储、Web技术、框架整合与测试
Spring的事件是基于Java的标准事件进行扩展的,但与Java的标准事件会有一些区别 资源管理也是继承了Java的资源管理,它的有些API是借鉴了Java核心的底层API的实现 Java默认就支持 ...
- 【ES6-11(2015-2020)】特性总览与开发环境准备
文章目录 1. ES6-11思维导图 2. 环境安装 3. 构建开发环境 1. ES6-11思维导图 看到这么多特性,是不是很慌,不要着急,总会学会的~ 2. 环境安装 Node 环境安装 下载地址: ...
- java11 是长期支持_这里有你不得不了解的Java 11版本特性说明
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- Redis4.0、5.0、6.0、7.0特性整理(持续更新)
最近研究研究新版本redis的新特性,网上查了查资料,这里记录一下. 0. Redis的版本迭代和里程碑 Redis从发布至今,已经有十余年的时光了,一直遵循着自己的命名规则: 版本号第二位如果是奇数 ...
- H5的新特性及部分API详解
h5新特性总览 移除的元素 纯表现的元素: basefont.big.center.font等 对可用性产生负面影响的元素: frame.frameset.noframes 新增的API 语义: 能 ...
- H5的新特性及API详解(很惊人)
H5的新特性及API详解(很惊人) 2017-01-20 17:00 4057人阅读 评论(0) 收藏 举报 分类: h5(11) js函数(64) js技巧(15) 版权声明:本文为博主原创 ...
- OpenHarmony 3.1 Release版本特性讲解
开放原子开源基金会已于2022-3-30正式发布了OpenHarmony 3.1 Release版本(也称330版本),随版本发布带来的还有OpenHarmony SDK-Ohos_sdk 3.1 R ...
- 第一章·MySQL介绍及安装
一.DBA工作内容及课程体系 二.MySQL课程体系介绍 三.DBA的职业素养 四.MySQL简介及安装 01 什么是数据? 02 什么是数据库管理系统 03 数据库管理系统种类 04 MySQL发展 ...
最新文章
- 利用python开源库制作并验证torrent种子文件
- 程序员每天工作摸鱼俩小时,月薪35K?
- justify-content与align-items解析
- Migw用CMD编译C语言,NOTEPAD++用MinGW编译C,C++语言
- android中设置菜单栏,android – 菜单项没有显示在操作栏
- 如何看待事理图谱版magi--学迹
- jquery梳理之常用选择器
- 机器学习在植物病害识别研究中的应用
- 读取和写入文件的最简单方法
- hadoop环境准备-大数据Week5-DAY6-1-hadoop
- java如果目录不存在则创建目录_java – 创建一个目录,如果它不存在,然后再创建该目录中的文件...
- 一分钟了解contextlib模块
- 安卓微信自动抢红包插件优化和实现
- twaver API笔记
- python3调用cpp的方法——python调用so
- pacman系列命令
- 结构光的概念及其实现三维成像的主要原理
- python解一元二次方程
- 南京邮电大学操作系统实验五:Windows平台多进程共享内存通信
- 人工智能定价算法的发展,使得默示共谋更为普遍
热门文章
- sql 孩子兄弟表示法 所有子节点_matlab实现随机+蓄意攻击网络节点(1)
- Java 线程之间通信
- java 将一串字符串 转换成_简单几步,教你如何轻松的将Java中的字符串转换为Integer,你学会了吗?...
- MacOS 安装 Telnet
- SQL Server占用服务器内存过高
- 远程桌面连接服务器,提示身份验证错误,要求的函数不受支持,但又找不到加密Oracle修正
- 小汤学编程之JavaScript学习day01——认识JS、JS基础语法
- 7.16-7.22第二周
- Python并发编程:多进程-守护进程
- Linux IO 多路复用是什么意思?