


Lassen Sie uns darüber sprechen, wie Sie mit Node durch Übung eine Inhaltskomprimierung erreichen können
Wie erreicht man eine Inhaltskomprimierung mit Nodejs? Der folgende Artikel wird über die Methode zur Implementierung der Inhaltskomprimierung (gzip/br/deflate) auf der Node-Seite in der Praxis sprechen. Ich hoffe, er wird Ihnen hilfreich sein!
Als ich mein Anwendungsprotokoll überprüfte, stellte ich fest, dass das Laden nach dem Aufrufen der Protokollseite immer ein paar Sekunden dauerte (die Benutzeroberfläche war nicht paginiert), also öffnete ich das Netzwerkfenster, um nachzusehen
dies Erst dann stellte ich fest, dass die von der Schnittstelle zurückgegebenen Daten nicht komprimiert waren. Ich dachte, dass die Schnittstelle den Nginx-Reverse-Proxy verwendet und Nginx mir automatisch bei dieser Ebene helfen würde (das werde ich später untersuchen). theoretisch machbar)
Das Backend hier ist Node Service
In diesem Artikel wird das Wissen über HTTP-Datenkomprimierung
und die Praxis auf der Node-Seite
HTTP数据压缩
相关知识以及在Node侧的实践
前置知识
下面的客户端均指浏览器
accept-encoding
客户端在向服务端发起请求时,会在请求头(request header)中添加accept-encoding
字段,其值标明客户端支持的压缩内容编码
格式
content-encoding
服务端在对返回内容执行压缩后,通过在响应头(response header)中添加content-encoding
,来告诉浏览器内容实际压缩使用的编码算法
deflate/gzip/br
deflate
是同时使用了LZ77
算法与哈夫曼编码(Huffman Coding)
的一个无损数据压缩算法。
gzip
是基于 DEFLATE
的算法
br
指代Brotli
,该数据格式旨在进一步提高压缩比,对文本的压缩相对deflate
能增加20%
的压缩密度,而其压缩与解压缩速度则大致不变
zlib模块
Node.js包含一个zlib 模块
,提供了使用 Gzip
、Deflate/Inflate
、以及 Brotli
实现的压缩功能
这里以gzip
为例分场景列举多种使用方式,Deflate/Inflate
与Brotli
使用方式一样,只是API不一样
基于stream
的操作
基于buffer
的操作
引入几个所需的模块
const zlib = require('zlib') const fs = require('fs') const stream = require('stream') const testFile = 'tests/origin.log' const targetFile = `${testFile}.gz` const decodeFile = `${testFile}.un.gz`
文件的解/压缩
解/压缩结果查看,这里使用du
指令直接统计解压缩前后结果
# 执行 du -ah tests # 结果如下 108K tests/origin.log.gz 2.2M tests/origin.log 2.2M tests/origin.log.un.gz 4.6M tests
基于流(stream)
的操作
使用createGzip
与createUnzip
- 注:所有
zlib
API,除了那些显式同步的 API,都使用 Node.js 内部线程池,可以看做是异步的 - 因此下面的示例中的压缩和解压代码应分开执行,否则会报错
方式1: 直接利用实例上的pipe
方法传递流
// 压缩 const readStream = fs.createReadStream(testFile) const writeStream = fs.createWriteStream(targetFile) readStream.pipe(zlib.createGzip()).pipe(writeStream) // 解压 const readStream = fs.createReadStream(targetFile) const writeStream = fs.createWriteStream(decodeFile) readStream.pipe(zlib.createUnzip()).pipe(writeStream)
方式2: 利用stream
上的pipeline
,可在回掉中单独做其它的处理
// 压缩 const readStream = fs.createReadStream(testFile) const writeStream = fs.createWriteStream(targetFile) stream.pipeline(readStream, zlib.createGzip(), writeStream, err => { if (err) { console.error(err); } }) // 解压 const readStream = fs.createReadStream(targetFile) const writeStream = fs.createWriteStream(decodeFile) stream.pipeline(readStream, zlib.createUnzip(), writeStream, err => { if (err) { console.error(err); } })
方式3: Promise化pipeline
方法
const { promisify } = require('util') const pipeline = promisify(stream.pipeline) // 压缩 const readStream = fs.createReadStream(testFile) const writeStream = fs.createWriteStream(targetFile) pipeline(readStream, zlib.createGzip(), writeStream) .catch(err => { console.error(err); }) // 解压 const readStream = fs.createReadStream(targetFile) const writeStream = fs.createWriteStream(decodeFile) pipeline(readStream, zlib.createUnzip(), writeStream) .catch(err => { console.error(err); })
基于Buffer
的操作
利用 gzip
与 unzip
API,这两个方法包含同步
与异步
类型
- 压缩
gzip
gzipSync
- 解压
unzip
unzipSync
方式1: 将readStream
转Buffer
,然后进行进一步操作
- gzip:异步
// 压缩 const buff = [] readStream.on('data', (chunk) => { buff.push(chunk) }) readStream.on('end', () => { zlib.gzip(Buffer.concat(buff), targetFile, (err, resBuff) => { if(err){ console.error(err); process.exit() } fs.writeFileSync(targetFile,resBuff) }) })
- gzipSync:同步
// 压缩 const buff = [] readStream.on('data', (chunk) => { buff.push(chunk) }) readStream.on('end', () => { fs.writeFileSync(targetFile,zlib.gzipSync(Buffer.concat(buff))) })
方式2: 直接通过readFileSync
Pre-End KnowledgeDie folgenden Clients beziehen sich alle auf Browser
accept-encoding
Die folgenden Clients beziehen sich alle auf Browser
accept-encoding
im (Anfrage-Header) hinzu, dessen Wert das unterstützte komprimierte Inhaltskodierungsformat
des Clients angibt 🎜content -encoding
🎜den für die tatsächliche Komprimierung verwendeten Codierungsalgorithmus< mit, indem er <code>content hinzufügt -encoding
zum Antwortheader. /code>🎜deflate/gzip/br
🎜deflate
verwendet beide LZ77
-Algorithmus und Huffman Coding
ist ein verlustfreier Datenkomprimierungsalgorithmus. 🎜🎜gzip
ist ein Algorithmus, der auf DEFLATE
basiert. 🎜🎜br
bezieht sich auf Brotli
, ein Datenformat, das entwickelt wurde Um das Komprimierungsverhältnis weiter zu verbessern, kann die Textkomprimierung die Komprimierungsdichte im Vergleich zu deflate
um 20 %
erhöhen, während die Komprimierungs- und Dekomprimierungsgeschwindigkeit ungefähr gleich bleibt🎜zlib-Modul 🎜🎜Node.js enthält ein zlib-Modul
, das die Verwendung von Gzip
, Deflate/Inflate
ermöglicht , und Von Brotli implementierte Komprimierungsfunktion
🎜🎜Hier nehmen wir gzip
als Beispiel, um verschiedene Verwendungsmethoden je nach Szenario aufzulisten, Deflate/Inflate
und Brotli</code >Die Verwendung ist die gleiche, aber die API ist anders🎜🎜<strong>Betrieb basierend auf <code>stream
🎜🎜
🎜🎜Operationen basierend auf Puffer</ Code></strong>🎜🎜<img src="https://img.php.cn/upload/image/734/331/536/164674055924407Lassen Sie uns darüber sprechen, wie Sie mit Node durch Übung eine Inhaltskomprimierung erreichen können" title="164674055924407Lassen Sie uns darüber sprechen, wie Sie mit Node durch Übung eine Inhaltskomprimierung erreichen können" alt="Lassen Sie uns darüber sprechen, wie Sie mit Node durch Übung eine Inhaltskomprimierung erreichen können "/>🎜🎜Führen Sie mehrere erforderliche Module ein 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>// 压缩
const readBuffer = fs.readFileSync(testFile)
const decodeBuffer = zlib.gzipSync(readBuffer)
fs.writeFileSync(targetFile,decodeBuffer)
// 解压
const readBuffer = fs.readFileSync(targetFile)
const decodeBuffer = zlib.gzipSync(decodeFile)
fs.writeFileSync(targetFile,decodeBuffer)</pre><div class="contentsignin">Nach dem Login kopieren</div></div><h2 data-id="heading-6">Dateidekomprimierung/-komprimierung🎜🎜Dekomprimierungs-/Komprimierungsergebnisse anzeigen, hier verwenden Sie den Befehl <code>du
, um direkt zu zählen die Ergebnisse vor und nach der Dekomprimierung🎜// 测试数据
const testData = fs.readFileSync(testFile, { encoding: 'utf-8' })
Nach dem Login kopierenNach dem Login kopierenOperationen basierend auf stream
🎜Verwenden Sie createGzip
und createUnzip
🎜- Hinweis: Alle
zlib
-APIs, mit Ausnahme derjenigen, die explizit synchron sind, verwenden den internen Thread-Pool von Node.js und können als asynchron betrachtet werden - Also Die folgenden Komprimierungs- und Dekomprimierungscodes im Beispiel sollten separat ausgeführt werden, andernfalls wird ein Fehler gemeldet
🎜Methode 1: Verwenden Sie direkt die Pipe</code >-Methode auf der Instanz, um den Stream zu übergeben🎜 <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>const buffer = Buffer.from(testData)</pre><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div><div class="contentsignin">Nach dem Login kopieren</div></div>🎜<strong>Methode 2:</strong> Mit der <code>Pipeline
auf stream
können Sie andere Verarbeitungen während des Streams separat durchführen Rollback🎜const transformStream = new stream.PassThrough()
transformStream.write(buffer)
// or
const transformStream = new stream.Duplex()
transformStream.push(Buffer.from(testData))
transformStream.push(null)
Nach dem Login kopierenNach dem Login kopieren🎜Methode 3: Promise pipeline
-Methode🎜transformStream
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream(targetFile))
Nach dem Login kopierenNach dem Login kopieren Operation basierend auf Puffer
< /h3>🎜Verwenden Sie die APIs gzip
und unzip
. Diese beiden Methoden umfassen die Typen synchron
und asynchronous
🎜 - Komprimierung
gzip
gzipSync
- Entpacken< ul>
unzip
unzipSync
🎜Methode 1 : Wird < code>readStream in den Puffer
umwandeln und dann weitere Vorgänge ausführen🎜- gzip: asynchronous
const buffer = Buffer.from(testData)
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren- gzipSync: synchronisiert< /li>
const result = zlib.gzipSync(buffer)
Nach dem Login kopierenNach dem Login kopieren🎜Methode 2: Lesen Sie 🎜fs.writeFileSync(targetFile, result)
Nach dem Login kopierenNach dem Login kopieren🎜Dekomprimierung/Komprimierung von Textinhalten direkt über readFileSync
🎜🎜In Zusätzlich zur Dateikomprimierung, manchmal vielleicht, um den übertragenen Inhalt direkt zu dekomprimieren🎜
这里以压缩文本内容为例
// 测试数据
const testData = fs.readFileSync(testFile, { encoding: 'utf-8' })
Nach dem Login kopierenNach dem Login kopieren基于流(stream)
操作
这块就考虑 string
=> buffer
=> stream
的转换就行
string
=> buffer
const buffer = Buffer.from(testData)
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopierenbuffer
=> stream
const transformStream = new stream.PassThrough()
transformStream.write(buffer)
// or
const transformStream = new stream.Duplex()
transformStream.push(Buffer.from(testData))
transformStream.push(null)
Nach dem Login kopierenNach dem Login kopieren这里以写入到文件示例,当然也可以写到其它的流里,如HTTP的Response
(后面会单独介绍)
transformStream
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream(targetFile))
Nach dem Login kopierenNach dem Login kopieren基于Buffer
操作
同样利用Buffer.from
将字符串转buffer
const buffer = Buffer.from(testData)
Nach dem Login kopierenNach dem Login kopierenNach dem Login kopierenNach dem Login kopieren然后直接使用同步API进行转换,这里result就是压缩后的内容
const result = zlib.gzipSync(buffer)
Nach dem Login kopierenNach dem Login kopieren可以写入文件,在HTTP Server
中也可直接对压缩后的内容进行返回
fs.writeFileSync(targetFile, result)
Nach dem Login kopierenNach dem Login kopierenNode Server中的实践
这里直接使用Node中 http
模块创建一个简单的 Server 进行演示
在其他的 Node Web
框架中,处理思路类似,当然一般也有现成的插件,一键接入

const http = require('http')
const { PassThrough, pipeline } = require('stream')
const zlib = require('zlib')
// 测试数据
const testTxt = '测试数据123'.repeat(1000)
const app = http.createServer((req, res) => {
const { url } = req
// 读取支持的压缩算法
const acceptEncoding = req.headers['accept-encoding'].match(/(br|deflate|gzip)/g)
// 默认响应的数据类型
res.setHeader('Content-Type', 'application/json; charset=utf-8')
// 几个示例的路由
const routes = [
['/gzip', () => {
if (acceptEncoding.includes('gzip')) {
res.setHeader('content-encoding', 'gzip')
// 使用同步API直接压缩文本内容
res.end(zlib.gzipSync(Buffer.from(testTxt)))
return
}
res.end(testTxt)
}],
['/deflate', () => {
if (acceptEncoding.includes('deflate')) {
res.setHeader('content-encoding', 'deflate')
// 基于流的单次操作
const originStream = new PassThrough()
originStream.write(Buffer.from(testTxt))
originStream.pipe(zlib.createDeflate()).pipe(res)
originStream.end()
return
}
res.end(testTxt)
}],
['/br', () => {
if (acceptEncoding.includes('br')) {
res.setHeader('content-encoding', 'br')
res.setHeader('Content-Type', 'text/html; charset=utf-8')
// 基于流的多次写操作
const originStream = new PassThrough()
pipeline(originStream, zlib.createBrotliCompress(), res, (err) => {
if (err) {
console.error(err);
}
})
originStream.write(Buffer.from('<h1 id="BrotliCompress">BrotliCompress</h1>'))
originStream.write(Buffer.from('<h2 id="测试数据">测试数据</h2>'))
originStream.write(Buffer.from(testTxt))
originStream.end()
return
}
res.end(testTxt)
}]
]
const route = routes.find(v => url.startsWith(v[0]))
if (route) {
route[1]()
return
}
// 兜底
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.end(`<h1 id="nbsp-url">404: ${url}</h1>
<h2 id="已注册路由">已注册路由</h2>
<ul>
${routes.map(r => `<li><a href="${r[0]}">${r[0]}</a></li>`).join('')}
</ul>
`)
res.end()
})
app.listen(3000)
Nach dem Login kopieren更多node相关知识,请访问:nodejs 教程!
Das obige ist der detaillierte Inhalt vonLassen Sie uns darüber sprechen, wie Sie mit Node durch Übung eine Inhaltskomprimierung erreichen können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
// 测试数据 const testData = fs.readFileSync(testFile, { encoding: 'utf-8' })
stream
zlib
-APIs, mit Ausnahme derjenigen, die explizit synchron sind, verwenden den internen Thread-Pool von Node.js und können als asynchron betrachtet werdenconst transformStream = new stream.PassThrough() transformStream.write(buffer) // or const transformStream = new stream.Duplex() transformStream.push(Buffer.from(testData)) transformStream.push(null)
transformStream .pipe(zlib.createGzip()) .pipe(fs.createWriteStream(targetFile))
Puffer
< /h3>🎜Verwenden Sie die APIs gzip
und unzip
. Diese beiden Methoden umfassen die Typen synchron
und asynchronous
🎜- Komprimierung
gzip
gzipSync
- Entpacken< ul>
unzip
unzipSync
Puffer
umwandeln und dann weitere Vorgänge ausführen🎜- gzip: asynchronous
const buffer = Buffer.from(testData)
- gzipSync: synchronisiert< /li>
const result = zlib.gzipSync(buffer)
fs.writeFileSync(targetFile, result)
readFileSync
🎜🎜In Zusätzlich zur Dateikomprimierung, manchmal vielleicht, um den übertragenen Inhalt direkt zu dekomprimieren🎜// 测试数据 const testData = fs.readFileSync(testFile, { encoding: 'utf-8' })
流(stream)
操作string
=> buffer
=> stream
的转换就行string
=> buffer
const buffer = Buffer.from(testData)
buffer
=> stream
const transformStream = new stream.PassThrough() transformStream.write(buffer) // or const transformStream = new stream.Duplex() transformStream.push(Buffer.from(testData)) transformStream.push(null)
HTTP的Response
(后面会单独介绍)transformStream .pipe(zlib.createGzip()) .pipe(fs.createWriteStream(targetFile))
Buffer
操作Buffer.from
将字符串转buffer
const buffer = Buffer.from(testData)
const result = zlib.gzipSync(buffer)
HTTP Server
中也可直接对压缩后的内容进行返回fs.writeFileSync(targetFile, result)
http
模块创建一个简单的 Server 进行演示Node Web
框架中,处理思路类似,当然一般也有现成的插件,一键接入const http = require('http') const { PassThrough, pipeline } = require('stream') const zlib = require('zlib') // 测试数据 const testTxt = '测试数据123'.repeat(1000) const app = http.createServer((req, res) => { const { url } = req // 读取支持的压缩算法 const acceptEncoding = req.headers['accept-encoding'].match(/(br|deflate|gzip)/g) // 默认响应的数据类型 res.setHeader('Content-Type', 'application/json; charset=utf-8') // 几个示例的路由 const routes = [ ['/gzip', () => { if (acceptEncoding.includes('gzip')) { res.setHeader('content-encoding', 'gzip') // 使用同步API直接压缩文本内容 res.end(zlib.gzipSync(Buffer.from(testTxt))) return } res.end(testTxt) }], ['/deflate', () => { if (acceptEncoding.includes('deflate')) { res.setHeader('content-encoding', 'deflate') // 基于流的单次操作 const originStream = new PassThrough() originStream.write(Buffer.from(testTxt)) originStream.pipe(zlib.createDeflate()).pipe(res) originStream.end() return } res.end(testTxt) }], ['/br', () => { if (acceptEncoding.includes('br')) { res.setHeader('content-encoding', 'br') res.setHeader('Content-Type', 'text/html; charset=utf-8') // 基于流的多次写操作 const originStream = new PassThrough() pipeline(originStream, zlib.createBrotliCompress(), res, (err) => { if (err) { console.error(err); } }) originStream.write(Buffer.from('<h1 id="BrotliCompress">BrotliCompress</h1>')) originStream.write(Buffer.from('<h2 id="测试数据">测试数据</h2>')) originStream.write(Buffer.from(testTxt)) originStream.end() return } res.end(testTxt) }] ] const route = routes.find(v => url.startsWith(v[0])) if (route) { route[1]() return } // 兜底 res.setHeader('Content-Type', 'text/html; charset=utf-8') res.end(`<h1 id="nbsp-url">404: ${url}</h1> <h2 id="已注册路由">已注册路由</h2> <ul> ${routes.map(r => `<li><a href="${r[0]}">${r[0]}</a></li>`).join('')} </ul> `) res.end() }) app.listen(3000)

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



So löschen Sie einen Knoten mit nvm: 1. Laden Sie „nvm-setup.zip“ herunter und installieren Sie es auf dem Laufwerk C. 2. Konfigurieren Sie Umgebungsvariablen und überprüfen Sie die Versionsnummer mit dem Befehl „nvm -v“. install“-Befehl Knoten installieren; 4. Löschen Sie den installierten Knoten über den Befehl „nvm uninstall“.

Wie gehe ich mit dem Datei-Upload um? Der folgende Artikel stellt Ihnen vor, wie Sie Express zum Hochladen von Dateien im Knotenprojekt verwenden. Ich hoffe, er ist hilfreich für Sie!

Während dieser Zeit habe ich einen dynamischen HTML-Dienst entwickelt, der allen Kategorien von Tencent-Dokumenten gemeinsam ist. Um die Generierung und Bereitstellung des Zugriffs auf verschiedene Kategorien zu erleichtern und dem Trend der Cloud-Migration zu folgen, habe ich über die Verwendung von Docker nachgedacht Serviceinhalte verwalten und Produktversionen einheitlich verwalten. In diesem Artikel werden die Optimierungserfahrungen, die ich bei der Bereitstellung von Docker gesammelt habe, als Referenz weitergegeben.

In diesem Artikel stellen wir Ihnen das Prozessmanagement-Tool „pm2“ von Node vor und sprechen darüber, warum PM2 benötigt wird und wie Sie PM2 installieren und verwenden. Ich hoffe, dass es für alle hilfreich ist!

Detaillierte Erläuterungs- und Installationshandbuch für Pinetwork -Knoten In diesem Artikel wird das Pinetwork -Ökosystem im Detail vorgestellt - PI -Knoten, eine Schlüsselrolle im Pinetwork -Ökosystem und vollständige Schritte für die Installation und Konfiguration. Nach dem Start des Pinetwork -Blockchain -Testnetzes sind PI -Knoten zu einem wichtigen Bestandteil vieler Pioniere geworden, die aktiv an den Tests teilnehmen und sich auf die bevorstehende Hauptnetzwerkveröffentlichung vorbereiten. Wenn Sie Pinetwork noch nicht kennen, wenden Sie sich bitte an was Picoin ist? Was ist der Preis für die Auflistung? PI -Nutzung, Bergbau und Sicherheitsanalyse. Was ist Pinetwork? Das Pinetwork -Projekt begann 2019 und besitzt seine exklusive Kryptowährung PI -Münze. Das Projekt zielt darauf ab, eine zu erstellen, an der jeder teilnehmen kann

Wie packe ich die ausführbare Datei von nodejs mit pkg? Im folgenden Artikel erfahren Sie, wie Sie mit pkg ein Node-Projekt in eine ausführbare Datei packen. Ich hoffe, dass er Ihnen weiterhilft!

npm node gyp schlägt fehl, weil „node-gyp.js“ nicht mit der Version von „Node.js“ übereinstimmt. Die Lösung ist: 1. Löschen Sie den Knotencache über „npm cache clean -f“ 2. Über „npm install -“ g n“ Installieren Sie das n-Modul. 3. Installieren Sie die Version „node v12.21.0“ über den Befehl „n v12.21.0“.

Die Authentifizierung ist einer der wichtigsten Teile jeder Webanwendung. In diesem Tutorial werden tokenbasierte Authentifizierungssysteme und ihre Unterschiede zu herkömmlichen Anmeldesystemen erläutert. Am Ende dieses Tutorials sehen Sie eine voll funktionsfähige Demo, die in Angular und Node.js geschrieben wurde. Traditionelle Authentifizierungssysteme Bevor wir zu tokenbasierten Authentifizierungssystemen übergehen, werfen wir einen Blick auf traditionelle Authentifizierungssysteme. Der Benutzer gibt seinen Benutzernamen und sein Passwort im Anmeldeformular ein und klickt auf „Anmelden“. Nachdem Sie die Anfrage gestellt haben, authentifizieren Sie den Benutzer im Backend, indem Sie die Datenbank abfragen. Wenn die Anfrage gültig ist, wird eine Sitzung mit den aus der Datenbank erhaltenen Benutzerinformationen erstellt und die Sitzungsinformationen werden im Antwortheader zurückgegeben, sodass die Sitzungs-ID im Browser gespeichert wird. Bietet Zugriff auf Anwendungen, die unterliegen
