白帽子讲web安全-第二章 http协议和web应用

http协议
  1. 简介:
    • http协议是一种CS(client-server)协议,所以只能由客户端单向发起请求,服务端在响应请求。这里的客户端也叫用户代理(user-agent),在大多数场景下是一个浏览器
  2. http请求
    • http通信由请求和响应组成
  • 请求行:包括请求方法,请求URL和协议版本号
  • 请求方法:是指定的操作类型

方法

用途

GET

向服务端获取URL指定的资源

POST

向服务端提交数据

DELETE

删除URL指定的服务器上的文件

PUT

向指定的url存储文件

OPTIONS

用于客户端向服务端询问是否支持特定的选项

TRACE

让服务器回显请求中的内容

CONNECT

用于在HTTP协议中建立代理隧道

HEAD

和GET方法类似,但是服务器不返回实际内容

  • 请求url:和请求头的host一起组成完整路径
  • 版本号:http协议的版本号
    • HTTP 1.0和HTTP 1.1是两个不同版本的HTTP协议,它们之间有以下区别:
      • 1. 持久连接:HTTP 1.0默认使用短连接,即每个请求/响应后都会关闭连接,而HTTP 1.1默认使用持久连接,在同一个连接上可以发送多个请求和响应。
      • 2. 请求管道化:HTTP 1.1支持请求管道化,即在一个持久连接上可以同时发送多个请求,而HTTP 1.0不支持请求管道化。
      • 3. 缓存处理:HTTP 1.0的缓存处理较为简单,仅支持通过"Expires"和"Cache-Control"头字段进行缓存控制,而HTTP 1.1引入了更多的缓存控制机制,如"ETag"和"If-None-Match"等。
      • 4. 错误处理:HTTP 1.0的错误处理较为简单,仅通过状态码表示错误,而HTTP 1.1引入了更多的错误处理机制 ,如通过"Transfer-Encoding"头字段传输错误信息。此外,在HTTP 1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
      • 5. Host头字段:HTTP 1.0中没有Host头字段,而HTTP 1.1中要求每个请求都包含Host头字段,以指示请求的目标主机。
​​​​​​
  • 请求头:

  • - User-Agent:标识浏览器的详细信息,包括名称、版本、操作系统等。
  • - Accept:指定客户端接受的数据类型,可以是文本、HTML、XML、JSON 等等。
  • - Accept-Encoding:指定客户端可以接受的压缩编码类型,如 gzip、deflate 等。
  • - Accept-Language:指定客户端接受的语言类型和优先级。
  • - Cache-Control:指定客户端的缓存策略,如 no-cache、max-age 等。
  • - Connection:指定客户端和服务器之间的连接类型,如 keep-alive、close 等。
  • - Cookie:用于客户端和服务器之间传递会话信息,如用户登录状态等。
  • - Host:指定要访问的服务器地址。
  • - Referer:指定请求来源网页的 URL。
  • - User-Agent:标识浏览器的详细信息,包括名称、版本、操作系统等。
  • 请求体:存放post参数
http响应
  • 每个响应格式都是相对应服务端返回
  • 响应行包括版本号和状态码
  • 状态码
状态码说明
100-199表示已收到请求,但未完成操作,用于通知客户端
200 

表示服务器响应成功,也就是服务器找到了客户端请求的内容,并且将内容返回给客户端

301

永久重定向

302

临时重定向

304

强制缓存,使用本地缓存

403

请求权限不够

404

资源不存在

500

服务器端错误

  • 响应头:
    • Allow:服务器支持哪些请求方法(如GET、POST等)。
    • Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE4、IE5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader(“Accept- Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
    • Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。
    • Content- Type:表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置 Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。
    • Date:当前的GMT时间,例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
    • Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存。
    • Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。
    • Location:这个头配合302状态码使用,用于重定向接收者到一个新URI地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
    • Refresh:告诉浏览器隔多久刷新一次,以秒计。
    • Server:服务器通过这个头告诉浏览器服务器的类型。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。Servlet一般不设置这个值,而是由Web服务器自己设置。
    • Set-Cookie:设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。
    • Transfer-Encoding:告诉浏览器数据的传送格式。
    • WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\”executives\”“)。注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问。注:设置应答头最常用的方法是HttpServletResponse的setHeader,该方法有两个参数,分别表示应答头的名字和值。和设置状态代码相似,设置应答头应该在发送任何文档内容之前进行。
    • setDateHeader方法和setIntHeadr方法专门用来设置包含日期和整数值的应答头,前者避免了把Java时间转换为GMT时间字符串的麻烦,后者则避免了把整数转换为字符串的麻烦。
    • setContentType:设置Content-Type头。大多数Servlet都要用到这个方法。
    • setContentLength:设置Content-Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。
    • addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个Set-Cookie头)。
  • 响应体:返回来的内容
http2和http3

http2实现了多路复用,使用http2需要使用tls加密

http3使用了基于UDP的QUIC协议,免去三次握手,但是增加了被DDos的风险

 WebSocket

  • 可以进行全双工通信,但是消耗资源大。构建于http/https协议之上,所以支持http代理。
  • WebSocket使用ws(web socket)和wss(使用了TLS的web socket)两种资源标识符,分别默认使用80和443端口
  • 长连接

Web服务器

  1. 资源
    • 静态资源:服务器上已经存在的文件,可以直接返回到客户端,可以缓存
    • 动态资源:服务端需要经过计算才能生成的内容,不能缓存
  2. Web页面
    1. 文档对象模型(DOM)
      • 浏览器从服务端收到的是网页的html源码,然后解析成dom树,再去渲染
    2. javascrupt
      • 前端主要语言,主要用于动态处理页面内容,其他的还包括
        1. html,通用标记语言,主要是那些标签
        2. css,样式表,主要处理样式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值