记录自己http的学习点

96 阅读3分钟

http请求报文

1). 请求行: method url GET /product_detail?id=2 POST /login 2). headers: 多个请求头 Host: www.baidu.com Cookie: BAIDUID=AD3B0FA706E; BIDUPSID=AD3B0FA706; Content-Type: application/x-www-form-urlencoded 或者 application/json 3). body: 请求体 username=tom&pwd=123 {"username": "tom", "pwd": 123} 关于http中的Content-Type的用法 1:Content-Type是HTTP协议中的一个重要头部手段,用于指示或响应中的媒体类型,它帮助客户端和服务器端理解如何处理传输的数据 你可以指定这几种类型: - application/json 表示请求体是 JSON 格式。

    -   `application/x-www-form-urlencoded` 表示表单数据。

    -   `multipart/form-data` 用于文件上传。

Content-Type 是确保 HTTP 请求和响应中数据被正确解析和处理的关键。根据不同的应用场景,选择合适的媒体类型非常重要。

Host: www.baidu.com 域名

HTTP响应报文

1). 响应状态码: 200/404
2). 多个响应头
    Content-Type: text/html;charset=utf-8
    Set-Cookie: BD_CK_SAM=1;path=/
3). 响应体
    html文本/json文本/js/css/图片...

常见的响应状态码

200	 OK                     请求成功。一般用于GET与POST请求
201  Created                已创建。成功请求并创建了新的资源
401  Unauthorized           未授权/请求要求用户的身份认证
404  Not Found              服务器无法根据客户端的请求找到资源
500  Internal Server Error  服务器内部错误,无法完成请求

不同的请求类型和作用

1). GET: 从服务器端读取数据
2). POST: 向服务器端添加新数据
3). PUT: 更新服务器端已经数据
4). DELETE: 删除服务器端数据

为啥会发起预请求

当后端用cors处理跨域请求的时候,客户端发起特殊请求,post和put等接口的时候,浏览器会自动发起一个预请求,这个预请求的作用是检查该请求是否允许跨域,如果预请求通过,才可以发起真正的请求。

http1.0 和 http2.0有什么区别呢?为啥要设计http2.0呢?

http1.0的设计上有几个问题,迫使不得设计出http2.0
1:对头阻塞
    在http中,同一个TCP的连接请求必须按照顺序处理(后一个请求需要等待前一个完成),导致延迟。
2:重复头部浪费带宽
    每个请求都携带大量重复的头部信息(如 User-Agent, cookie)
3:高延迟的多连接开销
    浏览器为提升并发性,会打开多个TCP连接(如Chrome对同一个域名开6个连接),但TCP建立连接成本高(三次握手,慢启动)
    
那么他们之间有什么区别呢?
                       http1.0                http2.0
连接方式                短连接                 长连接
压缩头部                无                     采用hpack算法压缩头部
传输方式                文本传输               二进制传输
请求优先级              无优先级控制           可设置请求优先级


http2.0如何解决该问题
1:多路复用(同个tcp连接并行传输多个请求和响应)
2:头部压缩
3:主动服务器推送客户端未来可能需要的资源(如页面中的js和css),减少往返延迟

https和http的区别

image.png

HTTPS 通过 TLS 加密传输数据,解决了 HTTP 明文传输的安全问题,核心是混合加密(非对称加密交换密钥 + 对称加密传输数据)和数字证书验证身份,保障了数据的机密性、完整性和服务器真实性。