http小记

201 阅读4分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」。

一、典型的 HTTP Client-Server协议会话阶段。

  1. 客户端建立一条 TCP 连接(如果传输层不是 TCP,也可以是其他适合的连接)。
  2. 客户端发送请求并等待应答。
  3. 服务器处理请求并送回应答,回应包括一个状态码和对应的数据。 ps:从 HTTP/1.1 开始,连接在完成第三阶段后不再关闭,客户端可以再次发起新的请求。这意味着第二步和第三步可以连续进行数次。

二、常见http headers。

1.request headers request

ps:java后台可以用http servletRequest 获取headers信息。 note:java后台可以用http servletRequest 获取headers信息。 2.response headers image.png image.png

三、http 状态码(response code)。

分类:

code描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

常见状态码描述:

code英文名称描述
100Continue继续。客户端应继续其请求
101Switching Protocol该代码是响应客户端的 Upgrade标头发送的,并且指示服务器也正在切换的协议。例如,切换到HTTP的新版本协议
200ok请求成功
201Created该请求已成功,并因此创建了一个新的资源。它通常是post或put请求后的响应
300Multiple Choice被请求的资源有一系列可供选择的回馈信息
301Moved Permanently被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。
400Bad Request1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。2、请求参数有误。
401Unauthorized当前请求需要用户验证。
403Forbidden服务器已经理解请求,但是拒绝执行它。如:请求接口不存在、跨域等可能会出现此code
404Not Found请求失败,请求所希望得到的资源未被在服务器上发现。
500Internal Server Error服务器内部错误,无法完成请求
502Bad Gateway它表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的。

四、内容安全策略( CSP )

主要威胁:跨站脚本攻击数据包嗅探攻击。 防范:配置csp

五、HTTP cookies

首先我们要了解http是无状态可会话的,而Cookie 使基于无状态的HTTP协议记录稳定的状态信息成为了可能。我们可以设置cookies的有效期来控制它的生命周期(这一有效期只与客户端相关)。

  • ps cookies安全: 通过设置Secure(确保是HTTPS )属性和HttpOnly(使jsapi无法访问) 属性可以确保cookies相对安全。 cookies作用域: 可以通过Domain 和 Path 标识定义Cookie的作用域。

六、跨域资源共享(CORS)。

CORS是为了让浏览器可以访问非同源的资源,所谓同源即:协议相同、域名(主机)相同、端口相同。 有哪些实现跨域的方案?

  • 使用JSONP。 JSONP不使用XMLHttpRequest 来请求json数据,而是通过使用
//原理:<script>标签可以跨域引入资源
var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://localhost:8080/users?username=xbc&callback='+callbackName;
    document.body.appendChild(script);
    // 回调执行函数
    function callbackName(res) {
        data = JSON.stringify(res)
        console.log(data);
    }
    ps:注意指定函数名callbackName
  • CORS。 通过对http请求的首部字段判断来实现访问控制。另外在浏览器端,发起实际请求前会发起一条OPTIONS预请求(并非所有请求都会OPTIONS),服务器通过对预请求的判断(比如Origin)来决定其实际请求是否被允许。
    note:我们可以通过预请求的Access-Control-Allow-Methods返回字段来判断可以使用的http请求方式,还可以通过Access-Control-Allow-Headers字段来得到允许携带的首部字段。

  • 代理。 同源策略是浏览器的规则,那我们绕开就可以实现跨域。 例:浏览器要请求在非同源服务器的数据,我们先在localhost上搭建一个请求外网服务器的代理服务器(可以通过node、nginx...实现)做数据转发,然后浏览器直接请求localhost代理服务器,即实现了跨域。

结尾

这是一篇针对前端的http相关知识笔记,通过认识http相关知识让我们提高工作效率。