HTTP协议原理及实践

9 篇文章 0 订阅
订阅专栏

HTTP请求返回的完整过程

第一章 协议基础及其发展历程

一、经典五层协议


HTTP是在应用层,基于传输层
0x1 低三层
物理层主要作用是定义物理设备如何传输数据
数据链路层在通信的实体间建立数据链路连接
网络层为数据在结点之间传输创建逻辑链路
0x2 传输层
向用户提供可靠的端到端(End-to-End)服务
传输层向高层屏蔽了下层数据通信的细节
0x3 应用层
为应用软件提供了很多服务
构建于TCP协议之上
屏蔽网络传输相关细节

二、HTTP历史

0x1 HTTP/0.9
只有一个命令GET
没有 HEADER等描述数据的信息
服务器发送完毕,就关闭TCP连接
0x2 HTTP/1.0
增加了很多命令
增加 status code和 header
多字符集支持、多部分发送、权限、缓存等
0x3 HTTP/1.1
持久连接
pipeline
增加host和其他一些命令
0x4 HTTP2

HTTP协议原理及实践

HTTP请求返回的完整过程

第一章 协议基础及其发展历程

一、经典五层协议


HTTP是在应用层,基于传输层
0x1 低三层
物理层主要作用是定义物理设备如何传输数据
数据链路层在通信的实体间建立数据链路连接
网络层为数据在结点之间传输创建逻辑链路
0x2 传输层
向用户提供可靠的端到端(End-to-End)服务
传输层向高层屏蔽了下层数据通信的细节
0x3 应用层
为应用软件提供了很多服务
构建于TCP协议之上
屏蔽网络传输相关细节

二、HTTP历史

0x1 HTTP/0.9
只有一个命令GET
没有 HEADER等描述数据的信息
服务器发送完毕,就关闭TCP连接
0x2 HTTP/1.0
增加了很多命令
增加 status code和 header
多字符集支持、多部分发送、权限、缓存等
0x3 HTTP/1.1
持久连接
pipeline
增加host和其他一些命令
0x4 HTTP2
所有数据以二进制传输
同一个连接里面发送多个请求不再需要按照顺序来
头信息压缩以及推送等提高效率的功能

三、HTTP三次握手

0x1 三次握手时序图
防止服务端有无用的开销

抓包三次握手的分析

四、URI/URL/URN

0x1 URI
Uniform Resource Identifier/统一资源标志符
用来唯一标识互联网上的信息资源
包括URL和URN
0x2 URL
Uniform Resource locator/统一资源定位器
http://userpass@host.com80/path?query=string#hash
此类格式的都叫做∪RL,比如ftp协议
0x3 URN
永久统一资源定位符
在资源移动之后还能被找到
目前还没有非常成熟的使用方案

五、HTTP报文


0x1、HTTP方法
用来定义对于资源的操作
常用有GET、POST等
从定义上讲有各自的语义
0x2、HTTP CODE
定义服务器对请求的处理结果
各个区间的CODE有各自的语义
好的HTTP服务可以通过CODE判断结果

六、创建服务

利用Node.js创建一个最简单的服务。

const http = require('http')
http.createServer(function(request,response){
console.log('request come', request.url)
response.end('Hello,HTTP')
}).listen(8888)

第二章 HTTP特性总览

一、HTTP访问控制(CORS)


* 服务端在响应消息头中包含消息头:Access-Control-Allow-Origin,值为服务端允许访问资源的域名称,同时浏览器会根据该值与发起的请求消息头Origin值进行匹配,以确认服务端是否允许访问跨域资源。
* 浏览器在发送非“简单方法”(GET,HEAD请求被定义为简单方法)之前,会发送一个预检请求(通常是一个OPTIONS请求),浏览器根据响应消息头验证服务端是否允许访问跨域资源,从而决定是否需要发送“实际请求”。
* 在服务端根据请求消息头Origin值以决定是否允许浏览器访问跨域资源,返回相应的消息头。
具体来说,在实现时通常需要设置如下几个响应消息头:
1.Access-Control-Allow-Origin:“origin-list” | “null” | “*”,允许访问跨域资源的域名列表,对于预检请求来说,决定是否会发送实际请求。
2.Access-Control-Allow-Credentials:true | false,表明实际请求中是否可以包含用户凭证信息。
3.Access-Control-Allow-Methods:“method”,服务端允许访问的实际请求方法名列表。
4.Access-Control-Allow-Headers:“field-name”,在“实际”请求中可以包含的消息头名称列表。
5.Access-Control-Max-Age:seconds,预检请求结果缓存时间,单位:秒。在该时间范围内,发送实际请求之前不再会发送预检请求。

特别说明:对于需要跨域传递Cookie的场景,必须设置消息头“Access-Control-Allow-Credentials”为“true”,且此时“Access-Control-Allow-Origin”值只能为某一指定单一域名。
简而言之,CORS标准的核心就是:服务端需要在浏览器的跨域请求响应中包含指定消息头。

二、缓存Cache-Control

0x1 客户端对请求的处理(请求头设置的Cache-Control):

0x2 服务器对Cache-Control的配置:

0x3 浏览器对于Cache-Control的响应

三、缓存验证

0x1 缓存运行流程图

0x2 验证头
* Last-Modified
上次修改时间
配合 If-Modified-Since或者If-Unmodified-Since使用
对比上次修改时间以验证资源是否需要更新
* Etag
数据签名
配合If-Match或者If-Non-Match使用
对比资源的签名判断是否使用缓存

四、Cookie和Session

0x1 Cookie
通过Set-Cookie设置
下次请求会自动带上
键值对,可以设置多个
0x2 Cookie属性
Max-age和expires设置过期时间
Secure只在https的时候发送
HttpOnly无法通过document.Cookie访问

四、长链接

HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。
客户端的长连接不可能无限期的拿着,会有一个超时时间

五、数据协商

  • Accept
    Accept-Encoding 说明可以接受的内容编码形式(所支持的压缩算法)
    Accept-Language 提示用户期望获得的自然语言的优先顺序
    User-Agent 首部而可以用来识别发送请求的浏览器。 该字符串中包含有用间隔的产品标记符及注释的清单。 产品标识符由产品名称,后面紧跟的’/’以及产品版本号后成,例如 Firefox/4.0.1

尽管使用该首部来进行内容选择是合理的,但是依赖这个首部来确定用户代理都支持哪些功能特性通常被认为是一个糟糕的做法。

六、Redirect

当服务器找不到资源的时候去跳转到一个新的页面。
302跳转是可控的,301跳转不可控收到用户缓存影响。

if (request.url === '/') {
    response.writeHead(302, {  // or 301
      'Location': '/new'
    })
    response.end()
  }
  if (request.url === '/new') {
    response.writeHead(200, {
      'Content-Type': 'text/html',
    })
    response.end('<div>this is content</div>')
  }

七、内容安全策略 CSP

为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略,简单来说,就是我们能够规定,我们的网站只接受我们指定的请求资源。

指令指令和指令值示例指令说明
default-src‘self’ cdn.geekmubai.com默认加载策略
script-src‘self’ js.geekmubai.com对 JavaScript 的加载策略。
style-src‘self’ css.geekmubai.com对样式的加载策略。
img-src‘self’ img.geekmubai.com对图片的加载策略。
connect-src‘self’对 Ajax、WebSocket 等请求的加载策略。不允许的情况下,浏览器会模拟一个状态为 400 的响应。
font-srcfont.cdn.geekmubai.com针对 WebFont 的加载策略。
object-src‘self’针对 、 或 等标签引入的 flash 等插件的加载策略。
media-srcmedia.cdn.geekmubai.com针对媒体引入的 HTML 多媒体的加载策略。
frame-src‘self’针对 frame 的加载策略。
report-uri/report-uri告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。 特别的:如果想让浏览器只汇报日志,不阻止任何内容,可以改用 Content-Security-Policy-Report-Only 头。
HTTP协议原理+实践 Web开发工程师必学
01-05
HTTP协议原理
nodejs的http.createServer过程解析
标子 的专栏
03-11 7741
下面是nodejs创建一个服务器的代码。接下来我们一起分析这个过程。 var http = require('http'); http.createServer(function (request, response) { response.end('Hello World\n'); }).listen(9297); 首先我们去到lib/http.js模块看一下这个函数的代码。 functio...
HTTP协议原理与代码实践之大纲
热门推荐
黑木令之佛性
06-23 2万+
之前有整理过一部分知识点, 一直没有发布, 因为都是有关 前端 方面的零散内容; 现在想想无论分享什么内容都需要慢慢积累, 所以还是决定将之前整理的相关内容验证之后慢慢分享给大家 这个专题就是 HTTP协议原理实践代码 相关的内容; 不积跬步,无以至千里, 戒焦戒躁 。 好了废话不多说, 直接上代码以及图例(为了让大家方便阅读, 都有自己验证过程的一些图片作为分享) 。 学习http 大纲 一: 前后端对 http 的简单掌握:* 1. 后台开发者(http的认知): 1. http metho
HTTP协议原理详解,重磅
最新发布
2401_83977357的博客
03-29 991
比起文本协议,二进制协议解析起来更加高效,"线上"更紧凑哦,更重要的是错误更少小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
HTTP协议特性之HTTP访问控制(CORS)
Science Explorer
08-25 714
当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
HTTP基于IP的访问控制
Geoffrey's Blog
11-19 3109
HTTP基于IP的访问控制通常我们可以使用防火墙来控制网络用户对HTTP服务的访问,包括允许访问以及拒绝访问。相对于复杂的firewall命令,我们还可以直接利用HTTP服务的配置文件来控制网络用户的访问。
HTTP访问控制(CORS)
FY19951211的博客
10-20 2289
跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的HTTP请求。比如说,域名A(http://domaina.example)的某 Web 应用程序中通过<img>标签引入了域名B(http://domainb.foo)站点的某图片资源(http://domainb.foo/image.jpg),...
HTTP协议原理+实践 Web开发工程师必学.txt
06-13
HTTP协议原理+实践 Web开发工程师必学
RESTfulHTTP实践
03-01
本文对RESTfulHTTP的基础原理做了一个概览,探讨了开发者在设计RESTfulHTTP应用时所面临的典型问题,展示了如何在实践中应用REST架构风格,描述了常用的URI命名方法,讨论了如何使用统一接口进行资源交互,何时使用...
Web协议与实践
08-26
本书全面论述了传输Web内容的系统和协议,重点讲述了Web中业已成熟和稳定的技术,如TCP/IP协议及DNS技术、HTTP/1.0的设计及其与TCP之间的交互;深入阐述了Web高速缓存技术和多媒体流播技术的最新技术动态;分析了...
http服务--基于用户的访问控制实现
厉害了,我的linux
10-24 3039
【前言】   http,超文本传输协议,是互联网上应用最广泛的一种网络协议,http的发展历史悠久,这篇博主要来说说http的配置文件。   在centos6上,http默认的版本较低,当然想用新版本可以自己来进行源码编译,这些后面再说,先主要来说一说http的配置文件   http的主配置文件/etc/httpd/conf/httpd.conf ,另外还定义了可以在/e
http基于用户的访问控制--实战
linux系统运维学习日记
01-04 752
http基于域名的虚拟主机的实现博文中有配置jd首页,这篇博文就实现,在访问jd首页的时候需要输入账号密码才能访问。本片博文是博文apache配置文件httpd.conf----小白福利中配置18:基于用户的访问控制的案例。 1、修改httpd的配置文件 &lt;VirtualHost *:80&gt; DocumentRoot /var/www/html/jd/ ServerN...
HTTP访问控制(CORS)一文讲解透彻http跨域的来龙去脉
ailiandeziwei的专栏
04-16 849
跨域资源共享(CORS) 是一种机制,它使用额外的HTTP头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。 比如,站点http://domain-a.com的某 HTML 页面通过<img> 的 ...
HTTP协议原理+实践 Web开发工程师必学(笔记)
小糖穿越火线
04-25 453
开始 数据内容传输都是通过http协议的。 需要理解http http很重要 提升自身价值 简单的例子:浏览器中输入网页,ajax数据,img加载图片 Cache-Control? 缓存的验证 深入到TCP Nginx使用 准备:http这个概念 内容介绍 2-1 网络协议分层 经典五层模型 低三层:物理层主要作用是定义物理设备如何传输数据:网线,网卡端口,光缆...
http协议原理+实践 Web开发工程师必学
任性的wo的博客
09-29 2939
最简单的例子 输入URL打开网页 AJAX获取数据 img标签加载图片 输入URL到打开网页的过程:  网络协议分层: 低三层: 物理层主要作用是定义物理设备如何传输数据(硬件上) 数据链路层在通信的实体间建立数据链路连接(软件上) 网络层为数据在结点之间传输创建逻辑链路 传输层: 向用户提供可靠的端到端(End-to-End)服务 传输层向高层屏蔽了下层数据通信的细节...
http协议原理
衡与墨的博客
04-07 2940
HTTP工作原理 HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。 以下是 HTTP 请求/响应的步骤: 客户端连接到Web服务器 一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP
HTTP传输协议原理
mocas_wang的博客
11-01 4471
目录 1 简介 1.1 简单的HTTP协议 1.2 主要特点 1.3 HTTP请求响应模型 2 工作原理与过程 2.1 工作原理 2.2 用户访问网站的过程? 2.3 HTTP协议栈中各层数据流 3 请求 (1) 请求方法 (2) 请求的网址 (3) 请求头 (4) 请求体 4 响应 (1) 响应状态码 (2) 响应头 (3) 响应体 5 HTTP/1.1与HTTP/1.0的区别 6 HTTP各种长度限制 1. URL长度限制 2. Post数据的长度限制 ...
HTTP 代理原理及实现(一)
yokasou的博客
12-15 4151
Web 代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web 代理无处不在。我之前有关 HTTP 的博文中,多次提到了代理对 HTTP 请求及响应的影响。今天这篇文章,我打算谈谈 HTTP 代理本身的一些原理,以及如何用 Node.js 快速实现代理。
动手学习HTTP协议
huangshanchun的专栏
12-13 1572
1.浏览器发起http请求场景 当我在浏览器中输入,www.t时候,浏览器会自动联想到www.taobao.com,主要是因为之前历史访问过,浏览器引擎会把这个数记录并存储到本地,当再次访问时候就能给出相应提示,如果下图所示。 下图给出浏览器,从打开url到渲染出页面的过程。 2.浏览器发起http请求的时序图 3.http 协议定义和特点 The Hypertext Transfer Protocol (HTTP) is a stateless application-level request/r
Nodejs网络 HTTP & 部署1
08-04
以上是对Node.js网络HTTP模块的总结与描述,希望可以帮助大家更深入地了解Node.js网络编程的原理和应用。Node.js是一个非常强大和灵活的工具,它的HTTP模块为网络应用开发带来了很多便利,希望通过以上的介绍可以让...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Clover引导简明教程 102230
  • Java方法重写与重载的区别 84738
  • Syncthing就是我要的同步备份软件 31533
  • 数据采集:如何自动化采集数据? 29779
  • C#实现倒计时 23509

分类专栏

  • 操作系统
  • 前端开发 23篇
  • 虚拟化技术 2篇
  • 环境搭建 2篇
  • 实用技巧 4篇
  • 后端开发 9篇
  • Python学习 9篇
  • 极客慕白 7篇
  • Java学习 30篇
  • 算法学习 5篇
  • C#学习 2篇
  • 设计师
  • 人工智能 1篇
  • 数据科学 25篇
  • 大数据
  • 安卓学习 1篇
  • 法律扫盲

最新评论

  • Apply函数进行数据预处理

    Z2051604807: 大佬,这个csv文件方便分享一下吗

  • Java方法重写与重载的区别

    风起风落时: 巩固一下

  • Seaborn

    阿卡林!!: 您好,相关数据的xlsx能否发一下呢?

  • Java方法重写与重载的区别

    林阿云: 建议你仔细看看,前一句说限制权限下一句就private限制最小?新手搁这学知识呢还是给你抠字眼呢,本来就不懂还搞文字游戏,搁这学语文呢,第三点的例子也是,private不能重写和子类访问权限不能比父类严格有很大关系吗,这点就不是在这位置说的,文章漏洞多还怕人说,你真网络好人呗。表情包

  • 数据采集:如何自动化采集数据?

    IOTOS: 数据采集软件有很多,不过现在的智慧项目会涉及到很多不同品牌型号的型号,后期更是需要扩展的功能,要统一采集的平台很少,而爱投斯(IOTOS)物联网中间件平台可以满足这些需求,除此之外还可以用于数据展示和应用开发,能够更快更低成本的帮助用户开发行业系统。

大家在看

  • 百日筑基第三天-SOA初步了解
  • 关于Vue2的生命周期会问到哪些面试题?
  • 爬虫神器-亮数据,可以轻松解锁各种网站~
  • 操作符详解(上) (C语言)
  • 利用Poe 机器人免费使用GPT-4o :新手登录和使用指南 图文

最新文章

  • Linux 之 我最常用的20条命令
  • cryptogen tool not found.的解决方案
  • 解决Mac下废纸篓文件无法删除(错误代码-36)
2019年40篇
2018年75篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网论语给姑娘起名字春天的景色1978年马起什么名字送给软件起名范氏男孩宝宝起名起名的成语男孩大全绽放吧百合演员表易经大师起名开国大典演员网站测试手表公司起名xxxgames锦绣未央电视剧全集在线观看免费版坚定信念魔兽作弊温暖的作文蚁人百度网盘名典八字起名的望闻问切的意思圣经起名字乔唯一厉夜廷免费阅读小说工程公司起名的字唐诗宋词名句起名字车牌号查询车主混在抗战姚男孩起名镜神寂你的城池我的堡垒侯氏男孩子起名免费窦姓女孩起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化