HTTP基础
关键词: 链接 会话 授权 请求 响应
HTTP(HyperText[‘haɪpɚ’tɛkst] Transport Protocol)是超文本传输协议的缩写。该协议用于从WWW服务器传输超文本到本地浏览器。
URL
基础部分
协议:包括HTTP、HTTPS、FTP等,非必须元素
域名:可以使用域名或者IP地址,必须元素
端口名:使用“:”作为分隔符,非必须元素
虚拟目录:从域名后的第一个“/”开始到最后一个“/”为止,非必须元素
文件名:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分,非必须元素
参数:从“?”开始到“#”为止之间的部分为参数部分,参数可以允许有多个参数,参数与参数之间用“&”作为分隔符,非必须元素
锚点:从“#”开始到最后,非必须元素
短链接
将长的URL网址,通过程序计算等方式,转换为简短的网址字符串
Request
- 请求方法
方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改 |
区别 | 1.GET参数通过URL传递,POST通过Request body传递;2.URL传递导致传递参数有长度限制;3.GET产生一个TCP数据包,POST产生两个TCP数据包(网络情况良好中两次数据包时间花费可以忽略不计,两次数据包能提高数据完整和准确率,推荐POST)来自链接;4.安全性考量 |
+ URL
请求地址
协议版本
HTTP 包含1.0与1.1版本,1.0至1.1版本的升级包括
- 无状态的连接导致浏览器请求服务器资源时,所有同源资源(比如一个HTML文件里的所有媒体文件)都必须经过建立连接,传输,断开连接的过程;1.1版本将同文件下的资源请求打包(一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接)
- 1.1版本允许浏览器在未接受到服务端应答的情况下进行下一个请求,但是强制服务端按顺序返回
- 添加了新的请求头、响应头
请求头 来自链接
Content-Type:请求的与实体对应的MIME信息
方法 描述 application/json 传递的是JSON对象,通过序列化传递 application/x-www-form-urlencoded 表单提交,最终是&连接的数据集 multipart/form-data 参数会被分割成多块,每一个参数块都有自己独立的content-type,这种方式可以用于提交普通表单和文件上传 User-Agent:包含发出请求的用户信息
- Referer:从该URL代表的页面出发访问当前请求的页面,可以用来防止盗链
Response
协议版本
状态码与状态消息 来自链接
状态码 状态消息 描述 1** 信息,服务器收到请求,需要请求者继续执行操作 2** 成功,操作被成功接收并处理 200 OK 请求成功。一般用于GET与POST请求 3** 重定向,需要进一步的操作以完成请求 302 Found 浏览器重新请求location字段下发地址,相当于浏览器请求了2次;用于不同域名指向同一个地址 304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源 4** 客户端错误,请求包含语法错误或无法完成请求 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求 404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置”您所请求的资源无法找到”的个性页面 405 Method Not Allowed 客户端请求中的方法被禁止,出现于服务端未配置POST或GET方法时调用出现 5** 服务器错误,服务器在处理请求的过程中发生了错误 500 Internal Server Error 服务器内部错误,无法完成请求 - 响应头 来自链接
- Date:当前的GMT时间,可以用setDateHeader来设置这个头以避免转换时间格式的麻烦
- Content-Type:文档MIME类型,默认为text/plain,但通常需要显式地指定为text/html
Cookie与Session
Cookie
流程
属性
属性 描述 Domain cookie所属于哪个域或子域 Path cookie的所属路径 Expire time/Max-age cookie的有效期;未指定,则为session cookie Secure HttpOnly 浏览器脚本是否允许访问操作cookie
Session
流程
注:会话超时并非通过服务端周期检索任务关闭实现,而是根据访问信息中的时间对比来实现的
会话校验与HTTP协议幂等性 来自链接
幂等性(idempotence[ai’dempətəns,-tənsi]):N次变换与1次变换的结果相同,在web中任意多次执行所产生的结果和影响均与第一次执行一致。
基于幂等性,业务操作元需要标记唯一标识ID,所有的业务操作(增删改查)都必须使用该唯一标识符;但是在实际业务中,仅通过SessionID与唯一标识ID是无法保证安全的
会话校验即在SessionID基础上使用通行令牌,令牌又服务端生成发送给客户端,客户端在请求中带上令牌,服务端校验该令牌,保证安全性
相同点
- 两者都是用来解决HTTP无状态问题,都是保存客户端信息的机制
- 区别与用法
- Cookie将信息保存在客户端,Session将信息保存在服务端
- Cookie是保存在客户端的本地文件,在同一个服务器的任何请求中会带上Cookie
- Session是针对每一个用户的,会分配SessionID,该SessionID任何请求都会带上,保存在客户端中
- Cookie客户端可以禁用,如禁用可以通过分配在URL中保存
- 安全角度,Session建立于用户维度,高于Cookie的站点域维度,更加安全
- 服务端通过Cookie相关扩展头启用Cookie功能