一.应用层
1. 再谈协议
- 协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢下面来解释。
2. 序列化和反序列化
- **为什么需要:**为什么需要序列化和反序列化,就是因为不同的编译器它对内存数据管理是不一致的,因此直接交换数据会出错。
- **序列化:**序列化是将内存中的复杂数据(结构体、对象等),转换为无歧义的字符串方便传输的过程
- **反序列化:**就是序列化的相反操作
二.HTTP协议
2.1 HTTP 基础知识
预备知识
www.baidu.com/→ 域名 → 域名解析 → IP地址
183.2.172.185/→ 直接使用IP地址访问
220.181.38.150/→ 另一个IP地址示例
80:HTTP默认端口号(未显式写出时默认为80)443:HTTPS默认端口号未显式写出时默认为80)
URL结构
http:// user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1 #URL统一资源定位器,所有网络上的资源都可以用一个唯一标识获取 http:// user:pass@ www.example.jp :80 协议名 登录信息(少用因为页面本身就有信息) 域名 端口 /dir/index.htm 文件路径(第一个/是web根目录,通常对应服务器上的某个文件夹) ?uid=1 #ch1 传递参数 片段标识符网络行为
把别人的东西拿下来(下载)
把自己的东西传上去(上传)
2.2 urlencode和urldecode
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了。因此这些字符不能随意出现.
因此,某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义(urlencode)
转义的规则如下:
- 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式("+" 被转义成了 "%2B")
urldecode就是urlencode的逆过程
2.3 HTTP的响应和请求

图中要点:
Method表示我想要对资源干什么,HTTP Version表示版本号
\r\n是HTTP每行的结束标记
Key:value是信息格式
content-Length:xx表示正文内容长度
表示分隔把请求行、请求报头分成一部分;把请求正文分成另一部分
状态码表示的是服务器响应的结果由3位数字代表 ,其中404大家肯定有影响,状态码描述就是对状态码的解释
例子:
1.请求

2.响应

细节讲解:

关于方法只讲这两部分,因为其常用,其他不做讲解和展示!
那二者的区别是什么呢?
首先我们需要了解在使用某些网站的时候是这么把数据传给服务器的呢,是通过表单进行提交的!
- GET方法:我们提交的参数是通过url提交的
- POST方法也支持参数提交,采用请求的正文提交参数
注意:
GET方法通过URL进行提参,参数数量受限的,不私密,不过POST只是更私密一点,但是同样不安全,这就是二者最大区别了
2.4 HTTP的状态码

关于这部分,我们主要了解一下即可!
最常见的状态码,比如: 200(OK), 404(Not Found), 302(Redirect, 重定向), 504(Bad Gateway)
**关于客户端错误码需要和大家讲一下:**就是我客户端向你服务器发出请求,你做不到不应该是你的问题吗,这么能说我客户端的问题,主要是因为你客户端提出的要求服务器根本实现不了!
重定向概念:
根据图片你大概就能了解了,就是你浏览器向服务器发出请求,然后服务器发出3xx的状态码外加Location(这个是响应报头的内容),那么浏览器就会根据这个location去访问其他的服务器!
2.5 HTTP常见Header
**注意:**这里介绍的有请求报文独有的和响应报文独有的,还有是双方共用的
Content-Type: 数据类型(text/html等)
- 告诉对方(客户端或服务器)当前传输的数据是什么类型(MIME 类型),以便正确解析。
Content-Length: 正文的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
- 用于识别客户端类型,服务器判断请求是否来自爬虫的常用依据之一,不过其并不可靠容易被伪造!
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
用户提交账号密码给服务器,然后服务器设置Cookie给浏览器,浏览器保存Cookie文件,这样下次浏览器在访问服务器就不需要登录了!
内存级Cookie(保存至浏览器进程当中,当关闭浏览器这个Cookie会被删除)
**文件级Cookie(**保存至硬盘当中,到达过期时间Cookie才会被删除)
为了安全现代HTTP主流采用 ,敏感隐私信息不直接存储在客户端的 Cookie 中 ,而只在 Cookie 中保存一个无意义的会话标识(如 session ID) ,真正的用户数据由服务器安全存储(例如在内存、数据库或缓存中),并通过该标识关联。
**Connection:**链接类型(长连接和短连接)
网页通常由很多资源组成
每一个元素就是一个资源
一次请求响应一个资源。关闭连接,短连接;不关闭连接,长连接
HTTP/1.0 默认使用短连接,但可以通过 Connection: keep-alive 扩展实现长连接
HTTP/1.1 默认使用长连接,但可以通过 Connection: close 关闭长连接实现短链接
当客户端和服务器的 HTTP 版本不一致时,通信行为以「客户端请求中声明的版本」为准,服务器需向下兼容并据此响应。
这个只是开胃小菜,下期带来的是HTTP的知识讲解,还有为什么我们现在使用的是HTTPS而不是HTTP,他俩到底有啥区别,敬请收看下期!




