HTTP(一)概述
总是觉得HTTP的学习不过就是几页的学习内容罢了,于是就总是没有好好的去学。
我发现我们更愿意通过实例来了解一个东西,不过这里还是添加一下概括的过程吧~
一个不想看就跳过的概括:输入一个 URL,发生了什么?
- 1.浏览器通过 DNS 解析 获得 服务 IP 发现目标!
- 2.客户端通过 TCP 协议 建立 服务器的 TCP 连接。 向城池扔吊绳!
- 3.客户端(浏览器)向 Web服务器(HTTP服务器) 发送 HTTP 协议包。 冲上城池。
- 4.服务器向客户端 发送 HTTP 协议应答包。 被敌军发现了(废话,这么大阵势( ̄□ ̄;)
- 5.客户端和服务器断开,客户端 开始解析 处理 HTML文档。 (被打回来了,不过抢来了一些战果 消化一下!)
纸上谈兵终觉浅,开战!
下面是我的一个HTTP真实的请求过程。
步骤一. 假设用chrome去请求博客园这个网站。
这个时候Chrome会搜索自身的DNS缓存 + 搜索操作系统自身的DNS缓存(前面那个 Chrome缓存挂了,就用 操作系统的)
注意: Chrome自身缓存时间仅为 1分钟(ヾ(๑╹◡╹)ノ"切,真短)。更多 相关缓存时间 参考:http://blog.csdn.net/charleslei/article/details/51083229
然后接下来这个我再次访问博客园10s之后
因为之前那个挂了, 所以这里其实是 又请求了 一次!我们的网址其实都只是一个身份证的名字,而那些IPv4地址则是身份证号。
- 如果还是没有找到,它会读取系统本地的host文件。 (Chrome、OS,你们都是吃干饭的吗,找个人都找不到)
- 如果还是没有找到,浏览器发起一个DNS的一个系统调用。 (Chrome、OS、Host,你们!)
- 宽带运营商服务器查看本身缓存。
运营商服务器发起一个迭代DNS解析的请求。 -- 具体过程其实就像政府由上到下的工作。
比如我们要查厦门市在哪里,我们从世界的角度上看,我们先找到 中国->福建->厦门。 这就是所谓的迭代DNS解析。完成上述步骤之后,运营商服务器把结果返回给操作系统内核同时缓存起来。
--> 操作系统内核把结果返回给浏览器
-->最终浏览器拿到了博客园的网址 www.cnblogs.com
是不是很有秩序呢??
总结: 浏览器缓存 -> 系统缓存 -> 路由器缓存 -> ISP DNS缓存(这里一般都会有)
步骤二. 浏览器获得域名对应的IP地址后,发起HTTP的三次握手(兔崽子,让我好找)
业内俗称:HTTP是基于TCP。TCP三次握手建立连接。四次挥手关闭连接。
- 三次握手
- 客户端发送 SYN(建立联机) 标志的报文 给 服务端。
- 服务端收到信息,回传 ACK(acknowledgement确认) 标志的报文, 表示确认。
- 最后客户端 回传 ACK 标志报文,表示握手结束。
- 四次挥手
- 客户端 -> FIN/ACK报文(结束确认) -> 服务器 (我要关闭连接了)。
- 服务器 -> ACK报文 : 我知道了,但我还没准备好 (你说分手就分手)
- 服务器确认没有数据传输了 -> FIN/ACK(结束确认) -> 客户端。 (好了,那分手吧)
- 客户端 -> ACK -> 服务器。 (挥手再见)
步骤三之前1. 网站服务的永久重定向响应
为什么不直接 发给用户 想看的内容? 其中一个原因是跟搜索引擎排名有关。如果一个页面两个地址如 baidu.com 和 www.baidu.com,搜索引擎会认为它们 是两个网站。结果造成搜索链 都减少 从而降低排名。搜索引擎 会把 带 www的 和 不带 www 的地址归到 同一个网站排名下面。
步骤三之前2. 浏览器跟踪重定向地址
浏览器知道了 要访问的正确地址。它会发送一个 获取请求。
请求头一般包括:
- Accept
- Accept-language
- Accept-Encoding
- Connection
- User-Agent
- Cookit
- Host
步骤三 .TCP/IP连接建立起来以后,浏览器就可以向服务器发送HTTP请求了,比如使用 GET ,POST方法,这些前端应该都写过吧。
步骤四. 服务器经过一系列处理将结果数据返回给浏览器,如我访问博客园这个例子,服务器就会把博客园的HTML页面代码发给我。
步骤五. 浏览器拿到博客园的代码,进行,相应的资源加载和渲染,里面的js,css,图片等静态资源都是一个个HTTP请求,都得经过上述的过程。
关于HTTP的状态吗和它的几种请求方法
方法 | 一些普世的作用 |
---|---|
GET | 获取 |
POST | 提交,常用于登录注册 |
PUT | 比如说更新头像 |
DELETE | 删除 |
HEAD | 跟GET很像,不过服务器不传回全部内容 |
TRACE | 回显服务器收到的请求,主要用于测试或者诊断 |
状态码 | 代表的意义 |
---|---|
1XX | 请求接受,正在处理 |
2XX | 成功接受、处理掉了 |
3XX | 重定向,需要附加操作才能完成请求 |
4XX | 客户端错误,请求有语法错误或者请求无法实现 |
5XX | 服务端错误,服务器未能实现合法的请求 |
常见的几个具体的状态码
状态码 | 代表的意义 |
---|---|
200 | OK,best |
400 | 客户端请求语法有误 |
403 | 服务器收到了请求但拒绝了,可能是没有权限 |
404 | 请求资源不存在,可能是你的地址写错了 |
500 | 服务端出错 |
502 | 连接超时,服务器链接太多,服务器炸了!!! |
503 | 当前服务器没法完成任务,也许过段时间就可以了 |
HTTP(一)概述的更多相关文章
- 【AR实验室】ARToolKit之概述篇
0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- .Net 大型分布式基础服务架构横向演变概述
一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- Java消息队列--JMS概述
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
- [AlwaysOn Availability Groups]健康模型 Part 1——概述
健康模型概述 在成功部署AG之后,跟踪和维护健康状况是很重要的. 1.AG健康模型概述 AG的健康模型是基于策略管理(Policy Based Management PBM)的.如果不熟悉这个特性,可 ...
- μCos-ii学习笔记1_概述
一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
随机推荐
- ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...
- bzoj 4260: REBXOR Trie+乱搞
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4260 题解: 啊啊啊. 被这种SB题坑了半天. 求出异或前缀和后 从n到1枚举\(r_1 ...
- MySQL的分页技术总结
利用子查询示例: SELECT * FROM your_table WHERE id <= (SELECT id FROM your_table ORDER BY id desc LIMIT ( ...
- Poj 2533 Longest Ordered Subsequence(LIS)
一.Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequenc ...
- 低调的css3属性font-size-adjust
在我们日常的项目中经常会用到不同的字体来达到我们想要的效果,可是某些情况下不同字体的大小在相同的px下显示的大小是不同的 <div id="div1">Text 1&l ...
- python oop培训文档里面的 正宗oop、多个函数间反复return传参、多个文件无限复制粘贴扣字、无效废物滑稽类4种方式的例子。(2)
把文档里面说的几种范式发出来. 4种编程范式实现一个人吃喝拉撒长身体的代码.语法很简单,思想模拟了所有程序员写代码时候的代码规划设计想法. 0.我不反对复制粘贴的写法,可以百度搜索复制粘贴网上现有的, ...
- python并发编程之多进程2数据共享及进程池和回调函数
一.数据共享 尽量避免共享数据的方式 可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实上Manager的功能远不止于此. 命令就是一 ...
- eclipse安装M2Eclipse插件
作者:david_zhang@sh [转载时请以超链接形式标明文章] 链接:http://www.cnblogs.com/david-zhang-index/p/7967333.html 图1: 图2 ...
- js拼的onclick调用方法需要注意的地方 之一
1.首先,明确一点,js方法中参数可以传递字符串,对象,number类型等,对象传递的是引用,方法中修改了,会影响到方法外面的对象. 2.下面重现项目中遇到的一个问题:(其实就是要明白通过引号来拼接字 ...
- Jenkins配置邮件SMTP(使用QQ邮箱)
一.QQ邮箱中开启SMTP服务 进入QQ邮箱的设置页面,选择开启POP3/SMTP服务 需要发送一条短信开启服务,成功后,会收到一个密码,一定要截图.复制密码保存好 二.Jenkins中配置SMTP ...