HTTP基础知识
1.HTTP
- 什么是HTTP协议
- 即超文本传输协议(Hyper Text Transfer Protocol),是web联网的基础,也是手机PC联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用
- HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,从建立连接到关闭连接的过程称为“一次连接“
- HTTP请求-HTTP响应
2.HTTP和HTTPS关系
- Hypertext Transfer Protocol Secure
- 主要由两部分组成:HTTP+SSL/TLS
- 比HTTP协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性,增加破解成本
- 缺点:相同网络环境下,HTTPS协议会使页面的加载时间延长近50%,增加额外的计算资源消耗,增加10%-20%的耗电等,不过利大于弊,所以HTTPS是趋势,相关资源损耗也在持续下降
- 如果做软件压测,直接压测内网ip,通过压测公网域名不管是HTTP还是HTTPS都会带来额外的损耗导致结果不准确
3.HTTP响应码HttpCode
浏览器向服务器请求时,服务端响应的消息头里面有状态码,表示请求结果的状态
- 1XX:收到请求,需要请求者继续执行操作,比较少用
- 2XX:请求成功,常用200
- 3XX:重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取。优点:网站改版、域名迁移等,多个域名指向同个主站导流
- 301:永久性跳转,比如域名过期
- 302:临时性跳转
- 4XX:客户端错误,请求包含语法错误或者无法完成请求
- 400:请求出错,比如语法协议
- 403:没权限访问
- 404:路径或者文件找不到
- 405:不允许此方法进行提交,method not allowed,比如接口一定要post方式而你用了get
- 5XX:服务端错误,服务器在处理请求的过程中发生了错误
- 500:服务器内部报错,完成不了这次请求
- 503:服务器宕机
4.HTTP请求消息结构
- 请求行
- 请求方法
- URL地址
- 协议名
- 请求头
- 报文头包括若干个属性,格式为“属性名:属性值”
- 服务端据此获取客户端的基本信息
- 常见的请求头
- Accept:浏览器支持的MIME媒体类型,比如text/html、application/json、image/webp等
- Accept-Encoding:浏览器发给服务器声明浏览器支持的编码类型,比如gzip、deflate
- Accept-Language:客户端接受的语言格式,比如zh-CN
- Connection:keep-alive,开启HTTP持久连接
- Host:服务器的域名
- Origin:告诉服务器请求从哪里发起的,仅包括协议和域名,CORS跨域请求中可以看到response有对应的header,Access-Control-Allow-Origin
- Referer:告诉服务器请求的原始资源的URI,其用于所有类型的请求,并且包括:协议+域名+查询参数;很多抢购服务会用这个做限制,必须通过某个入口进来才有效
- User-Agent:服务器通过这个请求头判断用户的软件的应用类型、操作系统、软件开发商以及版本号、浏览器内核信息等;风控系统、反作弊系统、反爬虫系统等基本会采集这类信息做参考
- Cookie:表示服务端给客户端传的http请求状态,也是多个key=value形式组合,比如登录后的令牌等
- Content-Type:http请求提交的内容类型,一般只有post提交时才需要设置,比如文件上传、表单提交等
- 请求体
- 请求的参数,可以是json对象,也可以是前端表单生成的key=value&key=value的字符串
5.HTTP响应消息结构
- 响应行
- 报文协议及版本、状态码
- 响应头
- 报文头包括若干个属性,格式为“属性名:属性值”
- 常见的响应头
- Allow:服务器支持哪些请求方法
- Content-Length:响应体的字节长度
- Content-Type:响应体的MIME类型
- Content-Encoding:设置数据使用的编码类型
- Date:设置消息发送的日期和时间
- Expires:设置响应体的过期时间,一个GMT时间,表示该缓存的有效时间
- cache-control:Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存数据还是重新发请求到服务器取数据,优先级高于Expires,控制粒度更细,如max-age=240即4分钟
- Location:表示客户应当到哪里去获取资源,一般同时设置状态代码为3XX
- Server:服务器名称
- Transfer-Encoding:chunked表示输出的内容长度不能确定,静态网页一般没有基本出现在动态网页里面
- Access-Control-Allow-Origin:指定哪些站点可以参与跨站资源共享
- 响应正文
- 响应报文体,我们需要的内容,多种形式比如html、json、图片、视频文件等
6.Content-Type媒体类型
- Content-Type:用来指定不同格式的请求响应信息,俗称MIME媒体类型
- 常见的取值
- text/html:html格式
- text/plain:纯文本格式
- text/xml:xml格式
- image/gif:gif图片格式
- image/jpeg:jpg图片格式
- image/png:png图片格式
- application/json:json数据格式
- application/pdf:pdf格式
- application/octet-stream:二进制流数据,一般是文件下载
- application/x-www-form-urlencoded:form表单默认的提交数据的格式,会编码成key=value格式
- multipart/form-data:表单中需要上传文件的文件格式类型