总是觉得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,你们!)
    1. 宽带运营商服务器查看本身缓存。
    2. 运营商服务器发起一个迭代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(一)概述的更多相关文章

  1. 【AR实验室】ARToolKit之概述篇

    0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  4. .Net 大型分布式基础服务架构横向演变概述

    一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...

  5. [C#] 进阶 - LINQ 标准查询操作概述

    LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

  6. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  7. Java消息队列--JMS概述

    1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  8. [AlwaysOn Availability Groups]健康模型 Part 1——概述

    健康模型概述 在成功部署AG之后,跟踪和维护健康状况是很重要的. 1.AG健康模型概述 AG的健康模型是基于策略管理(Policy Based Management PBM)的.如果不熟悉这个特性,可 ...

  9. μCos-ii学习笔记1_概述

    一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...

  10. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

随机推荐

  1. I.MX6 FFmpeg 录制视频

    /************************************************************************* * I.MX6 FFmpeg 录制视频 * 说明: ...

  2. Homer Conferencing

    Homer Conferencing (short: Homer) is a free SIP softphone with advanced audio and video support. The ...

  3. bzoj 3514: GERALD07加强版 lct+可持久化线段树

    题目大意: N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. 题解: 这道题考试的时候没想出来 于是便爆炸了 结果今天下午拿出昨天准备的题表准备做题的时候 题表里就有这题 ...

  4. 霍夫变换Hough

    http://blog.csdn.net/sudohello/article/details/51335237 霍夫变换Hough 霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法.它通 ...

  5. cmd命令,输出为txt文本

    在命令行后面,加上'-t > d:output.txt'. 具体可参考如下图: //=====补充===== 所以,在调试nodejs的时候,如果用命令行调试,则可把输出信息都重定向到一个文件中 ...

  6. PythonPath在Windows 下的设置

    今天在调试Evernote SDK时, 遇到PythonPath的问题. 查了很多资料,有说用系统环境变量添加PythonPath, 有说在注册表中的PythonPath添加新Default字段, 但 ...

  7. centos7 查看启动ntp服务命令

    标签(空格分隔): centos7 系统 1. 查看ntp服务命令: [root@node1 ~]# systemctl status ntpd * ntpd.service - Network Ti ...

  8. 使用root直接安装python3.5.2

    操作系统:Centos7.4 不使用pyenv管理器直接进行编译安装3.5.2版本. 下载tgz的包,如果没有安装wget,请yum -y install wget 解压python包: 将解压后的包 ...

  9. (转)Maven 项目新建index.jsp报错问题

    原文:http://blog.csdn.net/dream_ll/article/details/52198656 最近用eclipse新建了一个maven项目,结果刚新建完成index.jsp页面就 ...

  10. 大数据学习路线copy自淘宝

    一.hadoop视频学习(入门到精通) 二.数据挖掘(入门到精通) 三.Hadoop学习路线 1.开发前期准备 首先,如果你没有Java和Linux基础,建议你先简单学一下这两门课程,此宝贝里面都为你 ...