http模块
http模块
简单的http服务器
var http=require('http')
;var server=http.createServer([requestListener])
创建并返回一个HTTP服务器对象
requestListener:监听到客户端连接的回调函数
server.listen([port,[hostname],[backlog],[callback]])
监听客户端连接请求,只有当调用listen方法以后,服务器才开始工作
port:监听的端口
hostname:主机名(IP/域名)
backlog:连接等待队列的最大长度
callback:调用listen方法并成功开启监听以后,会触发一个listen事件,callback将作为该事件的执行函数。
error
事件:当服务开启失败的时候触发的事件参数
err
具体的错误对象。
listening事件
:当server调用listen方法并成功开始监听以后触发的事件。request事件
:当有客户端发送请求道该主机和端口的请求的时候触发参数request:http.IncomingMessage的一个实例,通过他我们可以获取到这次请求的一些信息,比如信息,数据等。
参数response:http:http.ServerResponse的一个实例,通过他我们可以向该请求的客户端输出返回的响应。
content-type与MIME类型
MIME,即:Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型。
服务端利用content-type
设置传输传输文件的MIME
类型,浏览器经常使用MIME
类型来决定执行何种默认行为。
通用结构
类型
描述
典型示例
text
表明文件是普通文本,理论上是可读的语言
text/plain(通用), text/html, text/css, text/javascript
image
表明是某种图像。不包括视频,但是动态图(比如动态gif)也使用image类型
mage/gif, image/png, image/jpeg, image/bmp, image/webp
audio
表明是某种音频文件
audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
video
表明是某种视频文件
video/webm, video/ogg
application
表明是某种二进制数据
application/octet-stream(通用), application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
http请求缓存
Expires和Cache-Control
Expires
是HTTP/1.0
协议字段,设置过期的时间,使用固定的时间,过期后要重新设置,用法比较死板,建议使用Cathe-Control
。
Cache-Control
是 HTTP/1.1
规范中定义的,被用于在http
请求和响应中通过指定指令来实现缓存的机制。
max-age= < seconds >
max-age
设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。
浏览器首次访问,服务器返回200
状态与内容。
浏览器再次请求服务器时,浏览器会先判断max-age
,如果到期则直接请求服务器,否则直接从缓存中取,服务器收到请求后,判断文件是否被修改过,若是则直接返回200
,否则返回304
,浏览器将从缓存中获取文件。
在max-age时间内,服务器文件有修改,这样用户就不能第一时间获取最新的信息。
ETag
如果服务器设置Cache-Control:max-age:120
,服务器还会提供一个验证令牌,可在响应过期后用来检查资源是否被修改。 客户端会自动在“If-None-Match”
HTTP 请求标头内提供 ETag
令牌。服务器根据当前资源核对令牌。如果它未发生变化,服务器将返回“304 Not Modified”
响应,告知浏览器缓存中的响应未发生变化,可以再延用 120 秒。
其他指令
min-fresh = < seconds > 只在请求头有效,表示客户端希望在指定的时间内获取最新的响应。
public 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。
private 表明响应只能被单个用户缓存,不能作为共享缓存(即CDN、代理服务器等不能缓存它)。
no-cache 强制所有缓存了该响应的缓存用户,在使用已存储的缓存数据前,发送带验证令牌 (ETag)的请求到原始服务器,但如果资源未发生变化,则可避免下载。
only-if-cached 表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝
no-store 缓存不应存储有关客户端请求或服务器响应的任何内容。
must-revalidate 缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源。
s-maxage= 覆盖max-age 或者 Expires 头,但是仅适用于共享缓存(public),并且私有缓存(private)中它被忽略。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control
服务器Set-Cookie
Web 服务器通过发送一个称为 Set-Cookie
的 HTTP Header 来创建一个 cookie。
value
一个键值对字符串,如a:1
。
expires
过期时间,必须格式为Wdy, DD-Mon-YYYY HH:MM:SS GMT
。
domain
指定cookie要设置的域。
path
指定cookie的有效路径
secure
只有当一个请求通过 SSL 或 HTTPS 创建时,包含 secure 选项的 cookie 才能被发送至服务器。
HttpOnly
HTTP-Only 背后的意思是告之浏览器该 cookie 绝不能通过 JavaScript 的 document.cookie
属性访问。设计该特征意在提供一个安全措施来帮助阻止通过 JavaScript 发起的跨站脚本攻击 (XSS) 窃取 cookie 的行为
http://mertensming.github.io/2016/10/20/practice-cookie/ https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies
http.Server
http处理网络请求的能力来源于net模块
与Http_parser模块
。
http.Server处理过程:
当客户端发起请求时,首先会进行TCP连接。
服务器端的
connection
监听事件,请求被发送到socket
上。使用
Http_parser模块
解析当前socket
的连接请求。http_parser
实例对象提供了解析数据的每个阶段的回调函数。
https://yi-love.github.io/blog/node.js/2017/03/21/node-http.html
Last updated