发现自己对于http一些知识点并不是很深入,于是买了点http相关的书籍《图解http》《http抓包实战》,整理下关于http中的知识点,http对于前端、测试都是很重要的。
http协议:超文本传输协议,允许将超文本标记语言html从web服务器传送到客户端的浏览器。
客户端:请求文本或者图像资源的一端
服务器端:提供资源响应的一端
http协议工作原理:用户在网站输入对应的url,浏览器给服务器发送http request请求,服务器接收到请求后,返回浏览器一个http response,浏览器解析http响应中的html,于是就看到了网页版的数据。
fiddler:web调试工具,能记录http请求、https请求、监视、设置断点、修改输入输出值、解压缩、模拟弱网等情况,后面应该会仔细介绍下fiddler的用途。Fiddler是C#语言开发的。
http请求报文格式:起始行request line、首部Header、主体body
http响应报文格式:响应行response line、响应首部response header、主体body
以博客网站为例:
fiddler抓包工作原理:
fiddler相当于中间代理服务器,浏览器启动时,fiddler将internet中代理设置为127.0.0.1:8080,退出时,自动取消代理模式,若存在非正常退出情况,可能会出现网络无法连接,可以重启fiddler解决。
https协议:超文本传输安全协议,在http协议下加入了SSL(secure socket layer)安全套接层,使用端口443,用途:建立信息安全通道,保证数据传输的安全;确认网站的真实性,可以点击查看网站认证信息或ca证书查询。
使用fiddler抓包https协议(FireFox):百度无法登录
解决:选择fiddler中option-export root certificate to desktop,firefox导入下载的证书即可
http常见请求方法包括:
GET:请求页面信息,并返回实体主体
POST:向指定资源提交数据进行请求,可能会导致新资源的建立和对已有资源的修改
HEAD :类似get请求,返回的响应中没有具体内容,用于获取报头
PUT:从客户端向服务器发送指定文档内容
DELETE:请求服务器删除指定的页面
Get和Post方法的区别(常见面试题):
1、get中的url限制长度,提交数据有大小限制,post没有限制
2、get方法提交会存在安全问题
3、get方法通过Request.QueryString获取变量值,post通过Request.From获取值
4、Get请求提交数据放入url中,参数间用&连接,post是将数据存在http包的body中
状态码:存在于响应报文中,用于告诉浏览器响应结果
常见状态码:
200:ok,服务器处理成功
301/302:重定向,301表示旧地址被永久删除,url到新的地址,302表示原地址仍存在,临时跳转到新地址
304:未修改,服务器已经执行了get请求,但是文档并没有修改,一般为缓存文件
404:未找到资源,页面可自定义
400:请求参数有问题或语法有问题,服务器无法解析
401:未授权错误
403:forbidden,服务器不说明错误原因时
500:服务器错误