前言:

一直觉得自己在HTTP基础方面都是处于知其然,不知其所以然的样子。最近利用空闲时间拜读了一下图解HTTP,写篇博客记录一下读书笔记。

TCP三次握手:

① 发送端首先发送一个带SYN标志的数据包给对方

② 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认消息

③ 发送端再回传一个带ACK标志的数据包,代表“握手结束”

注意:若在握手的过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。

关于Cookie:

目前我们用的比较多的用户鉴权的方法有两种:cookie和Authorization。

Authorization:用户登录成功后在Response Headers或者在URL里面返回Authorization,然后前端拿到Authorization后进行处理,在每次进行HTTP请求时将该Authorization带在Request Headers上。

 
 
Cookie:用户登录成功后,Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后再发送出去。
 
很明显这两种方式对于前端来说当然是第二种Cookie的方式更爽点,因为第二种方式前端不需要做任何事情
 
HTTP首部:

HTTP首部根据实际用途分为:通用首部字段、请求首部字段、响应首部字段、实体首部字段

通用首部字段

首部字段名 说明
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
Upgrade 升级为其他协议
Via 代理服务器的相关信息
Waring 错误通知

请求首部字段

首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言(自然语言)
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
If-Match 比较实体标记(ETag)
If-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记(与 If-Match 相反)
If-Range 资源未更新时发送实体 Byte 的范围请求
If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards 最大传输逐跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的字节范围请求
Referer 对请求中 URI 的原始获取方
TE 传输编码的优先级
User-Agent HTTP 客户端程序的信息

响应首部字段

首部字段名 说明
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
ETag 资源的匹配信息
Location 令客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息


实体首部字段 

首部字段名 说明
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位: 字节)
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间
 
状态码:
 
1XX
信息性状态码
接收的请求正在处理
2XX
成功状态码
请求正常处理完毕
3XX
重定向状态码
需要进行附加操作以完成请求
4XX
客户端错误状态码
服务器无法处理请求
5XX
服务器错误状态码
服务器处理请求出错

常用的一些状态码:

200 OK:表示从客户端发来的请求在服务器端被正常处理了

204 No Content:该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。一般用于在需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下下。

206 Partial Content:该状态码表客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容

301 Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。

302 Found:临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。与301的区别是,代表资源不是被永久移动,只是临时性质的。

303 See Other:该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。303和302有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源。

304 Not Modified:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。

307 Temporary Redirect:临时重定向。该状态码和302有相同的含义,但是307不会将POST变成GET

400 Bad Request:该状态码表示请求报文中存在语法错误。

401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。

403 Forbidden:该状态码表明对请求资源的访问被服务器拒绝了。

404 Not Found:表明服务器上无法找到请求的资源。

500 Internal Server Error:表明服务器端在执行请求时发生了错误。

503 Service Unavailable:表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

总结:

第一次将本书读完后有一种这样的感觉,书中提到的很多知识点都是有所了解或者都能看懂,但是过了一段时间后发现很多地方又忘了,后面找机会再来拜读一下这本书。

图解HTTP学习笔记的更多相关文章

  1. 图解HTTP学习笔记——简单的HTTP协议

    简单的HTTP协议 前言 最近在学习Web开发的相关知识,发现<图解HTTP>这本书通俗易懂.所以花时间学习这本书,并记录下学习笔记. 如上图,我们每天都在浏览网页,一般我们都是在浏览器地 ...

  2. 图解http学习笔记【一】

    不想单纯的把书里的知识点罗列一遍 这周,我们的安全代码终于改完了.我在微信上报了个叫 一修读书的课程,现在已经听了6天.感觉并不是很神奇,聊胜于无.倒是趁着当当搞活动买回来好几本书,其中就有这本图解h ...

  3. 图解HTTP学习笔记——确认访问用户身份的认证

    前言 认证功能能让Web页面只被有权限的人访问.而认证机制究竟是怎样一个原理呢?通过今天的学习能对这个有个大致的了解. 正文 什么是认证 计算机无法判断对方的身份,需要客户端自报家门. 服务端为确认客 ...

  4. C#图解教程学习笔记——方法

    一.字段和本地变量.本地常量字段:隶属于类的变量,即类的成员变量.本地变量:于保存本地的或临时的计算数据,即局部变量.本地常量:必须声明在块内部,声明时必须初始化,声明后不能改变.实例字段与本地变量区 ...

  5. C#图解教程学习笔记——数据类型与数据存储

    一.数据类型1. 预定义类型C#提供16种预定义类型,包括13种简单类型和3种非简单类型:(1)简单类型<1>11种数值类型: 不同长度的有符号和无符号整数类型 浮点数的float和dou ...

  6. C#图解教程学习笔记——转换

    一.什么是转换转换(conversion)是指接受一个类型的值并使用它作为另一个类型的等价值的过程.转换后的值应和源值是一样的,但其类型为目标类型. 二.隐式转换和显式转换(强制转换)1. 隐式转换( ...

  7. C#图解教程学习笔记——接口

    一.接口概念接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 二.声明接口1. 接口声明不能包含:数据成员.静态成员,只能包含以下类型的非静态成员函数:方法.属性.事件.索引 ...

  8. C#图解教程学习笔记——事件

    一.事件的定义事件:当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知,同时运行相应处理程序.事件的很多部分都与委托类似.实际上,事件就像专门用于特殊用途的简单委托.事件包含了一个 ...

  9. C#图解教程学习笔记——委托

    一.委托概述委托和类一样,是用户自定义类型,也是引用类型.但类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列预定义操作. 可以通过以下操作步骤来使用委托:(1)声明一个委托类型.委托声 ...

随机推荐

  1. windows下C++连接mysql

    平台:windows c/c++ 编译器:vs2017 项目设置:项目属性页: 1.C/C++ ->常规->附加包含目录->C:\Program Files (x86)\MySQL\ ...

  2. LNMP平台搭建之一:nginx编译安装

    参考博客:https://www.cnblogs.com/zhang-shijie/p/5294162.html   jack.zhang 一.环境说明 系统环境:centos6.5 [root@lo ...

  3. JAVA String中文乱码

    System.out.println(str); String str1 = new String(str.getBytes("ISO-8859-1"), "utf-8& ...

  4. Nodejs使用robot操作鼠标键盘

    1.安装robotjs库 前提是配置了cnpm cnpm i robotjs -g   2.如果报错VCBuild.exe,如下可以安装windows-tool MSBUILD : error MSB ...

  5. EF(二)Model Fiirst

    Model First 是先利用某些工具(如VS的EF设计器)设计出可视化的实体数据模型及他们之间的关系,然后再根据这些实体.关系去生成数据库对象及相关代码文件. 一.设计实体数据模型,生成数据库 1 ...

  6. Winform 图片预览列表+分页显示

    针对图片列表展示信息,一开始没有做过相关类似的功能,大多都是以表格行显示为主,所以刚开始实现这个功能的时候是懵逼的.无从下口.在网上搜索一时半会也没找到合适的解决方案.大致就是类似于下图这样,每条数据 ...

  7. 2018-2019-2 20165335『网络对抗技术』Exp5:MSF基础应用

    主动攻击的实践: ms17_010(成功) 浏览器攻击的实践:ms14_064(成功) 客户端攻击的实践:adobe reader PDF的攻击(成功) 运用辅助模块的实践:VNC弱口令破解/绕过(失 ...

  8. Microsoft SQL Server 【Windows 身份验证】和 【sa】都无法登录的解决方案

    1.修改启动参数:打开[SQL Server 配置管理器(SQL Server Configuration Manager)]→右键[SQL Server(MSSQLSERVER)]属性→高级(Adv ...

  9. ES6 Promise用法讲解

    所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果. ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个 ...

  10. Rman常用命令

    配置基于时间的备份保留策略 RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; 恢复spfile RMAN> re ...