HTTP NOTES

HTTP

TCP

三次握手机制(建立连接协议)

  1. 客户端发送一个带SYN标志的TCP报文到服务器
    客户端发送SYN报文(SYN=1),并置发送序列号SEQ=X;
  2. 服务器端回应客户端, 发送一个同时带 ACK标志和SYN标志的报文
    服务端接收报文1,并发送SYN+ACK报文(SYN=1,ACK=X+1),并置发送序列号为Y
  3. 客户端再次回应服务端, 发送一个带ACK标志报文
    客户端接收报文2,并发送ACK报文(ACK=Y+1),并置发送序号为Z;

四次挥手机制(建立终止协议)

  1. TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
  2. 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
  3. 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
  4. 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)

报文

请求报文组成

  • 请求方法 GET/POST/DELETE/PUT
  • 请求URI ../index
  • 协议版本 HTTP/1.1
  • 可选的请求首部字段 HOST,Connection,Content-Type,Content-Length
  • 内容实体
  • eg:
    POST /form/entry HTTP/1.1
    Host: hackr.jp
    Conection:keep-alive
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 16

    (CR+LF)
    name=ueno&age=37

响应报文组成

  • 协议版本 HTTP/1.1
  • 状态码
  • 状态码的原因短语
  • 可选的响应首部字段 Date,Content-Type,Content-Length
  • 内容实体
  • eg:
    HTTP/1.1 200 OK
    Date:Tue, 10 Jul 2012 06:50:15 GMT
    Content-Type: html/text
    Content-Length: 362

    (CR+LF)
    <html>...</html>

HTTP Method

  • GET 获取资源
  • POST 传输实体主体
  • PUT 传输文件
  • DELETE 删除文件
  • HEAD 获得报文首部
  • OPTIONS 询问支持的方法
  • TRACE 追踪路径
  • CONNECT 要求用隧道协议连接代理

持久连接节省通信量

持久连接

只要有一方未发出断开连接,则保持TCP连接状态

管线化

能够并行发出多个请求和接受多个相应

HTTP是无状态协议,而Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态

服务端生成Cookie

Cookie会根据从服务端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie. 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中假如Cookie值后发送出去

客户端接受并发送Cookie

服务端发现客户端发送过来的Cookie后,回去检查是哪个客户端发来的连接请求,从而得到之前的状态

HTTP 状态码

状态码告知从服务器端返回的请求结果

1.x 信息性状态码

接受的请求正在处理…

2.x 成功状态码

  • 200 OK 表示从客户端发来的请求在服务器端被正常处理了
  • 204 No Content 表示服务器接受的请求已经被成功处理,但是相应报文不含实体的主体部分
  • 206 Partial Content 表示服务端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文中包含有Content-Range指定范围的试题内容

3.x 重定向

  • 301 Moved Permanently 永久性重定向,表示请求的资源已经被分配了新的URI,以后应该使用资源现在所指的URI
  • 302 Found 临时性重定向, 表示请求的资源已经被分诶了新的URI,希望用户本次能够使用新的URI访问
  • 303 See Other 表示存在着另一个URI应该使用GET方法定向获取请求的资源
    当301/302/303 相应状态码返回时,几乎所有的浏览器会把POST改成GET,删除请求报文内的主体,之后请求会自动再次发送
  • 304 Not Modified 表示客户端请求的资源在服务器端未改变,可直接使用客户端未过期的缓存
  • 307 Temporary Redirect 遵循浏览器标准的临时重定向,不会把POST->GET ,但是没有人用

4.x 客户端错误

  • 400 BadRequest 请求报文有语法错误
  • 401 Unauthorized 表示发送的请求需要有通过HTTP认证的认证信息或者表示用户认证失败
  • 403 Forbidden 表示对请求资源的访问被服务器拒绝了,未授权
  • 404 Not Found 表示对请求的资源不存在
  • 405 Method Not Allow 请求的方式不对

5.x 服务端错误

  • 500 服务器本身出现BUG
  • 304 服务器繁忙

HTTP 首部字段

HTTP报文的一部分,起到传递额外重要信息的作用,如报文主体大小, 使用的语言 , 认证信息等
格式:属性值 : 属性值1,属性值2

分类

  • 通用首部字段 请求和相应都会使用的首部
  • 请求首部字段 补充了请求的附加内容 客户端信息 相应内容相关优先级
  • 相应首部字段 补充了相应的附加内容
  • 实体首部字段 针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息

HTTPS 工作原理

交互步骤

  1. 客户端发送报文请求开始SSL通信,报文包含SSL版本及支持的加密算法秘钥长度等
  2. 服务端选择客户端支持的一种算法,并返回带公钥等信息的证书
  3. 客户端对证书进行验证,得到公钥Key1,第一次SSL握手结束
  4. 把共享秘钥Key3 通过公钥Key1进行加密发送至服务端,并再发送一次报文(Change Cipher Spec)提醒服务端接下来的通信会采用共享秘钥Key3进行加密,最后发送Finish报文,该报文包含连接至今的整体校验值;
  5. 服务端用私钥解密得到Key3
  6. 服务端同样发送Change Cipher Spec 和 Finish报文
  7. 客户端和服务端交换Finish报文完毕,建立起SSL连接,以后的请求就是HTTP请求;
  8. 客户端用Key3加密发送的数据Content
  9. 服务端用Key3解密得到内容Content

理论基础:

  1. 采用对称加密的方式,用Key1加密,只能用Key1进行解密,速度快
  2. 采用非对称加密的方式,用公钥Key2加密,只能用私钥Key3进行解密,速度慢
  3. 大部分浏览器会先把在CA认证过的网站的公钥预先存放在浏览器里面
  4. 私钥只有网站服务端自己拥有

认证

Basic认证

等同于发送明文用户名和密码
不安全

Digest认证

服务端先发送一个质询码
客户端根据质询码生成响应吗(感觉像是MD5加盐)
比Basic安全,但如果用户密码被盗就GG

SSL认证

要求客户端浏览器必须安装证书才可以进行通信
记得登录微信支付管理系统的时候就有这个东西

基于表单认证

这个也就是我们日常用的认证方式

Web漏洞及攻击方式

因输出值转义不完全引发的安全漏洞

感觉就是暴漏了自己系统的内部逻辑和结构导致

跨站脚本攻击
SQL注入攻击
OS命令注入攻击
HTTP首部注入攻击
目录遍历攻击

因设置或设计上的缺陷引发的安全漏洞

比如把用户的私密图片放在了资源文件夹里面

强制浏览

安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件

不正确的错误消息处理

跑出来的异常显示了出来,应该屏蔽掉一些敏感的错误消息

因会话管理疏忽引发的安全漏洞

会话劫持

以某种方式获得了用户的sessionId然后设置在攻击者自己的cookie里面

会话固定攻击

让其他用户去认证我的SessionID

跨站点请求伪造

?

其他安全漏洞
密码破解

666

点击劫持

弄一个透明的按钮,诱导你去点击

DoS攻击

海量请求,发到你没法被访问为止或者发现你有安全漏洞,瞄准安全漏洞攻击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值