HTTP学习总结整理
文章目录
一、了解HTTP
1.1HTTP原理
当我们在网页上输入一个网址(URL)时,Web页面当然不能凭空显示出来。根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源等信息,从而显示Web页面。
Web使用一种名为HTTP的协议作为规范,完成从客户端到服务端等一系列运作流程。而协议是指规则的约定。可以说,Web是建立在HTTP(超文本传输协议)协议上通信的。
1.2客户端与服务器端
类似通过发送请求服务器资源的Web浏览器或者其他应用程序等,都可以称作客户端;而接受到客户端请求后,响应客户端,返回给哭护短响应资源等称作服务器端。
1.3为何要有应用层?
通过学习完TCP/IP,我们知道数据能从客户端进程经过选择跨网络传送到服务器端进程,可是仅仅把数据从A端发到B端就完了吗?就像我们在淘宝上卖完东西后,用完还要给卖家评论打分。我们把数据从A端B端只是完成了快递的功能,而两端还要对数据进行加工处理或者使用,所以我们还需要一层协议,这层协议只关心应用细节,不关心通信细节。这就是我们的HTTP协议解决的事情。
1.4认识URL
使用http:或https:等协议方案名获取访问资源时要指定协议类型。不区分字母大小写,最后附一个冒号(????
登陆信息(认证)
指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。
服务器地址
使用绝对URI必须指定待访问的服务器地址。地址可以是类似hackr.jp这种DNS可解析的名称,或是192.168.1.1这类的IPv4地址名,还可以是[0:0:0:0:0:0:1]这样用方括号括起来的IPv6地址名。
服务器端口号
指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动使用默认端口号。
带层次的文件路径
指定服务器上的文件路径来定位特指的资源。
查询字符串
针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选。
片段标识符
使用片段标识符通常可标记出已获取资源中的子资源。但在RFC中并没有明确规定其使用方法。该项也为可选项。
二、深入学习HTTP
1.HTTP协议格式
1.1HTTP请求
- 首行:[方法] + [URL] + [版本]
- Header:请求的 属性,冒号分割的键值对,每组属性之间使用\n分隔,遇到空行表示Header部分结束
- Body:空行后面的内容都是Body,Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来表示Body的长度
1.2HTTP响应
- 首行:[版本号] + [状态码] + [状态码解释]
- Header: 请求的属性,冒号分割的键值对;每组属性之间是用\n来分隔,遇到空行这表示Header部分结束
- Body:空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来表示Body的长度;如果服务器返回一个了html页面,那么html页面内容就是在body中。
2.HTTP常见的方法
方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源相关的联系 | 1.0 |
UNLINE | 断开连接关系 | 1.0 |
其中最常用的就是GET和POST方法。
3.HTTP的状态码
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | 信息状态码 | 接受的请求正在处理 |
2XX | 成功状态码 | 请求正常处理完毕 |
3XX | 重定向状态码 | 需要进行附加操作以完成请求 |
4XX | 客户端服务错误状态码 | 服务器无法处理请求 |
5XX | 服务器错误状态码 | 服务器处理请求出错 |
例如:
200:服务器正确处理完请求,并返回响应
301/302/307:重定向,服务端响应3XX重定向状态码,location包头,之后浏览器会自行跳转到location的网址。
400:客户端错误
404:找不到资源
405:不支持的客户端请求方法
500:服务器错误
502:网关错误
4.HTTP常见的Header
- Content-Type: 数据类型(text/html等)
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息; referer: 当前页面是从哪个页面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
5.Cookie和Session
5.1Cookie
我们在访问有的网上资源的时候往往需要经过认证的账户才能访问,而且要一直保持在线状态,所以,cookie是一种在浏览器端解决的方案,将登陆认证之后的用户信息保存在本地浏览器中,后面每次发起http请求,都会自动携带该信息,就能达到认证用户,报纸用户在线的作用。
5.2 Session
将用户敏感信息放到本地浏览器中,能解决一定的问题,但是又引进了新的安全问题,一旦cookie丢失,用户信息泄露,很容易造成跨站攻击,所以有了另一种解决方法,将用户敏感信息保存至服务器,而服务器本身采用md5算法或者相关算法生成唯一值(session id),将该值保存在客户端浏览器,随后,客户端的后续请求,浏览器都会自动携带该id,进而再在服务器端认证,进而达到状态保持的效果。
5.3 Cookie和Session的区别
- Cookie以文本文件格式存储在浏览器中,而session存储在服务端
- 因为每次发起Http请求,都要携带有效Cookie信息,所以Cookie一般都有大小限制,以防止增加网络压力,一 般不超过4k
- 可以轻松访问cookie值但是我们无法轻松访问会话值,因此session方案更安全
6 HTTP和HTTPS的区别
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。