【JavaEE】网络原理-HTTP

这篇具有很好参考价值的文章主要介绍了【JavaEE】网络原理-HTTP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网络原理-HTTP

1. HTTP是什么

HTTP是一种基于传输层TCP并位于应用层的超文本协议

目前主要使用HTTP1.1和HTTP2.0


2. HTTP协议基本格式

2.1 使用Fiddler抓包进行分析

关于Fiddler:

  1. 是一个代理工具,就像高速路上的收费站,不管什么车,只要它从高速路上经过,那么就需要经过收费站
  2. 对应到网站上,就是不管什么网站,只要有数据的上传下载,那么就会经过Fiddler,此时Fiddler就能够知道所有网站的信息

使用方法:

  1. 删除无关抓包信息(ctrl+A,delete)
    not(a:brand

  2. 打开想要抓包的网站 > 蓝色对应的即是request

  3. 查看request

    在Fiddler的右半边,查看请求和响应

not(a:brand


结果:

not(a:brand

2.2 分析结果

请求:
GET https://www.baidu.com/ HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5
Cookie: BIDUPSID=E1CBCCEF16E949D2FB803515D5054D7C; PSTM=1697071850; BD_UPN=12314753; sug=0; sugstore=0; BAIDUID=E1CBCCEF16E949D20FBD5E22D2DA6844:SL=0:NR=10:FG=1; ORIGIN=2; bdime=0; H_WISE_SIDS=40009_40204_39661_40207_40215_40266_40295_40290_40287_40285; H_WISE_SIDS_BFESS=40009_40204_39661_40207_40215_40266_40295_40290_40287_40285; newlogin=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BA_HECTOR=852l8g05858g0g8h850g0580jpjv5b1iv0e401s; ZFY=3PherofMOQjTtCmZZKg9U85hiYToS99infKIvCcpg:Bc:C; BAIDUID_BFESS=E1CBCCEF16E949D20FBD5E22D2DA6844:SL=0:NR=10:FG=1; H_PS_PSSID=40009_39661_40207_40215_40295_40290_40287_40285_40318_40079_40365_40352_40369_40374_40401_40415


  1. 首行:“方法 url HTTP版本”

  2. Header:以键值对的形式进行标识,每组属性之间使用\n进行分隔

  3. Body:与Header部分有一个空行,其主体用来传递数据

    1. Body可以为空
    2. 不为空时,在Header部分会有Content-type属性标识Body的长度
响应:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;
Content-Type: text/html; charset=utf-8
Date: Tue, 12 Mar 2024 14:57:29 GMT
Server: BWS/1.1
Set-Cookie: H_PS_PSSID=40009_39661_40207_40215_40295_40290_40287_40285_40318_40079_40365_40352_40369_40374_40401_40415; path=/; expires=Wed, 12-Mar-25 14:57:29 GMT; domain=.baidu.com
Traceid: 1710255449131260929015864326830156617079
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Content-Length: 406157

<!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#ffffff"><meta name="description" content="全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。"><link rel="shortcut icon" 
......
  1. 首行:“版本号 状态码 状态码解释”

  2. Header:以键值对的形式进行标识,每组属性之间使用\n进行分隔

  3. Body:与Header部分有一个空行,其主体用来传递数据

    1. Body可以为空
    2. 不为空时,在Header部分会有Content-type属性标识Body的长度
为什么都会有一个“空行”存在?

因为空行表示当前Header部分结束。

如果没有这个标识,会因为底层使用TCP而发生**“粘包”问题**


3. HTTP请求(Request)

3.1 方法
方法 说明 支持的版本
get 获取资源(可以请求缓存,无长度限制) 1.0,1.1
post 提交表单数据,创建更新资源(不可请求缓存,无长度限制) 1.0,1.1
put 传输文件 1.0,1.1
head 获取报文首部 1.0,1.1
delete 删除文件 1.0,1.1
options 查询指定资源针对URL请求支持的方法 1.1
trace 跟踪路径 1.1
connect 连接改为管道方式 1.1
link 请求和服务器建立连接 1.0
unline 断开连接 1.0
3.2 GET方法

使用Fiddler进行抓包观察:

not(a:brand

特点
  1. 首行的第一部分显示为:“GET”

  2. URL的query string可以为空,也可以不为空

    一个网址中==在问号后面的==就是query string内容not(a:brand

  3. Header部分为键值对结构

  4. body部分为空(所以Header部分没有Content-Length)

3.3 POST方法

使用Fiddler进行抓包观察:

not(a:brand

特点
  1. 首行第一部分为POST

  2. body部分不为空

    长度由Header部分的Content-Length决定

    数据格式由Header部分的Content-Type决定

  3. URL的query string⼀般为空(也可以不为空)

    同GET方法的query string

3.4 GET与POST的区别?
  1. GET请求一般是幂等的

    POST请求一般不是幂等的

    幂等就是多次请求得到的结果仍然相同

  2. GET请求一般用于获取资源

    POST请求一般用于提交数据

  3. GET请求可以被缓存

    POST请求不被缓存

    因为POST每次获取的数据都是不一样的, 所以不便于缓存

    但是GET请求每次都是重复内容, 缓存后能够加快访问速度

  4. GET请求的body一般为空, 使用query string 进行数据传递

    POST请求的query string 一般为空, 使用body进行数据传递

以上区别都不是硬性的, 都只是标准中的建议, 实际使用过程中完全可以不遵守这个约定.

  • 可以将GET用于发送数据, POST用于获取数据
  • GET也可是不幂等的
    • 因为,有些网站中, 可以根据用户的历史记录进行实时个性化推荐
    • 这同样使用了GET, 但是这个返回的数据每次都是不同的

4. 请求"报头"(Header)

  1. Host: 表示服务器主机的地址和端口

  2. Content-Length: body长度

  3. Content-Type: body数据格式

  4. User-Agent (UA): 标识访问服务器的操作系统, 浏览器的属性信息

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0

    • (Windows NT 10.0; Win64; x64) : 是操作系统信息
    • Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0: 是浏览器信息
  5. Referer: 表示当前页面由哪个页面跳转过来

    Referer: https://www.baidu.com/

  6. Cookie : 用户登录网站的"令牌"

    • 就像以前出入皇宫, 都需要进行严格的查验, 但是只要你拥有皇上钦赐的==“黄马褂”==, 那么就可以畅通无阻
    • 网站中的cookie, 就是发挥着记录你登陆网站的信息, 比如用户名和密码等, 下次再进行登录的时候就可以不用输入用户名和密码
    • cookie会保存在用户的本地, 有些cookie是永久性的(除非手动删除), 有些cookie是有有效期的

    not(a:brand


5. 状态码(Status Code)

5.1 2xx 成功

  • 200 OK:请求成功。
  • 201 Created:请求成功并且服务器创建了新的资源。
  • 202 Accepted:服务器已接受请求,但尚未处理。
  • 204 No Content:服务器成功处理了请求,但没有返回任何内容。

5.2 3xx 重定向

  • 301 Moved Permanently:请求的资源已永久移动到新位置。

    • 就像以前经常换号的那个年代, 一个已经被很多朋友知道的手机号, 不想一一通知他们换了新号, 那就办理一个==“呼叫转移”==服务,

    • 别人还是可以照常打到以前的那个号码, 但是会直接拨通到现在这个新号

  • 302 Found(旧称 Moved Temporarily):请求的资源现在临时从不同的URI响应请求。

  • 304 Not Modified:自从上次请求后,请求的资源未修改过。

5.3 4xx 客户端错误

  • 400 Bad Request:服务器不理解请求的语法。
  • 401 Unauthorized:请求要求身份验证。
  • 403 Forbidden:服务器拒绝请求。
  • 404 Not Found:服务器找不到请求的资源。
  • 429 Too Many Requests:用户在给定的时间内发送了太多的请求。

5xx 服务器错误

  • 500 Internal Server Error:服务器遇到错误,无法完成请求。
  • 501 Not Implemented:服务器不具备完成请求的功能。
  • 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效响应。
  • 503 Service Unavailable:服务器暂时不可用(超载或停机维护)。
  • 504 Gateway Timeout:服务器作为网关或代理,但是没有及时从上游服务器收到请求。

6. 响应正文(body)

​ 最重要的属性是Content-Type文章来源地址https://www.toymoban.com/news/detail-842157.html

  1. text/html :body数据格式是HTML
  2. text/css :body数据格式是CSS
  3. application/javascript :body数据格式是JavaScript
  4. application/json :body数据格式是JSON

到了这里,关于【JavaEE】网络原理-HTTP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaEE】_网络通信原理

    目录 1. 网络发展史 2. 网络通信基础 1.1 IP地址 1.2 端口号 1.3 协议 1.3.1 概念 1.3.2 五元组 1.4  协议分层 1.4.1 协议分层的优点 1.4.2 协议分层的分类 1.4.3网络设备所在分层 1.4.4 两台主机通过TCP/IP协议通讯过程 1.5 封装与分用 1.5.1 封装 1.5.2 分用 (1)单机:计算机之间相互独立;

    2024年01月19日
    浏览(34)
  • 【JAVAEE】网络原理之网络通信基础

    目录 1. 💋IP地址 1.1 🍟IP地址的格式 1.2 🎁特殊IP地址 2. ✨端口号 2.1  🎃端口号的格式 3. 😘网络协议 3.1 🎨为什么需要网络协议? 3.2 💛网络协议的概念与组成 3.3 🍉知名协议的默认端口 3.4 🐷五元组 4. 🍳网络协议分层 4.1 🍭协议分层的好处 4.2 🎩网络协议的分层模型一

    2023年04月24日
    浏览(42)
  • 【javaEE】计算机网络原理初始

    目录 1、网络发展史 1.1、独立模式 1.2、网络互连 1.2.1、局域网(LAN) 1.2.2、广域网(WAN) 1.2.3、广域网和局域网的区别 1.2.4、局域网组建网络的方式 (了解) 2、网络通信基础 2.1、IP地址 2.2、端口号  2.3、认识协议 2.4、协议分层 2.5、OSI七层网络模型 2.6、TCP/IP五层模型 2

    2024年02月07日
    浏览(48)
  • 网络原理(JavaEE初阶系列11)

    目录 前言: 1.网络原理的理解 2.应用层 2.1自定义协议的约定 2.1.1确定要传输的信息 2.1.2确定数据的格式 3.传输层 3.1UDP 3.1.1UDP报文格式 3.2TCP 3.2.1确认应答 3.2.2超时重传 3.2.3连接管理 3.2.3.1三次握手 3.2.3.2四次挥手 3.2.4滑动窗口 3.2.5流量控制 3.2.6拥塞控制 3.2.7延时应答 3.2.8捎带

    2024年02月13日
    浏览(47)
  • 【JavaEE】网络原理:网络中的一些基本概念

    目录 1. 网络通信基础 1.1 IP地址 1.2 端口号 1.3 认识协议 1.4 五元组 1.5 协议分层 什么是协议分层 分层的作用 OSI七层模型 TCP/IP五层(或四层)模型 网络设备所在分层 网络分层对应 封装和分用 概念: IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简

    2024年01月24日
    浏览(40)
  • JavaEE-轻松了解网络原理之TCP协议

    TCP,即Transmission Control Protocol,传输控制协议. 16位源端口号与16位目的端口号表示数据 从那个进程来要到那个进程去 . 32位序号表示 一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号 (TCP将每个字节的数据都进行了编号,称为序列号). 32为

    2024年02月01日
    浏览(53)
  • 【JavaEE】网络原理——传输层协议:UDP和TCP

    目录 1、简单了解应用层协议 2、传输层UDP协议 3、传输层TCP协议  3.1、TCP报文介绍 3.2、TCP实现可靠传输的核心机制 3.2.1、确认应答 3.2.2、超时重传  3.3、连接管理 (三次挥手,四次握手) 3.3.1、建立连接(三次握手) 3.3.2、断开连接(四次挥手)  3.4、滑动窗口  3.5、流量

    2024年02月10日
    浏览(82)
  • 【JavaEE初阶】网络原理|认识协议|协议分层|TCP/IP模型|封装和分用

    目录 一、认识协议 1.概念 2.作用(为什么需要协议?) 二、协议分层 1.为什么需要⽹络协议的分层? 2. 协议分层是什么 3.分层带来的好处 三、TCP/IP五层(或四层)模型 (1)物理层 (2)数据链路层 (3)网络层 (4)传输层 (5)应用层 四、封装和分用(协议的层和层之间

    2024年04月23日
    浏览(42)
  • JAVAEE初阶相关内容第十七弹--网络原理之TCP_IP

    目录 1. TCP-IP五层模型 2. UDP协议 2.1 特点 2.2 UDP协议端格式 2.3 校验和 3. TCP协议 3.1 特点 3.2 TCP协议段格式 3.2.1 首部长度 3.2.2 选项 3.2.3 保留6位 3.3 TCP内部的工作机制 3.3.1 确认应答 (1)应答报文ack (2)小结 3.3.2 超时重传 3.3.3 连接管理 3.3.4 滑动窗口 窗口大小 3.3.5流量控制 3

    2024年01月18日
    浏览(45)
  • JAVAEE初阶相关内容第十九弹--网络原理之TCP_IP【续集2】

    上一篇博客主要介绍的是关于网络层协议-IP协议的重点介绍。需要掌握关于IP协议的协议头格式,关于IPV4分配不够的解决办法。地址管理与路由选择。 点击跳转上一篇博客 本篇博客将继续学习关于计网中协议的内容。 本篇博客主要介绍关于数据链路层的重点协议-以太网。

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包