1. HTTP协议

1.1 HTTP请求格式

image.png
image.png

1.2 HTTP响应格式

image.png
image.png

1.3 HTTP状态码

image.png

  • 常见的HTTP状态码

    • 200 OK 响应成功
    • 301
    • 302
    • 400
    • 401
    • 403
    • 404
    • 500
    • 501
    • 502
    • 503

      1.4 HTTP请求方法

  • GET

  • HEAD
  • POST
  • PUT
  • DELETE
  • TRACE
  • OPTIONS
  • CONNECT

1.5 Session、Cookie、Token

  • Seesion
    • 作用:服务端存储的一个对象,用于识别客户端角色或者信息
    • 存储位置:客户端会存储sessionId,服务端会存储session完整信息

  • Cookie
    • 作用:cookie是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
    • 保存位置:客户端
    • 主要包括信息:
      • key-value:name=value,
      • 过期时间:MaxAge 当为-1时表示已过期,0时表示立即删除
      • 域名:domain,
      • 路径:path
      • 安全:secure
      • httpOnly:
    • 二级域名共享:domain设置成**.domain.com**
    • 最大长度:4096字节
  • Token
    • 作用:主要用于认证之类的
  • LocalStorage
    • 作用:存储信息在浏览器端端本地内存中。

1.6 HTTP的一些特点

1.7 跨域问题

  • 什么是跨域
    • 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域
  • 域名:
  • 端口:
  • 协议:
  • 备注:
    • 1、端口和协议的不同,只能通过后台来解决
    • 2、localhost和127.0.0.1虽然都指向本机,但也属于跨域
  • 后端允许解决方案

    • FIlter:允许整个项目跨域访问,可通过filter来进行过虑

      1. @Override
      2. public void doFilter(ServletRequest req, ServletResponse res,
      3. FilterChain chain) throws IOException, ServletException {
      4. HttpServletResponse response = (HttpServletResponse) res;
      5. response.setHeader("Access-Control-Allow-Origin", "*");
      6. response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
      7. response.setHeader("Access-Control-Max-Age", "3600");
      8. response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
      9. chain.doFilter(req, res);
      10. }
    • Response 添加头信息,允许单个方法跨域访问

      1. response.setHeader("Access-Control-Allow-Origin", "*");
      2. response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
      3. response.setHeader("Access-Control-Max-Age", "3600");
      4. response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    • CORS 配置同源 (CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)

      1. @Configuration
      2. public class CorsConfig {
      3. @Bean
      4. public CorsFilter corsFilter() {
      5. final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
      6. final CorsConfiguration corsConfiguration = new CorsConfiguration();
      7. /*是否允许请求带有验证信息*/
      8. corsConfiguration.setAllowCredentials(true);
      9. /*允许访问的客户端域名*/
      10. corsConfiguration.addAllowedOrigin("*");
      11. /*允许服务端访问的客户端请求头*/
      12. corsConfiguration.addAllowedHeader("*");
      13. /*允许访问的方法名,GET POST等*/
      14. corsConfiguration.addAllowedMethod("*");
      15. urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
      16. return new CorsFilter(urlBasedCorsConfigurationSource);
      17. }
      18. }
    • 使用网关:Nginx、Spring Cloud Gateway、Kong等

      • 相当于代理访问

        1.7 HTTP 1.0 1.1 2.0 差异

        image.png

        2. HTTPS协议

  • HTTPS = HTTP + SSL

    • SSL(Secure Sockets Layer,“安全套接层”)

image.png

3. HTTP与HTTPS的差异