深入HTTP-数据协商

版权声明:转载需声明本人出品 https://blog.csdn.net/weixin_40288381/article/details/88414209

数据协商

客户端发送请求给服务器,客户端会声明请求希望拿到的数据的格式和限制,服务端会根据请求头信息来决定返回的信息

分类
  • 请求 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状态

猜你喜欢

转载自blog.csdn.net/weixin_40288381/article/details/88414209
今日推荐