概述

最近对http很感兴趣,于是开始看《http权威指南》。别人都说这本书有点老了,而且内容太多。我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做,还告诉你为什么这么做。于是我把学到的知识点记录下来,供以后开发时参考,相信对其他人也有用。

URL与资源

1.在url出现之前,要想和朋友共享complete-catalog.xls文件,就得说这样一些话:用ftp连接到ftp.joes-hardware.com上。用匿名登录,然后输入你的用户名作为密码。变换到pub目录。转换为二进制模式。现在可以将名为complete-catalog.xls的文件下载到本地文件系统,并在那里浏览这个文件了。

2.URL语法:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

3.url里面可以输出用户名和密码

http://joe:joespassword@www.joes-hardware.com/sales_info.txt

4.URL里面还可以输入参数,参数是键值对的形式,用;分隔。

ftp://prep.ai.mit.edu/pub/gnu;type=d

并且URL的路径可以分成若干路径段,每段都可以有自己的参数,比如:

http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

5.URl有片段功能,片段就是锚点,它并不会被传给服务器。

6.URL的快捷方式是使用相对URL,通过基础URL来推断出scheme和host,然后组装给相对URL。需要注意的是,只会把host组装给相对URL,而不是带路径的host。

7.自动扩展URL,很多浏览器都支持自动扩展URL,有2种扩展方式:主机名扩展,比如输入baidu会自动解析为www.baidu.com;历史扩展,在输入URL的时候会和历史URL进行匹配,然后提供一些URL来供你选择。

8.为了避开安全字符集表示法带来的限制,人们通过“转义”表示法来表示不安全的字符,这种转义表示法包含一个百分号(%),后面跟着两个表示字符ASCII码的十六进制数。值得一提的是,对于某些传输协议来说,使用不安全字符并没有发生不好的事情,但是对非安全字符进行编码仍然是明智的。

9.URL会告诉你资源处于什么位置,但是缺点是如果资源被移走了,URL也就不再生效了。这个时候,用URN会更有优势。

http报文

1.报文(message)是通过一个回车符和一个换行符(CRLF)来分隔起始行,首部和主体的。稳健的应用程序应该接受单个换行符作为行的终止。

2.请求报文的格式是:

<方法> <请求URL> <http版本>
<头部>
<主体>

3.响应报文的格式是:

<http版本> <状态码> <状态语>
<头部>
<主体>

4.首部分为:通用首部(既在请求报文中又在响应报文中,比如Date),请求首部(只在请求报文中,比如Accept),响应首部(只在响应报文中,比如Server),实体首部(描述主体,比如Content-Type),扩展首部(规范中没有定义的)。

5.一条长的首部可以分为多行,只需要在第二行前面加一个空格或tab即可。

6.安全方法:指不产生动作的方法(在服务器上不产生结果),比如get或者head。值得注意的是,安全方法可能会执行动作,这是有web开发者决定的。

7.head方法和get方法很类似,但服务器在响应中只返回首部,不会返回实体。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。

8.put方法的语义是让服务器用请求的主体部分来创建一个由所请求的url命名的新文档。

9.options方法请求web服务器告知其支持的各种功能,可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。

10.扩展方法。http被设计为字段可扩展的,这样新的特性就不会使老的软件失效了。扩展方法指的就是没有在http/1.1规范中定义的方法。

11.状态码:

  • 100~199:信息性状态码
  • 200~299:成功状态码
  • 300~399:重定向状态码
  • 400~499:客户端错误状态码
  • 500~599:服务端错误状态码

12.请求首部:

  • Accept首部
  • 条件请求首部,比如If-Modified-Since
  • 安全请求首部,比如cookie
  • 代理请求首部,比如Proxy-Authorization

13.响应首部:

  • 协商首部,比如Accept-Ranges
  • 安全响应首部,比如Set-Cookie

14.实体首部:

  • 内容首部,比如Content-Length
  • 实体缓存首部,比如Last-Modified

《http权威指南》读书笔记2的更多相关文章

  1. <数据挖掘导论>读书笔记11异常检测

    异常检测的目标是发现与大部分其他对象不同的对象.通常,异常对象被称作离群点(Outlier). 异常检测也称偏差检测(Deviation detection),因为异常对象的属性值明显偏离期望的或者常 ...

  2. <数据挖掘导论>读书笔记10聚类分析续

    基于原型的聚类 模糊c均值使用模糊逻辑和模糊集合论的概念,提出一种聚类方案,它很像K均值,但是不需要硬性地将对象分派到一个簇中.模糊c均值算法有时也称为FCM 混合模型聚类采取这样的访谈,簇集合可以用 ...

  3. <数据挖掘导论>读书笔记9聚类分析

    1. 聚类分析仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组. 其目标是组内的对象相互之间是相似的或者相关的,而不同组中的对象是不同的或者不相关的. 2.聚类分析的重要技术 K均值:K均值 ...

  4. <数据挖掘导论>读书笔记8FP树

    1FP树

  5. <数据挖掘导论>读书笔记7 Apriori算法

    Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法.其核心是基于两阶段频集思想的递推算法.该关联规则在分类上属于单维.单层.布尔关联规则.在这里,所有支持度大于最小支持度的项集称为频繁项 ...

  6. <数据挖掘导论>读书笔记4--其他分类技术

    1.基于规则的分类器 2.最近邻分类器 3.贝叶斯分类器 4.人工神经网络 5.支持向量机 6.组合方法 7.不平衡类问题 8.多类问题

  7. <数据挖掘导论>读书笔记6关联分析的高级概念

    处理联系属性: 基于离散化的方法 基于统计学的方法 非离散化方法 处理概念分层 定义在一个特定领域的各种实体或者概念的多层组织.概念分层可以用有向无环图DAG来标示. 序列模式 可选计数方案 COBJ ...

  8. <数据挖掘导论>读书笔记5关联分析的基本概念和算法

    关联规则的强度可以用support度和confidence(置信)度来度量 关联规则发现  给定事务的集合T,关联规则发现是指找出支持度大于等于minsup并且置信度大于等于minconf的所有规则, ...

  9. <数据挖掘导论>读书笔记3--分类

    1.分类的基本概念 分类任务就是通过学习得到一个目标函数f,把每个属性集x映射到一个预先定义的类标号y 目标函数也称为分类模型. 2. 解决分类问题的一般方法: 决策树分类法 基于规则的分类法 神经网 ...

  10. <数据挖掘导论>读书笔记2

    1.频率和众数 frequency(vi)=具有属性值vi的对象数/m 分类属性的众数mode是具有最高频率的值. 2.百分位数 3.位置度量:均值和中位数 4.散布度量:极差和方差 绝对平均偏差 A ...

随机推荐

  1. 转: rem与px的转换

    rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个参考值,这个参考值设置为多少,完全可以根据您自己的需求来定.· 我们知道,浏览器默认的字号16px,来看一些px单 ...

  2. Android Studio2.0 教程从入门到精通Windows版 - 入门篇

    http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...

  3. 应用脚手架创建一个React项目

    安装脚手架,这里会自动安装到你的nodejs里面 npm install create-react-app -g 进入创建目录 我这里创建一个为 react03的项目,等待下载..... create ...

  4. 无法在正在进行内容生成时调用 StartAt

    刚遇到一个奇怪的问题,用户点击创建销售订单的时候,弹出个 无法在正在进行内容生成时调用 StartAt,查看详细报错. ystem.InvalidOperationException: 无法在正在进行 ...

  5. ubuntu 从零安装tf-serving环境和opencv

    参考官网:https://www.tensorflow.org/serving/setup 首先是安装gprc: pip install grpcio 然后发现没有安装pip,报错:sudo: pip ...

  6. 云笔记项目-网页端debug功能学习

    在做云笔记项目的过程中,除了服务端在eclipse中debug调试代码外,有时候需要在浏览器端也需要进行debug调试,刘老师举了一个冒泡排序算法的dubug例子,进行了讲解. 首先上浏览器端测试代码 ...

  7. 为什么要使用mybaits

    通常在项目开发过程中,有很多代码是重复的,固定不变的.为了提升开发效率,可将这些 固定不变的代码提取出来,生成class文件,将class文件打jar包,基于框架开发. mybaits是一个ORM框架 ...

  8. C++类有继承时,析构函数必须为虚函数

    C++类有继承时,析构函数必须为虚函数.如果不是虚函数,则使用时可能存在内在泄漏的问题. 假设我们有这样一种继承关系: 如果我们以这种方式创建对象: SubClass* pObj = new SubC ...

  9. E. Segment Sum(数位dp)

    题意:求一个区间内满足所有数位不同数字个数小于K的数字总和.比如:k=2   1,2,3所有数位的不同数字的个数为1满足,但是123数位上有三个不同的数字,即123不满足. 我们可以使用一个二进制的数 ...

  10. spring整合kafka(配置文件方式 生产者)

    Kafka官方文档有   https://docs.spring.io/spring-kafka/reference/htmlsingle/ 这里是配置文件实现的方式 先引入依赖 <depend ...