计算机网络基础-HTTP协议
1.HTTP协议采用 请求/响应 的工作方式,流程如下:
1.服务器不断监听TCP端口80(等待客户端发出连接请求)
2.客户端发送连接建立 请求
3.双方建立TCP连接
4.客户端向服务器发送页面请求(形式=HTTP请求报文)
5.服务器向客户端返回页面请求的响应
6.关闭TCP连接
2.HTTP 在应用层交互数据的方式=报文,报文分为 请求报文&响应报文
2.1请求行
作用:请求行:声明 请求方法、主机域名、资源路径&协议版本
结构:请求行的组成=请求方法+请求路径+协议版本
请求方法:定义 对请求对象的操作 共8种 GET、POST、HEAD、DELETE、PUT、TRACE、CONNECT、OPTION 最常用的是GET、POST、HEAD 若服务器=RESTful接口,则一般会用到GET、POST、DELETE、PUT
请求路径:URL中对的请求地址部分。
若URL=http://www.baidu.com/,则请求路径=/
若URL=http://www.weibo.com/288/home,则请求路径=/288/home
URL:统一资源定位符,一种自愿位置的抽象唯一标识。表示资源位置&访问资源的方法。由<协议>://<主机>:<端口>/<路径>组成
协议版本:定义HTTP的版本号。常用版本:HTTP/1.0、HTTP/1.1、HTTP/2.0
GET :发送的数据存放在URL中:直接附加在URL后、利用1个问号代表URL的结尾&请求参数的开始,URL的长度最长=2048个字符,传递参数的数据类型只允许ASCII字符,安全性差
POST:传递参数长度不受限制,参数的数据类型无限制,安全性好
2.2请求头
作用:声明 客户端、服务器/报文的部分信息
使用方式:采用“header(字段名):value(值)”的方式
2.2.1 请求和响应报文的通用Header
名称 | 作用 |
---|---|
Content-Type | 请求体/响应体的类型,如text/plain、application/json |
Accept | 说明接收的类型,可以多个值,用,(半角逗号)分开 |
Content-Length | 请求体/响应体的长度,单位字节 |
Content-Encoding | 请求体/响应体的编码格式,如gzip,deflate |
Accept-Encoding | 告知对方我方接收的Content-Encoding |
ETag | 给当前资源的标识,和Last-Modified、If-None-Match、If-Modified-Since配合,用于缓存控制 |
Cache-Control | 取值为一般为no-cache或max-age=XX,XX为个整数,表示该资源缓存的有效期(秒) |
2.2.2 常见请求Header
名称 | 作用 |
---|---|
Authorization | 用于设置身份认证信息 |
User-Agent | 用户标识,如:OS和浏览器的类型和版本 |
If-Modified-Since | 值为上一次服务器返回的Last-Modified值,用于确认某个资源是否被更改过,没有被更改过(304)就从缓存中读取 |
If-None-Match | 值为上一次服务器返回ETag值,一般会和If-Modified-Since一起出现 |
Cookie | 已有的Cookie |
Referer | 表示请求引用自哪个地址,比如你从页面A跳转到页面B时,值为页面A的地址 |
Host | 请求的主机和端口号 |
2.3 请求体
作用:存放 需要发送给服务器的数据信息(Get请求无请求数据)
使用方式共3种
数据交换:请求体可任意类型,但服务器需额外解析 比如 {"name":"html","year":"5"}
键值对:键与值之间用“=”连接,每个键值对间用“&”连接 比如 key1=value1&key2=value2
分部分形式:请求体被分为多个部分 每段以--{boundary}开头=描述头 描述头后空一行接 内容 每段以--{boundary}--结束
2.4 请求报文示例
请求信息
请求行:请求方法=GET、URL 地址为:http://www.tsinghua.edu.cn/chn/yxsz/index.htm、协议版本:HTTP1.1
请求头:请求报文希望表明 主机域名&用户代理(Netscape浏览器)
请求体:存放的数据=键值对
请求报文示例
(请求行)GET/chn/yxsz/index.htm HTTP/1.1
(请求头)Host:www.tsinghua.edu.cn(表示主机域名)
User-Agent:Mozilla/5.0 (表示用户代理是使用Netscape浏览器)
(空行)(用于隔开请求头和请求体)
(请求体)key1=value1&key2&value2
3.HTTP响应报文
包括状态行:声明 协议版本,状态码,状态码描述
响应头:声明 客户端、服务器/报文的部分信息
响应体:存放 需发送的数据信息
3.1状态行
作用:声明协议版本,状态码,状态码描述
组成:状态行有协议版本、状态码、状态信息组成
协议版本:表示 服务器HTTP协议的版本 常用版本HTTP/1.0、HTTP/1.1、HTTP/2.0
状态码:表示 服务器返回的响应状态代码
状态信息:对状态码的简单解释
比如:3位十进制数字组成,分为5大类:
1xx:表示信息通知,如请求收到了或正在进行处理
2xx:表示成功,如接受或知道了
3xx:表示重定向,如果完成请求还必须采取进一步行动
4xx:表示客户端错误,请求包含语法错误/无法实现
5xx:表示服务器错误,服务器不能实现一种明显无效的请求
例子:
200:请求成功,请求内容与该响应一起返回
202:请求已被接受,但还没处理
301:请求的资源已被永久移动到新的位置
302:请求的资源被临时移动到新的位置
400:请求参数有误,当前请求无法被服务器理解
401:请求需要验证用户
403:不允许访问该地址
404:Not Found
408:请求超时
500:服务器内部错误
502:Bad Gateway网关出错
HTTP/1.1 202 Accepted(接受)、HTTP/1.1 404 Not Found(找不到)
3.2 响应头
3.2.1 请求和响应报文的通用头(和请求头一样)
3.2.2 常见响应Header
名称 | 作用 |
---|---|
Date | 服务器的日期 |
Last-Modified | 该资源最后被修改时间 |
Transfer-Encoding | 取值一般为chunked,出现在Content-Length不能确定的情况下,表示服务器不知道响应版体的数据大小,一般同时还会出现Content-Encoding响应头 |
Set-Cookie | 设置Cookie |
Location | 重定向到另一个URL 如输入浏览器就输入baidu.com 会自动跳转到 https://www.baidu.com,就是通过这个响应头控制的 |
Server | 后台服务器 |
3.3 响应体
作用:存放需返回给用户端的数据信息
使用方式:和请求体是一致的,同样分为:任意类型的数据交换格式、键值对形式和分不分形式
4.http与https的区别
http 原理:应用层 功能:不加密 性能:不安全 使用标准端口80 不需要ca申请证书
https原理:传输层 功能:加密(SSL加密,身份认证) 性能:安全 使用标准端口443 需要申请ca证书