1、因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都搭上了名为MIME类型的数据格式标签。WEB服务器会为所有HTTP对象数据附加一个MIME类型。当Web浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看它是否知道应该如何处理这个对象。

2、MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠分隔/

    常用的MIME类型:

    •   text/html HTML格式的文本文档
    •   text/plain 普通的ASCII文本文档
    •   image/jpeg JPEG格式的图片  
    •   image/gif GIF格式的图片

    (MIME类型有很多种,详细Google或在附录找寻)

3、URI  URL URN

  URI:服务器资源名被统称为统一资源标识符,URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源;URI有两种形式,分别成为URL和URN。

  URL: 统一资源定位符,资源标识符最常见的形式,可以明确说明如何从一个精确、固定的位置获取资源。

    大部分URL都遵循一种标准格式,包含三个部分:

    1.  方案:说明了访问资源所使用的协议类型,如:http:// https:// 等
    2.  服务器的因特网地址,如:www.google.com
    3.  其余部分:指定Web服务器上的某个资源,如:/specials/saw-blade.gif

    现在,几乎所有的URI都是URL。

  URN:统一资源名,URN是作为特定内容的唯一名称使用,和资源所在地无关;URN目前尚处于试验阶段,还没有大范围使用。

4、一个HTTP事务由一条由客户端发往服务器的请求命令和一个从服务器发回客户端的响应结果组成。这种通讯通过名为HTTP报文的格式化数据块来进行。

5、HTTP方法:HTTP支持几种不同的请求命令,每个HTTP请求报文都包含一个方法。常见的HTTP方法:GET、POST、PUT、DELETE、HEAD等。

6、状态码:每条HTTP响应报文都会携带一个状态码,用于告知客户端该如何响应此报文,常用的如:200、302、404等。

7、报文:

    HTTP报文由一行一行的简单字符串组成,HTTP报文都是纯文本,其主要包括三部分:

      • 起始行:报文的第一行为起始行,在请求报文中用来说明需要做些什么;在响应报文中说明出现了什么情况。
      • 首部字段:起始行后有零个或多个首部字段。每个首部字段为一个key-value对,格式为key:value,首部以一个空行结束。
      • 主体:首部结束空行之后,就是可选的报文主体,其中包含了所有类型的数据。请求报文中包括要发送给Web服务器的数据;响应报文中则装载了需要返回给客户端的数据。与起始行和首部字段不同的是,起始行和首部字段都是文本格式和结构化的,而主体中则可以包括任意的二进制数据(如:图片,视频等)。

8、连接:

    HTTP是一个应用层协议,HTTP无需担心网络通信的具体细节,它把联网的细节都交给了通用可靠的TCP/IP传输协议。

    TCP/IP: TCP/IP是全世界的计算机和网络设备常用的层次化分组交换网络协议集。TCP/IP隐藏了各种网络和硬件的特点和弱点,使各种类型的计算机和网络都能进行可靠的通信。TCP提供了:

      • 无差错的数据传输;
      • 按序传输(数据总是会按照发送的顺序到达)
      • 未分段的数据流(可以在任意时间以任意尺寸将数据发送出去)

    HTTP连接流程:HTTP客户端向服务器发送报文之前,需要用IP地址和端口号在客户端和服务器端建立一条TCP/IP连接。通过URL和DNS(域名服务)可以获取到IP地址和端口号,如果没有端口号,默认的端口号为80。

    连接步骤:

    1. 浏览器从URL中解析出主机名;
    2. 浏览器将服务器主机名转换成IP地址;
    3. 浏览器将端口号从URL中解析出来;
    4. 浏览器建立一条与服务器的TCP连接;
    5. 浏览器向服务器发送一条HTTP请求报文;
    6. 服务器向浏览器发送一条HTTP响应报文;
    7. 关闭连接,浏览器显示文档;  

9、Web重要结构组件:

  1)代理:代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改后转发),代表用户访问浏览器。通常会将代理作为转发所有Web流量的可信任中间节点使用,或者对请求和响应进行过滤。

  2)缓存:Web缓存或代理缓存是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来,下一请求同一个文档的客户端将得到缓存的副本;Http定义了很多功能,使得缓存更加高效,并规范了文档的新鲜度和缓存内容的隐私性。

  3)网关:网关是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议,网关接受请求时就好像自己时资源的源端服务器,客户端可能并不知道自己正在与一个网关通信。例如:一个HTTP/FTP网关会通过HTTP请求接受对FTP URI的请求,但会转换成FTP协议来获取文档,得到的文档被封装成一条HTTP报文,发送给客户端。

  4)隧道:隧道是建立之后,会在两条连接之间对原始数据进行盲转发的HTTP应用程序,通常用于在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。常见用途是通过HTTP连接承载加密的安全套接字层(即SSL)流量。

  5)Agent代理,代表用户发起HTTP请求的客户端程序,所有可以发送Web请求的应用程序都是HTTP Agent代理,如:浏览器、爬虫等。

总结:

  通过对《HTTP权威指南》第一章的浏览学习,大致了解了一下HTTP的历史、报文格式、连接细节、连接流程和部分的网络术语,算是对HTTP的入门吧。

《HTTP权威指南》读书笔记(一)的更多相关文章

  1. 《html5 从入门到精通》读书笔记(一)

    今天看了<html5 从入门到精通>这本书,感觉阅读下来很舒心,不像阅读其他书籍很揪心.html增加的知识点,我觉得非常有价值,看完几章记录了一些内容,不但能巩固,也为下次遗忘知识点做好准 ...

  2. HTML5从入门到精通(明日科技) 中文pdf扫描版

    HTML5从入门到精通(明日科技) 中文pdf扫描版

  3. HTML5从入门到精通(千锋教育)免费电子版+PDF下载

    本书是HTML5初学者极好的入门教材之一,内容通俗易懂.由浅入深.循序渐进.本书内容覆盖全面.讲解详细,其中包括标签语义化.标签使用规范.选择器类型.盒模型.标签分类.样式重置.CSS优化.Photo ...

  4. Unity Shader入门精要读书笔记(一)序章

    本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...

  5. Oracle从入门到精通----学习笔记

    书名:<Oracle从入门到精通:视频实战版>秦靖.刘存勇等编著 第4章 SQL基础 1.SQL语言分类 数据定义语言 --- DDL,Data Definition Language 数 ...

  6. MySQL数据库应用 从入门到精通 学习笔记

    以下内容是学习<MySQL数据库应用 从入门到精通>过程中总结的一些内容提要,供以后自己复现使用. 一:数据库查看所有数据库: SHOW DATABASES创建数据库: CREATE DA ...

  7. Unity Shader入门精要读书笔记(二)UnityShader概述

    第三章<UnityShader概述>的读书笔记: 1.Unity Shader模板提供了几种选择: 标准光照模型(新添加的基于物理的渲染方法) 不含光照的基本的顶点.片元着色器 屏幕后处理 ...

  8. 《html5 从入门到精通》读书笔记(二)

    接着上面继续记录笔记,这次要记的知识点比较多...记录下我认为比较重要的东西. 一.表单属性 1.autocomplete属性 该属性规定form或input域应该拥有自动完成功能. <form ...

  9. 《html5 从入门到精通》读书笔记(三)

    二.标签详解 标签 描述 4 5 <form> 定义表单. 4 5 <h1> to <h6> 定义标题1到标题6. 4 5 <head> 定义关于文档的 ...

  10. 《HTML5 CANVAS基础教程》读书笔记

    一.HTML5简介 1.HTML5新特性 1)结构元素:section,header,hgroup,footer,nav,article,aside, 2)内容元素:figure,figcaption ...

随机推荐

  1. C#或unity中实现正弦函数

    C#或unity中实现正弦函数 本类用于第一,需要绘制一条正弦曲线的朋友:第二,需要根据正弦曲线控制物体运动的朋友:里面都有注释,代码如下: unity中使用的代码: public class Cur ...

  2. python 模块 不可不知的知识点

    大纲可参考博客:http://www.cnblogs.com/yuanchenqi/articles/6766020.html 1.正则表达式中(re模块),. 代表除换行符以外的任意符号,但如果加上 ...

  3. Spark 中Java实现数据库Row转Rating

    Dataset<Row> ratings = mlsc.sql("SELECT user,movie,rating FROM data");JavaRDD<Row ...

  4. Android : 高通平台Camera调试之SetpropKey/camxoverridesettings.txt

    高通相关网址:Createpoint: https://createpoint.qti.qualcomm.com(可下载文档,Release Note等)Chipcode: https://chipc ...

  5. 使用U盘为龙芯笔记本安装操作系统

    摘要:在没有光驱的情况下,可以使用dd命令或者ultraISO软件制作Linux安装U盘,方法适合龙芯和X86.AMD64的设备. 前段时间,由于开发需要,拿到了一部龙芯3A3000的笔记本.出厂的安 ...

  6. Docker run 命令

    docker run -d -p 8084:80 --name weather --restart always --link fme-postgis 192.168.1.220:5000/weath ...

  7. MySQL【文本处理函数】的使用方法

    文本处理函数 名称 调用示例 示例结果 描述 LEFT LEFT('abc123', 3) abc 返回从左边取指定长度的子串 RIGHT RIGHT('abc123', 3) 123 返回从右边取指 ...

  8. C# 更新控件四部曲,自定义的用户控件无法更新怎么办

    用户控件如果在其他的项目被引用,希望更新控件后,所引用的项目同步更新效果,一开始难免失败,特别是更换了控件所在的文件夹. 这个时候,四部曲来解决控件的更新. 1.运行一下控件的项目,使控件生成一下. ...

  9. 【转】forbids in-class initialization of non-const static member不能在类内初始化非const static成员

    转自:forbids in-class initialization of non-const static member不能在类内初始化非const static成员 今天写程序,出现一个新错误,好 ...

  10. Mad Libs 游戏

    name1=input('请输入一个名字:') name2=input('再输入一个名字:') print('丑不拉几的{}被美丽的{}给迷得神魂颠倒'.format(name1,name2)) in ...