首页 > 其他分享 >8-HTTP

8-HTTP

时间:2023-05-14 17:12:29浏览次数:31  
标签:浏览器 请求 响应 格式 HTTP 数据

1. 简介

HTTP 概念

HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则

  • 数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。

  • 如果想知道具体的格式,可以打开浏览器,点击F12打开开发者工具,点击Network来查看某一次请求的请求数据和响应数据具体的格式内容,如下图所示:

    image-20230514165146147

注意:在浏览器中如果看不到上述内容,需要清除浏览器的浏览数据。chrome 浏览器可以使用 ctrl+shift+Del 进行清除。

所以学习 HTTP 主要就是学习请求和响应数据的具体格式内容

HTTP 协议特点

HTTP 协议有它自己的一些特点,分别是:

  • 基于 TCP 协议: 面向连接,安全

    TCP 是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全。

  • 基于请求-响应模型的:一次请求对应一次响应

    请求和响应是一一对应关系

  • HTTP 协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的

    无状态指的是客户端发送 HTTP 请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。这种特性有优点也有缺点,

    • 缺点:多次请求间不能共享数据
    • 优点:速度快

    请求之间无法共享数据会引发的问题,如:

    • 京东购物,加入购物车去购物车结算是两次请求,
    • HTTP 协议的无状态特性,加入购物车请求响应结束后,并未记录加入购物车是何商品
    • 发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无法正确展示数据

    具体使用的时候,我们发现京东是可以正常展示数据的,原因是 Java 早已考虑到这个问题,并提出了使用会话技术(Cookie、Session)来解决这个问题。具体如何来做,我们后面会详细讲到。刚才提到 HTTP 协议是规定了请求和响应数据的格式,那具体的格式是什么呢?

2. 请求数据格式

2.1 格式介绍

请求数据总共分为三部分内容,分别是 请求行、请求头、请求体

image-20230514165424205

  • 请求行: HTTP 请求中的第一行数据,请求行包含三块内容,分别是 GET[请求方式] /[请求 URL 路径] HTTP/1.1[HTTP 协议及版本]

    请求方式有七种,最常用的是 GET 和 POST

  • 请求头: 第二行开始,格式为 key: value 形式

    请求头中会包含若干个属性,常见的 HTTP 请求头有:

    Host: 表示请求的主机名
    
    User-Agent: 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0
    ...Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko;
    
    Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
    
    Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
    
    Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
    

    这些数据有什么用处?

    举例说明:服务端可以根据请求头中的内容来获取客户端的相关信息,有了这些信息服务端就可以处理不同的业务需求,比如:

    • 不同浏览器解析 HTML 和 CSS 标签的结果会有不一致,所以就会导致相同的代码在不同的浏览器会出现不同的效果
    • 服务端根据客户端请求头中的数据获取到客户端的浏览器类型,就可以根据不同的浏览器设置不同的代码来达到一致的效果
    • 这就是我们常说的浏览器兼容问题
  • 请求体: POST 请求的最后一部分,存储请求参数

    image-20230514165638960

    如上图红线框的内容就是请求体的内容,请求体和请求头之间是有一个空行隔开。此时浏览器发送的是 POST 请求,为什么不能使用 GET 呢?这时就需要回顾 GET 和 POST 两个请求之间的区别了:

    • GET 请求请求参数在请求行中,没有请求体,POST 请求请求参数在请求体中
    • GET 请求请求参数大小有限制,POST 没有

3. 响应数据格式

3.1 格式介绍

响应数据总共分为三部分内容,分别是响应行、响应头、响应体

image-20230514165757019

  • 响应行:响应数据的第一行,响应行包含三块内容,分别是 HTTP/1.1[HTTP 协议及版本] 200[响应状态码] ok[状态码的描述]

  • 响应头:第二行开始,格式为 key:value 形式

    响应头中会包含若干个属性,常见的 HTTP 响应头有:

    Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;
    
    Content-Length:表示该响应内容的长度(字节数);
    
    Content-Encoding:表示该响应压缩算法,例如gzip;
    
    Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒
    
  • 响应体: 最后一部分。存放响应数据

    上图中...这部分内容就是响应体,它和响应头之间有一个空行隔开。

3.2 响应状态码

关于响应状态码,我们先主要认识三个状态码,其余的等后期用到了再去掌握:

  • 200 ok 客户端请求成功
  • 404 Not Found 请求资源不存在
  • 500 Internal Server Error 服务端发生不可预期的错误

标签:浏览器,请求,响应,格式,HTTP,数据
From: https://www.cnblogs.com/NorthPoet/p/17399610.html

相关文章

  • http cache 笔记转载
    HTTP协议的Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括:no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached等。响应消息中的指令包括:publi......
  • TP5 获取HTTP头信息用法
    可以使用Request对象的header方法获取当前请求的HTTP请求头信息$info=Request::instance()->header();echo$info['accept'];echo$info['accept-encoding'];echo$info['user-agent'];也可以直接获取某个请求头信息,例如:$agent=Request::instance()->header('us......
  • [springboot] 上传文件时,报"org.apache.tomcat.util.http.fileupload.impl.FileSizeLi
    1问题描述基于springmvc/springboot的MultipartFile接口实现上传文件功能时,报如下错误日志[2023/05/1322:31:54.732][TID:N/A][INFO][http-nio-8769-exec-5][AccessPathWebFilter.java:85doFilter][3-4]request-path:http://love.pfr.kim/user-service/v1/file-re......
  • 解决docker search influxdb 报错Error response from daemon: Get "https://index.do
    解决dockersearchinfluxdb报错Errorresponsefromdaemon:Get"https://index.docker.io/v1/search?q=influxdb&n=25":dialtcp:lookupindex.docker.ioon192.168.12.2:53:readudp192.168.12.128:39189->192.168.12.2:53:i/otimeoutdockerpull&......
  • 使用go-cqhttp搭建qq机器人
    使用go-cqhttp搭建qq机器人--python处理消息1.环境部署本次使用windows测试部署下载地址:https://github.com/Mrs4s/go-cqhttp/releases下载后解压,会有三个文件,点击运行exe生成bat文件,再运行运行bat,填入0,然后生成配置文件config.yml;填入qq号和密码(不过填入......
  • HTTPS--TLS 总结归纳
    SSL/TLS握手详细过程"clienthello"消息:客户端通过发送"clienthello"消息向服务器发起握手请求,该消息包含了客户端所支持的TLS版本和密码组合以供服务器进行选择,还有一个"clientrandom"随机字符串。"serverhello"消息:服务器发送"serverhello"消息对客户端进行回应,该消......
  • 放弃 okhttp、httpClient,选择了这个牛逼的神仙工具
    https://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ%3D%3D&chksm=9beee439ac996d2f3163a57232cafd44e9142959b5452cc3428123017fc4254a7318e0c3b245&idx=1&mid=2247501131&scene=21&sn=bdafb376cfa57cf3109b099f3feed457#wechat_redirect 在SpringBoot项目直......
  • JavaWeb过滤器读取并修改POST请求的参数-YhtHttpServletRequestWrapper
    核心原理就是一个类:javax.servlet.http.HttpServletRequestWrapper一个简单的例子,当任何请求的参数里有aaa的时候,把它的值改成bbb新增一个类自定义的类CustomHttpServletRequestWrapper importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSer......
  • HTTP Error 500.31 - Failed to load ASP.NET Core runtime
    一、问题:Youmustinstallorupdate.NETtorunthisapplication.App:D:\Projects\four_pl\BaseApi3\EDIGateway\bin\Debug\net5.0\EDIGateway.dllArchitecture:x64Framework:'Microsoft.AspNetCore.App',version'5.0.0'(x64).NETlo......
  • mac M2 apple silicon kettle 在线http 接口执行任务
    carte和kettleCarte作为Kettle服务器的一种实现,可以方便地管理和执行转换和作业,并且可以在分布式环境中扩展使用Carte,可以通过RESTWeb服务接口进行调度和监视转换和作业。配置cartedata-integration/pwd/carte-config-master-8080.xml<slave_config><slaveserver......