数据协商
客户端发送请求给服务器,客户端会声明请求希望拿到的数据的格式和限制,服务端会根据请求头信息来决定返回的信息
分类
- 请求 Accept
- 返回 Content
Accept
Accept–声明想要数据的类型
Accept-Encoding–数据以哪种编码方式进行传输,限制服务端如何进行数据压缩
Accept-Language–展示语言
User-Agent–浏览器相关信息,移动端,客户端,pc端的浏览器User-Agent不同
Content
Content-Type对于Accept,从Accept中选择数据类型返回
Content-Encoding对于Accept-Encoding 声明服务端数据压缩的方式
Content-Language对于Accept-Language,是否根据请求返回语言
// server.js
const http = require('http')
const fs = require('fs')
http.createServer(function (request, response) {
console.log('request come', request.url)
const html = fs.readFileSync('test.html')
response.writeHead(200, {
'Content-Type': 'text/html',
response.end(html)
}).listen(8888)
console.log('server listening on 8888')
查看 network 的 localhost 文件的请求信息,浏览器会自动加上这些头信息。
Response Headers
Connection: keep-alive
Content-Type: text/html
Date: Fri, 21 Sep 2018 02:29:16 GMT
Transfer-Encoding: chunked
Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Cookie:
Host: localhost:8888
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
请求头
浏览器可以接收这些格式的数据,可以进行设置
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
数据编码方式,gzip 使用最多;br 使用比较少,但压缩比高
Accept-Encoding: gzip, deflate, br
浏览器会判断本系统的语言,自动加上。q 代表权重,数值越大权重越大,优先级越高
Accept-Language: zh-CN,zh;q=0.9
长连接
HTTP是基于响应/请求模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确地说是本次HTTP请求就结束了,并没有长连接这么一说。HTTP本质是应用层协议,而TCP才是传输层协议,只有传输层才需要建立连接,HTTP长连接本质上是指TCP连接。
HTTP协议基于TCP,每次HTTP的响应/请求都是基于TCP的连接,如果每次HTTP响应完,TCP连接就断开,等到HTTP请求时,TCP再次连接,这样导致的TCP连接开销是很大的,通过使用TCP长连接来降低开销。HTTP1.1下,默认TCP长连接,也就是Connection默认为keep-alive状态