HTTP 协议

HTTP 协议

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协 议。

我们使用 http 来访问 Web 上某个资源,比如 html/文本、word、avi 电影、 其他资源。官方协议网站:https://tools.ietf.org/html/rfc2608

HTTP 使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和 建立连接。URL 是一种特殊类型的 URI,包含了用于查找某个资源的足够的信息。

URL,全称是 UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。

URI 和 URL 的区别:

URI 是个纯粹的句法结构,用于指定标识 Web 资源的字符串的各个不同部分。
URL 是 URI 的一个特例,它包含了定位 Web 资源的足够信息。其他 URI,比如
mailto:cay@horstman.com 则不属于定位符,因为根据该标识符无法定位任何资源。

URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子 类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto 就是一个 URN 的示例。

URL 是 uniform resource locator,统一资源定位器,它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

一个完整的 URL

包括以下几部分:
http://www.baidu.com:8080/news/index.asp?boardID=5&ID=24618&page= 1#name

  1. 协议部分:该 URL 的协议部分为“http:”,这代表网页使用的是 HTTP 协议。在 Internet 中可以使用多种协议,如 HTTP,FTP 等等本例中使用的是 HTTP 协议。在"HTTP"后面的“//”为分隔符

  2. 域名部分:该 URL 的域名部分为“www.baidu.com”。一个 URL 中, 也可以使用 IP 地址作为域名使用

  3. 端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。 端口不是一个 URL 必须的部分,如果省略端口部分,将采用默认端口

  4. 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个 URL 必须的部分。本例中的虚拟目录是 “/news/”

  5. 文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个 URL 必须的部分,如果省略该部分,则使用默认的文件名

  6. 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

  7. 锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。 锚部分也不是一个 URL 必须的部分

一次完整 http 请求的过程

  1. 首先进行 DNS 域名解析(本地浏览器缓存、操作系统缓存或者 DNS 服务器)
    a)首先会搜索浏览器自身的 DNS 缓存(缓存时间比较短,大概只有 1 分钟, 且只能容纳 1000 条缓存)
    b)如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的 DNS 缓存
    c)如果还没有找到,那么尝试从 hosts 文件里面去找
    d)在前面三个过程都没获取到的情况下,就去域名服务器去查找

  2. 三次握手建立 TCP 连接
    在 HTTP 工作开始之前,客户端首先要通过网络与服务器建立连接,HTTP 连接是通过 TCP 来完成的。HTTP 是比 TCP 更高层次的应用层协议,根据规则, 只有低层协议建立之后,才能进行高层协议的连接,因此,首先要建立 TCP 连 接,一般 TCP 连接的端口号是 80;

  3. 客户端发起 HTTP 请求

  4. 服务器响应 HTTP 请求

  5. 客户端解析 html 代码,并请求 html 代码中的资源
    浏览器拿到 html 文件后,就开始解析其中的 html 代码,遇到 js/css/image 等静态资源时,就向服务器端去请求下载

  6. 客户端渲染展示内容

  7. 关闭 TCP 连接
    一般情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接, 然后如果客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive , TCP 连接在发送后将仍然保持打开状态,于是,客户端可以继续通过相同的连接发送请求,也就是说前面的 3 到 6,可以反复进行。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

DNS 劫持和 HTTP 劫持

DNS 是 Domain Name System 的简写,即域名系统,它作为可以将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。简单地说,如果我们想访问 DNS.COM 的官网,本来需要输入网站主机的 IP 地址,但是 DNS 可以将 www.dns.com 解析成对应的 IP 地址,我们就不需要记住复杂的 IP 地址 了。

DNS 劫持就是通过劫持了 DNS 服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原 IP 地址转入到修改后的指定 IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS 劫持通过篡改 DNS 服务器上 的数据返回给用户一个错误的查询结果来实现的。

DNS 劫持常见于使用自动的 DNS 地址,所以,不管有没有被劫持,尽量不要使用运营商默认的 DNS。

HTTP 劫持:
在运营商的路由器节点上,设置协议检测,一旦发现是 HTTP 请求,而且是 html 类型请求,则拦截处理。后续做法往往分为 2 种,1 种是类似 DNS 劫持返回 302 让用户浏览器跳转到另外的地址,还有 1 种是在服务器返回的 HTML 数据中插入 js 或 dom 节点(广告)。比如访问 GitHub,出现了“我是渣渣辉,是兄 弟就来砍我”之类的小弹窗。

有两种 HTTP 劫持防劫持思路

  1. 采用 https 协议加密请求。但是 https 多了 ssl 握手的过程,会耗费一定的时间和性能。

  2. 隐藏 http 请求的特征,例如使用对称加密算法加密整个 url。市面上的各大手机应用商店都采用了这种做法。相较于 https,url 加密的兼容性更好,并且对 CDN 节点带来的解密额外负担可以忽略,但是 url 加密需要 CDN 节点的密切配合。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 理解 HTTP 协议对构建网络应用是一个非常基础的要求,比如爬虫类程序,必须深入理解 Request 和 Reso...
    马六甲的笔记阅读 474评论 0 0
  • * HTTP协议简介 * HTTP版本 * HTTP报文 * Web服务器 * HTTPS * Web安全防范 *...
    F麦子阅读 301评论 0 0
  • HTTP协议作为前端开发的重要基础知识,却是很多非计算机专业出身的码农的软肋。笔者通过《图解http》一书系统的学...
    程序猿TODO阅读 610评论 0 0
  • 认识 HTTP 首先你听的最多的应该就是 HTTP 是一种 超文本传输协议(Hypertext Transfer ...
    羋学僧阅读 768评论 0 1
  • 参考文章:https://yuchengkai.cn/docs/cs/#%E7%8A%B6%E6%80%81%E6...
    tency小七阅读 1,191评论 0 4