当前位置: 首页 > news >正文

番禺建设网站多少钱宁波网站建设rswl

番禺建设网站多少钱,宁波网站建设rswl,wordpress用户自建,数据库 搭建 网站构建web应用 将从http模块中的服务器端中的request使劲按开始分析,request时间发生于网络连接建立,客户端想服务器发送报文,服务器解析报文,发现http请求的报文的时候,在出发request事件之前,已经准备好Se…

构建web应用

将从http模块中的服务器端中的request使劲按开始分析,request时间发生于网络连接建立,客户端想服务器发送报文,服务器解析报文,发现http请求的报文的时候,在出发request事件之前,已经准备好ServerRequest和ServerResponse对象以供请求和响应报文的操作。

var http = require('http')
http.createServer(function(req, res) {res.writeHead(200,{'Content-Type':'text/plain'})res.end(1337,'127.0.0.1://1337/')
})
  1. 请求方法的判断
  2. URL的路径解析
  3. URL中查询字符串解析
  4. Cookie的解析
  5. Basic认证
  6. 表单数据的解析
  7. 任意格式文件的上传处理

请求方法

HTTP_Parser解析请求报文的时候,将报文头抽取出来,设置为req.method,通常,只要处理get和post请求方法,但是在RESTful类的web服务器中请求方法十分重要,会决定资源的操作行为,PUT代表新建一个资源,post表示更新一个资源,get表示查看一个资源。delete表示删除一个资源。

路径解析

HTTP_Parser会解析req.url,路径解析伪代码如下

function(req, res) {var pathname = url.parse(req.url).pathnamefs.readFile(path.join(ROOT, pathname),function(err, file) {if(err) {res.writeHead(404)res.end('找不到文件')return}res.writeHead(200)res.end(file)})
}

查询字符串

?foo=bar&baz=val字符串就是查询字符串形成请求报文首行的第二部分。
转换为JSON对象

var url = require('url')
var querystring = require('querystring')
var query = querystring.parse(url.parse(req.url).query)
//  
var query = url.parse(req.url, true).query

业务的判断要检查值是数组还是字符串,否则会出现typeerror的情况。

Cookie

Cookie认识

Cookie的处理主要分为如下几步

  1. 服务器向客户端发送cookie
  2. 浏览器将cookie保存
  3. 之后浏览器每次都会将cookie发回客户端
    客户端发送的cookie在请求报文的cookie字段中,HTTP_Parser会将所有的报文字段解析到req.headers上,这个cookie就是req.headers.cookies,根据规范中的定义,cookie的值是key=value,key2=value2的形式,如果需要cookie,解析起来不难
var parseCookie = function(cookie) {var cookies = {}if (!cookie) {return cookies}var list = cookie.split(";")for(let i = 0; i < list.lenght; i++) {var pair = list[i].split('=')cookies[pair[0].trim()] = pair[1]}return cookies
}
function (req, res) {req.cookies = parseCookie(req.headers.cookie);hande(req, res);
}
var handle = function (req, res) {res.writeHead(200);if (!req.cookies.isVisit) {res.end('第一次连接 ');} else {res.writeHead(200)res.end('再次连接')}
};

Set-Cookie: name=value; Path=/; Expires=Sun, 23-Apr-23 09:01:35 GMT; Domain=.domain.com

  • path: path表示这个cookie影响到的路径,当前访问的路径不满足该匹配,浏览器不会发送这个cookie
  • Expires Max-Age: 告知浏览器这个Cookie何时过期,如果不设置该选项,在关闭浏览器的时候会丢失这个cookie,如果设置了过期时间,浏览器会将cookie内容写入到磁盘中保存。Expires的值是一个UTC格式的时间字符串,告知浏览器啥时候过期,Max-Age告知浏览器Cookie多久后过期,如客户端的时间和服务器的时间不能匹配,这种时间设置就会出现偏差
  • HttpOnly告知浏览器不允许通过脚本document.cookie去更改这个cookie值
  • Secure: 当Secure的值为true,在HTTP中是无效的,在HTTPS中才有效,表示创建的Cookie只能在HTTPS连接中被浏览器传送到服务器端进行会话验证,如果HTTP连接则不会传递该信息,所以很难被窃听到。

Cookie的性能的影响

由于cookie的实现之际,一旦服务器向客户端发送了设置cookie的意图,除非cookie过期,否则大部分的客户端每次都会请求发送这些cookie到服务器端,一旦设置的cookie过多,会导致报头比较打,大多数的cookie并不需要每次都用上,会造成带宽的部分浪费。

  • 减小cookie的大小
    更严重的是,如果域名在根节点设置cookie,几乎所有的子路径下的请求都会带上这些cookie,这些cookie在某些情况下是有用的,但是有些情况下是完全无用的,静态文件最为典型,静态文件的业务定位不关心状态,cookie对它而言几乎无用,但是一旦又cookie设置到相同的域下,请求就会带上cookie。
  • 为静态组件使用不同的域名
    为不需要cookie的组件换个域名可以实现减少无效的cookie的传输,多有很多网站的静态文件会有特别的域名,使得业务相关的cookie不会影响静态资源,还可以突破浏览器下载线程数量的限制,因为域名不同,可以将下载线程数范围翻倍。但是换用额外的域名会多dns解析
  • 减少DNS查询
    由于现在的浏览器都会进行DNS缓存。

Session

通过Cookie,浏览器和服务器可以实现状态的记录,但是cookie可以在前端和后端进行修改,数据就容易被伪造和篡改。
为了解决Cookie敏感数据的问题,Session出现了,这个Session的数据只保存在服务器端,客户端无法修改,这样数据的安全性得到一定的保证

基于cookie来实现用户和数据的映射

将所有数据都放在Cookie中不可取,但是将口令放在Cookie中还是可以的。因为口令一日被篡改,就丢失了映射关系,也无法修改服务器端存在的数据了。并且Session的有效期通常较短,普遍的设置是20分钟,如果在20分钟内客户端和服务器端没有交互产生,服务器端就将数据删除。由于数据过期时间较短,且在服务器端存储数据,因此安全性相对较高
一旦服务器启用了Session, 将会约定一个键值作为Session口令,这个值可以任意约定,一旦服务器检测到用户请求cookie中没有携带该值,就会生成一个值,这个值是唯一而且不重复的值,并设定超时时间。

var sessions = {}
var key = " session_id"
var EXPIRES = 20 * 60 * 1000
var generate = function () {var session = {}session.id = (new Date()).getTime() + Math.random()session.cookie = {expire: (new Date()).getTime() + EXPIRES}sessions[session.id] = session;return session
}

每个请求到来的时候,会检查cookie中口令和服务器端的数据,如果过期,就会重新生成

function(req, res) {var id =req.cookies[key]if(!id) {req.session = generate() } else {var session = sessions[id]if(session) {if(session.cookie.expire > (new Date()).getTime()) {// 超时session.cookie.expire = (new Date()).getTime() + EXPIRESreq.session = session} else {delete session[id]req.session = generate()}}else {req.session = generate()}}handle(req, res)
}

仅仅重新生成Session不能完成整个流程,还需要在响应给客户端的时候设置新的值,以便下次请求时候能够对应服务器端的数据,

var writeHead = res.writeHead;
res.writeHead = function() {var cookies = res.getHeader('Set-Cookie')var session = serialize('Set-Cookie',req.session.id)cookies = Array.isArray(cookies)?cookies.concat(session):[cookies, session];res.setHeader('Set-Cookie', cookies)return writeHead.apply(this, arguments)
}

至此,session在前后端进行对应的过程就完成了,这样的业务可以判断和设置session,来维护用户和服务器端的关系

//服务器代码
var handle =function(req, res) {if(!req.session.isVisit) {res.session.isVisit = true;res.writeHead(200);res.end('欢迎第一次来到动物园');}else {res.writeHead(200);res.end('动物园再次欢迎你');}
}

通过查询字符串来实现浏览器端和服务器端数据的对应

检查请求的查询字符串,如果没有值,就会先生成带值的URL,然后形成跳转,让客户端重新发起请求,用户访问一个目录,如果发现查询字符串中不带有session_id参数,就会将用户跳转到带有session_id的地址中,如果浏览器受到302状态码和location包头,就会发起新的请求。

Session和内存

Session和安全

http://www.yayakq.cn/news/811883/

相关文章:

  • 资讯门户类网站廊坊网站建设精灵
  • 西部数码 网站建设贵阳市做网站公司
  • 网站建设增值服务有什么网站可以叫人做图
  • 做网站销售药品财务软件单机版
  • 做网站推广我们是专业的电子商务怎样建立网站的
  • 网站建设丿金手指专业个人网站要求
  • 网站开发总结中职专业设计网站
  • 自助个人网站注册access数据库做网站
  • 做百度网站的公司哪家好seosem是指什么意思
  • 网站流量高iis如何做负载均衡seo深圳培训班
  • 网站支付页面源代码绵竹网站制作
  • 手机网站建设 苏州开封 网站建设 网络推广
  • 网站宽度一般是多少城建网官网12319
  • 图们市建设局网站网站网页和网址的关系
  • 网站首页设计制作教程wordpress修改访问量
  • 建设服装网站目的哪个网站做老款二手车
  • 企业网站建站流程上海知名网站建
  • 网站建站开发简约大气商务网站
  • 常见的静态网站开发技术清城区做模板网站建设
  • 旅游网站建设规划书模块划分建设网站需要多少钱济南兴田德润厉害吗
  • 做网站高校视频wordpress怎么设置404伪静态
  • 政务网站建设和技术维护制度app开发排名公司
  • 做相册视频的网站wordpress 获取当前用户id
  • 文章分享网站模版深圳出台科技支持政策
  • 网站建设杭州哪家便宜产品设计工资一般多少
  • 个人博客网站建设如何弄一个网站
  • 网站架构分析搜索排名广告营销怎么做
  • 顺义石家庄网站建设郑州国外网站建设
  • 石家庄的网站建设为什么很多中国人去菲律宾做网站
  • 温州网站建设方案开发自学网课程设置