04慕课网《进击Node.js基础(一)》HTTP讲解
HTTP:通信协议
流程概述:
http客户端发起请求,创建端口默认8080
http服务器在端口监听客户端请求
http服务器向客户端返回状态和内容
稍微详细解析:
1.域名解析:浏览器搜素自身的DNS缓冲,查看是否有被请求的域名所定义的IP,缓冲1分钟
## 谷歌浏览器输入:
chrome://net-internals/#dns
2.搜索操作系统自身的DNS缓冲(浏览器无缓冲或失效)
3.读取本地的HOST文件
C:\Windows\System32\drivers\etc
4.浏览器发起 一个DNS的系统调用
- 宽带运营商服务器查看本身缓存
- 运营商服务器发起一个迭代(从跟域名对应的IP开始)DNS解析的请求
运营商服务器把结果IP返回操作系统内核同时缓存
操作系统内核把IP发回给浏览器
最终浏览器拿到域名所对应的IP地址
5.浏览器获得域名对应IP后,发起http“三次握手”
- 浏览器的随机端口(8080)向服务器发送TCP连接请求,
该请求会经过路由设备、网卡、内核的TCP/IP协议栈、防火墙最终到达web服务端
6.TCP/IP连接建立以后,浏览器向服务器发送http请求
- 比如使用http的GET方法请求一个根域的域名,歇息可以采用HTTP 1.0的协议
7.服务器端接受到请求,根据路径参数,经过后端的处理,将结果的数据返回给浏览器;
- 如果是页面就会把完整的HTML页面代码返回给浏览器
8.浏览器获取到HTML页面代码然后开始解析和渲染
- HTML页面中的JS、CSS、图片等静态资源同样需要经过一个个HTTP请求重复以上步骤获取
9.浏览器将HTML和静态资源结合渲染,将完整页面呈现
请求和响应
http的整个流程可以归纳为请求和响应两个部分
两者都会发送http头和正文信息
http头
附加的信息:内容类型、服务器发送响应日期、http状态码
正文信息
用户提交的表单数据,或者返回的数据
HTTP的请求方法
GET:获取、读取数据
POST:向指定资源提交数据
PUT:更新
DELETE:删除
HEAD:与GET相似,服务器不传回全部数据
状态码
| 1xx | 标识请求被接受 |
| 2xx | 请求被成功接受并且处理掉 |
| 3xx | 重定向 |
| 4xx | 客户端错误 |
| 5xx | 服务器端错误 |
常见状态码
| 200 | 客户端请求成功 |
| 400 | 客户端请求有语法等错误,服务器端未能理解 |
| 401 | 请求未经过授权 |
| 403 | 服务器端拒绝,由于权限等原因 |
| 404 | 未找到资源 |
| 500 | 服务器端发生不可预期错误 |
| 503 | 服务器当前不能处理,也许一段时候可以 |
04慕课网《进击Node.js基础(一)》HTTP讲解的更多相关文章
- 03慕课网《进击Node.js基础(一)》API-URL网址解析
url url.parse(url,query,host);解析域名 url必须,地址字符串 query可选 host 可选:在不清楚协议时正确解析 querystring 字符串和对象之间互相解析 ...
- 01慕课网《进击Node.js基础(一)》Node.js安装,创建例子
版本:偶数位为稳定版本,基数为非稳定版本 - 0.6.x - 0.7.x - 0.8.x -0.9.x -0.10.x -0.11.x 概念:Node.js采用谷歌浏览器的V8引擎,用C ...
- 10慕课网《进击Node.js基础(一)》初识promise
首先用最简单的方式实现一个动画效果 <!doctype> <html> <head> <title>Promise animation</titl ...
- 07慕课网《进击Node.js基础(一)》HTTP小爬虫
获取HTML页面 var http = require('http') var url='http://www.imooc.com/learn/348' http.get(url,function(r ...
- 进击Node.js基础(二)
一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...
- 02慕课网《进击Node.js基础(一)》——CommonJs标准
是一套规范管理模块 每个js 为一个模块,多个模块作为一个包 node.js和Couchdb是对其的实现: 不同于jQuery 模块:定义.标识.引用(地址/模块名称) 模块类型: 核心模块http ...
- 进击Node.js基础(一)
一.前言 1:Node.js本质上是用chrome浏览器 v8引擎 使用c++编写的JS运行环境 2:相比于JS没有浏览器安全级的限制,额外提供了一些系统级的API:文件读写,进程管理,网络通信等. ...
- 11慕课网《进击Node.js基础(一)》Buffer和Stream
Buffer 用来保存原始数据 (logo.png) 以下代码读取logo.png为buffer类型 然后将buffer转化为string,新建png 可以将字符串配置: data:image/png ...
- 09慕课网《进击Node.js基础(一)》HTTP-get/request
get是对request封装 可以在后台发起http请求,获取远程资源,更新或者同步远程资源 http.request(options[,callback]) 以下代码灌水失败: var http = ...
随机推荐
- python实现用户登录问候
创建一个至少包含 5个用户名的列表,且其中一个用户名为 'admin' .想象你要编写代码,在每位用户登录网站后都打印一条问候消息.遍历用户名列表,并向每位用户打印一条问候消息.添加一条 if 语句, ...
- vim8配置python3补全
安装Python3 卸载编译安装的python3 rm -rf /usr/local/lib/python3.7/ rm -rf /usr/local/bin/2to3* rm -rf /usr/lo ...
- [原]nginx 一下快一下慢的问题
在本机用thinkphp建了一个小网站,没任何问题,发布到云空间,就出现访问很慢的情况,而且是一下快一下慢,奇数次快,偶数次慢 换了一台win10的笔记本,情况一样,更新了phpstudy更新了thi ...
- leetcode记录-回文数
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...
- 20155215宣言 实验四 Andoid开发基础实验报告
20155215宣言 实验四 Andoid开发基础实验报告 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验 ...
- 20155216 2016-2017-2 《Java程序设计》第九周学习总结
20155216 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC架构 JDBC API的使用 JDBC连接数据库 1.导入JDBC包: 添加impo ...
- 20155230 2016-2017-2 《Java程序设计》第三周学习总结
---恢复内容开始--- 20155230 张瑞琦 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 1.使用浮点数时用equals()进行比较,否则会出错. ...
- 20155327李百乾 Exp3 免杀原理与实践
20155327李百乾 Exp3 免杀原理与实践 实践guocheng 一.Msfvenom使用编码器 1.利用(virustota)[https://www.virustotal.com/]检测实验 ...
- Week6课下作业
课本练习p2.96 p2.97 浮点数 float 单精度浮点数(32位) double 双精度浮点数(64位) 练习对应书上内容P78--P81页 知识点是IEEE浮点表示 符号(sign):s决定 ...
- linux Ubuntu Kali 安装flash
http://jingyan.baidu.com/article/fa4125accdeeec28ad709252.html