HTTP协议

  • HTTP概述
    • 概念:Hyper Text Transfer Protocol, 超文本传输协议, 规定了浏览器和服务器之间数据传输的规则
    • 特点: 
      • 基于TCP协议: 面向连接,安全
      • 基于请求-响应模型的: 一次请求对应一次响应
      • HTTP协议是无状态的协议: 对于事物处理没有记忆能力。 每次请求-响应都是独立的。 缺点: 多次请求间不能共享数据。 优点: 速度快、
  • HTTP-请求协议
GET /hello HTTP/1.1 (请求行: 请求数据第一行 包括了 请求方式, 资源路径, 协议)
(请求头: 第二行开始, 格式key:value)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7
Cache-Control: max-age=0
Connection: keep-alive
Host: localhost:8080
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.62

常见的请求头:
Host    请求的主机名
User-Agent    浏览器版本
Accept    表示浏览器能接受的资源类型, 如text/*, image/* 或则*/*表示所有
Accept-Language    表示浏览器偏好的语言, 服务器可以据此返回不同语言的网页
Accept-Encoding    表示浏览器可以支持的压缩类型, 例如gizp,deflate等。
Content-Type    请求主体的数据类型。
Content-Length    请求主体的大小(单位: 字节)

请求体: POST请求, 存放请求参数

请求方法-GET: 请求参数在请求行, 没有请求体, 如:/brand/findAll?name=OPPO&status=1.GET请求大小是有限制的。
请求方式-POST:请求参数在请求体中, POST请求大小是没有限制的

JavaWeb中,GET和POST是HTTP协议中常用的两种请求方法,用于客户端与服务器之间的数据交互。它们在以下几个方面有所不同:

  • 数据传输方式:

    • GET:通过URL参数将数据附加在请求的URL后面,以查询字符串的形式传输。
    • POST:将数据放在请求的消息体中进行传输,不会在URL上显示。
  • 数据传输大小:

    • GET:由于数据附加在URL上,对数据大小有限制,一般被限制在2KB - 8KB左右。
    • POST:由于数据存在消息体中,对数据大小没有明确限制,可以传输较大的数据量。
  • 安全性:

    • GET:参数暴露在URL上,易于被拦截和窥视,不适合传输敏感信息。
    • POST:参数在消息体中,相对安全一些,适合传输敏感信息。
  • 缓存:

    • GET:请求可以被浏览器缓存,下次发送相同请求时可直接使用缓存结果。
    • POST:请求不会被浏览器缓存,每次都会重新发送请求。
  • 应用场景:

    • GET:适合用于数据查询、获取资源,对于无副作用、不涉及数据修改的操作。
    • POST:适合用于数据提交、资源创建、数据修改等对服务器端产生副作用的操作。
  • HTTP-响应格式
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 10 May 2022 07:51:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive

[{id: 1, brandName:"阿里巴巴", companyName: "腾讯计算机系统有限公司"}]

响应行: 响应数据第一行(协议, 状态码, 描述)
响应头: 第二行开始, 格式key: value
响应体: 最后一部分, 存放响应数据

1XX 响应中﹣临时状态码,表示请求已经接收,告诉客户端应该继续请求或者如果它已经完成则忽略它。
2XX 成功﹣表示请求已经被成功接收,处理已完成。
3XX 重定向﹣重定向到其他地方;让客户端再发起一次请求以完成整个处理。
4XX 客户端错误﹣处理发生错误,责任在客户端。如:请求了不存在的资源、客户端未被授权、禁止访问等。
5XX 服务器错误﹣处理发生错误,责任在服务端。如:程序抛出异常等。

Content-Type        表示该响应内容的类型,例如text/html, application/json。
Content-Length      表示该响应内容的长度(字节数)。
Content-Encoding    表示该响应压缩算法,例如gzip。
Cache-Control       指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒。
Set-Cookie          告诉浏览器为当前页面所在的域设置cookie。

常见的响应状态码:
200 OK:请求成功。表示服务器成功处理了请求,并返回了所请求的资源。
201 Created:请求已成功,并且服务器创建了新的资源。
204 No Content:请求成功,但响应报文中不包含实体的主体部分。
400 Bad Request:请求错误。服务器无法理解请求的语法或参数。
401 Unauthorized:未授权。请求要求身份验证。客户端需要提供有效的身份凭证。
403 Forbidden:禁止访问。服务器拒绝执行请求,因为客户端没有访问权限。
404 Not Found:未找到资源。服务器无法找到请求的资源。
405 Method Not Allowed:不允许的方法。请求中指定的方法不被允许。
500 Internal Server Error:服务器内部错误。服务器在执行请求时遇到了错误。
502 Bad Gateway:错误的网关。作为网关或代理服务器的服务器从上游服务器接收到无效的响应。
503 Service Unavailable:服务不可用。服务器暂时过载或维护,无法处理请求。
  • HTTP-协议解析
    • TTP协议的一般解析流程:

    • 客户端发起请求:

      • 客户端通过建立TCP连接与服务器通信,默认使用的端口是80。
      • 构建HTTP请求行,包括请求方法(GET、POST等)、请求的URI(Uniform Resource Identifier)和HTTP版本号。
      • 构建HTTP请求头部(Headers),包含一些附加的信息,如请求的主机名、客户端信息、用户认证等。
      • 根据需要,可以在HTTP请求正文中包含一些数据,例如表单提交、JSON数据等。
    • 服务器处理请求:

      • 服务器接收到请求后,解析请求行和请求头部,获取所需的信息。
      • 服务器根据请求URI确定要处理的资源或执行的操作。
      • 执行相应的处理逻辑,可能包括读取数据库、处理业务逻辑等。
      • 构建HTTP响应。
    • 服务器发送响应:

      • 构建HTTP响应行,包括状态码(表示请求的处理状态)和版本号。
      • 构建HTTP响应头部,包含一些附加的信息,如内容类型、内容长度、缓存控制等。
      • 在HTTP响应正文中包含所需的数据,例如HTML页面、JSON数据等。
      • 将整个HTTP响应发送回客户端。
    • 客户端解析响应:

      • 客户端接收到HTTP响应后,解析响应行和响应头部,获取所需的信息。
      • 根据响应的状态码判断请求是否成功,并根据需要处理返回的响应头部。
      • 解析响应正文中的数据,将其用于显示、处理或其他操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值