Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
HTTP
超文本传输协议(HTTP)是用于传输褚如HTML的超媒体文档的[应用层协议]。它被设计用于Web浏览器和Web服务器之间的通信,但它也可以用于其他目的。
HTTP遵循经典的[客户端-服务端模型],客户端打开一个连接以发送请求,然后等待它收到服务器端响应。
HTTP是[无状态协议],意味着服务器不会在两个请求直接保留任何数据(状态)。
HTTP概述
HTTP是应用层的协议,虽然理论上它可以通过任何可靠的传输协议来发送,但是它还是
通过[TCP]或者是[TLS]-加密的TCP连接来发送。
它不仅被用来传输超文本文档,还用来传输图片、视频或者向服务器发送如HTML表单这样的信息。HTTP还可以根据网页需求,仅获取部分Web文档内容更新网页。
HTTP组件系统
HTTP是一个client-server协议:请求通过一个实体(即用户代理)被发出。大多数情况下,这个用户代理都是指浏览器,也可能是一个爬区网页生成维护搜索引擎索引的机器爬虫等。
每一个发送到服务器的请求,都会被服务器处理并返回一个消息(response)。在client和server之间,还有许多的被称为proxies的实体,他们的作用和表现各不相同,比如有些是网关,caches等。
构建http服务
在Web领域,大多编程语言需要专门的Web服务器作为容器,如ASP、ASP.NET需要IIS,PHP需要搭载Apache或Nginx环境,JSP需要Tomcat。而node提供了http模块,基于TCP,内建了HTTP服务,只需几行代码就可构建服务器。如下:
1、HTTP
启动服务器之后,获取报文
通过报文可以看出HTTP的特点,他是基于请求响应式的,以一问一答的方式实现服务,虽然基于TCP会话,但是本身却没有会话的特点。
从协议的角度来说,现在的应用,如浏览器,其实是一个HTTP代理,用户的行为将通过它转换为HTTP请求报文发送给服务器端,服务器端在处理完请求后,发送响应报文给代理,代理在解析报文之后,将用户需要的内容(通常是报文体)呈现在界面上。*
简而言之,HTTP服务只做两件事:处理HTTP请求,发送HTTP响应。
无论是HTTP请求报文还是HTTP响应报文,都包含:报文头和报文体
HTTP请求
报文第二部分中的报文头通过http_parser进行解析,解析之后为:
此时cookie为:req.headers.cookie
cookie格式为key=value;key2=value形式
什么是Cookie、Session
1、Cookie:HTTP是无状态的协议,但现实中的业务处理需要一定的状态,否者就无法区分不同的用户。比如说无需登录京东就可以添加购物车,你每一次添加的物品(多次请求)都到了同一个购物车。这就需要使用Cookie(存在于报文中)来标识和认证同一个账户。(前后端都可以操作Cookie)
Cookie在浏览器和服务器的协作处理分下面几步
1、服务器向浏览器发送Cookie
2、浏览器将Cookie保存
3、之后每次浏览器都会想服务器发送Cookie
Session:由于在前后端都可以操作Cookie,所以有时使用Cookie是不安全的。比如需要更具Cookie中的isVIP字段来判断业务逻辑,但是前端可以篡改它来达到伪造的目的。而Session只保存在后端,对前端不可见,因此对于数据敏感的操作,就需要用到Session。(Session有效期限短)
基于Cookie来实现用户与数据的映射:服务器生成Session口令,传递Cookie,通过Cookie口令与Session口令来实现用户与数据的映射。一旦篡改了Cookie口令,就无法完成映射。并且Session口令过期时间短,之后再生成新的口令,这也是为什么登陆京东一段时间不操作就需要重新登陆。
基础中间件cookie-parser、实现:
报文体抽象为一个只读对象流,如果业务逻辑需要读取报文体中的数据,需要在数据流结束之后才能操作
HTTP响应
1、报文头:res.setHeader()和res.writeHeader()
可以调用setHeader进行多次设置,但只有调用了writeHead之后,报头才会写入链接中。
报文体:res.write()和res.end()
它们的区别在于res.end()会先调用res.write()发送数据,之后通知服务器这次响应结束。,
HTTP客户端
HTTP客户端原理与服务器端相同。HTTP客户端是服务器端服务模型的另一部分,处于HTTP的另一端,在整个报文的参与中,报文头和报文体由它产生。同时http模块提供了一个底层API:http.request(options, connect),用于构建HTTP客户端,如下:
开启服务器后运行它,作用相当于 curl -v Http: //127.0.0.1:1337/。
参数请求:
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.