参考:https://www.kancloud.cn/kancloud/tealeaf-http/43837
目标:理解http协议和web应用,基于python搭建服务器
浏览器充当一个客户端与服务器交互的接口 包括CSS、HTML、Javascript、视频图片等,都是通过传输协议如http从服务器传输到客户端,从而在浏览器中显示 HTTP,即超文本传输协议,用以连接应用程序和超文本文档的传输,定义了一种规则,规定请求和响应的消息格式 互联网,网络连接设备,互联网协议(即IP协议)标志每一个设备或服务器,端口区分交互目标 域名解析系统(即DNS)处理URL和IP之间的对应关系,它是一个分布式的数据库 交互过程:输入网址 -> 网络接口 -> DNS解析 -> 服务器接收请求 -> 服务器响应 -> 浏览器呈现结果
[Scheme]://[host:port][path][?query] Scheme:URL模式,定义web客户端访问资源的方式 host:资源路径或主机,描述资源的确切位置 port:监听请求的端口号,默认端口是80 path:URL路径,定义客户端请求服务器的什么资源 query:查询字符串,格式为key=value,用&连接 URL编码:默认只接受ASCII码,%转义,/?:&保留字
浏览器插件:Chrome Postman、REST HTTP API Client HTTP GUI:PAW、HTTP Client、Fiddler、Cocoa Rest Client HTTP命令行:Curl
浏览器:在地址栏输入网址,浏览器处理响应并进行展示 HTTP工具:返回原始相应数据 审查器(Inspector):查看HTTP请求和响应 发起请求:curl -X GET "http://www.reddit.com/" -m 30 -v Method:HTTP请求方法,最常见的为GET和POST Status:请求的响应状态码 GET请求:超链接或浏览器地址栏访问,用于取得资源 POST请求:提交表单,更大或敏感数据 HTTP头部:允许C/S在请求/响应的HTTP周期内发送额外信息 请求头部: Host:服务器域名 Accept-Language:可接受的语言 User-Agent:标志客户端的字符串 Connection:连接类型
状态码:服务器接收请求后返回的标志 200 OK:请求正在被处理 302 Found:资源重定向到另一个URL 404 Not Found:资源无法找到 500 Internal Server Error:服务器出错 响应头部: Content-Encoding:数据编码类型 Server:服务器名称 Location:重定向地址 Content-Type:响应数据类型
HTTP协议是无状态的,即服务器不保留客户端信息,每次请求都是全新的 WEB应用是有状态的,客户端会维持用户登录状态等 会话session:在客户端和服务器之间建立一个有状态的连接 会话标志符:token,即一串数 在客户端保持无状态等HTTP协议,服务器响应数据分配token,客户端发送请求携带token 必须检查每个请求是否包含token,检查会话id确保未过期,基于会话id取出数据并处理响应 Cookies:一个请求/响应周期内,服务器发送,存储在客户端的一段数据,包含会话信息 首次访问,request没有cookie,response会通过set-cookie添加cookie数据 AJAX(异步Javascript和XML):允许浏览器发送请求/处理响应时不用刷新整个页面 每个操作都会触发一个AJAX请求,通过回调来处理请求的响应
安全的HTTP(HTTPS):请求和响应在发送前都会被加密(TLS协议) 加密协议首先使用证书与远程服务器通信交换安全密钥 同源策略(Same-origin policy):允许来自同一站点的资源互相访问 同源要求相同的协议、主机名和端口号 同源策略限制访问的是文件内容即资源,而非链接如URL 跨域资源共享(CORS):与许绕过同源策略,请求另一个域名的资源 添加新的HTTP头部,对一些域名的资源访问进行授权 会话劫持(Session Hijacking):攻击者获取用户的会话id 重置会话:验证旧的会话id并生成一个新的会话id 设置会话的过期时间 整站使用HTTPS协议 跨站脚本攻击(XSS):不处理用户输入,导致HTML和Javascript注入到网页中被执行 消除有问题的输入,或使用更安全的输入格式 对用户输入数据进行转义
文章来源: HTTP下午茶