当前位置: 首页 > news >正文

Java网络编程——HTTP协议原理

协议

我们在网上冲浪时,会在浏览器地址栏输入一个网址,然后就能打开网页了。比如,输入

https://www.douban.com/

就可以访问到豆瓣的主页:

豆瓣网站

那么大家是否好奇:https 是什么意思,作用又是什么呢?

什么是协议

协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

HTTP/HTTPS 协议

目前网站主要有两种协议,HTTP 和 HTTPS,具体的原理我们可以不用深究,我们只需要知道他们的区别:

img

如果大家对两种协议感兴趣,可以查看这个文档

URL

上面讲到了豆瓣首页地址:[https://www.douban.com/](javascript:void(0)) 的开头表示使用了 HTTPS 协议。那么为什么把协议放在地址的开头呢?

我们来看一个豆瓣的内容页面:

豆瓣网站

这个页面的地址就比较复杂了。地址栏输入的地址,叫作 URL,也就是我们常说的网址,这个页面的 URL 就是:

https://www.douban.com/gallery/topic/116390/?from=hot_topic_note&sort=new

URL 是缩写,其英文全称是:Uniform Resource Locator(统一资源定位符)。URL 的格式规范规定了由哪几部分组成,以及各种符号的作用:

URL格式

格式说明:

  • 协议类型与域名之间以 ://(固定写法)分隔。

  • 路径(英文常称为 path )以单斜杠 / 开头,中间每层的分隔符也是单斜杠 /

    路径相当于一层一层的文件夹。但要注意与windows 的文件夹分隔符 \ 不要混淆了。

  • 参数:

    • 路径与参数之间用 ? 分隔。看到问号 ? 就知道后面的内容就是参数了。
    • 多个参数之间用 & 分隔。
    • 参数用“参数名=参数值”(key=value)的格式表示。

这些规则看起来有点多,但不需要刻意背,上网的时候多注意观察浏览器地址栏中的 URL 就能理解。

URL 的格式,就像逛校园:

先根据街道门牌号(域名)找到校园,跟门卫出示了学生证(协议),顺着 路/大楼/层/教室号(路径)走到了教室,告诉老师你的姓名(参数),老师就可以给你传授知识啦(打开网页)。

扩展知识点

端口号

可能会看到这样的URL:

[https://www.douban.com:443/gallery/topic/116390/?from=hot_topic_note&sort=new](javascript:void(0))

域名后的 :443 表示网站的端口号。HTTP 协议默认的端口号是 80HTTPS 协议默认的端口号是 443 。默认的端口号在 URL 中是可以省略的,其它的端口号就必须要写明了。

上网浏览时,大多数情况下看不到端口号,但是大家在开发过程中可能经常会用到不同的端口号,以 80008080 最常见,这些端口号必须写明。

路径的两种情况

1.相对路径

大家在开发过程中,可能会看到这样格式的 URL

[gallery/topic/116390/?from=hot_topic_note&sort=new](javascript:void(0))

就要非常小心了。不是以斜杠 / 开头的路径,表示相对路径,但是具体相对于什么就很复杂了,要看具体情况,所以使用这种相对路径非常容易出错。

建议大家书写 URL 时一定要写以斜杠 / 开头的绝对路径;收到别人给的不是以斜杠 / 开头的路径时,也要确认清楚。

2.默认路径

我们在上网时,仅输入了 [https://www.douban.com](javascript:void(0)) 或 [https://www.douban.com/](javascript:void(0)) 都能打开豆瓣首页,并没有输入路径啊。

实际上,没有输入路径时,表示请求网站的默认页面,那么服务器就会返回一个默认页面给浏览器。至于具体默认页面是什么页面,是由服务器决定的,通常服务器默认的页面是首页。

http://www.lryc.cn/news/417513.html

相关文章:

  • java之多线程篇
  • 【深度学习】TTS,CosyVoice,训练脚本解析
  • 《Unity3D网络游戏实战》学习与实践
  • Machine_Matrix打靶渗透【附代码】(权限提升)
  • 代码随想录算法训练营Day22 | Leetcode 77 组合 Leetcode 216 组合总和Ⅲ Leetcode17 电话号码的字母组合
  • 【微信小程序实战教程】之微信小程序中的 JavaScript
  • K-近邻算法(一)
  • 从零开始之AI视频制作篇
  • Java之TCP编程综合案例
  • 【数据分析---Pandas实战指南:精通数据查询、增删改操作与高效索引和列名操作管理】
  • Spring Cloud全解析:注册中心之Eureka服务获取和服务续约
  • 三相整流电路交流侧谐波仿真分析及计算
  • 了解Java中的反射,带你如何使用反射
  • 【c++】基础知识——快速入门c++
  • AI学习记录 - 自注意力机制的计算流程图
  • JavaScript快速入门,满满干货总结,快速掌握JS语法,DOM,BOM,事件
  • 【C++】C++入门基础【类与对象】
  • Qt | QScatterSeries 散点图
  • 无缝协作的艺术:Codigger 视频会议(Meeting)的用户体验
  • C基础练习(学生管理系统)
  • 网络安全抓包封包WEB
  • Spring Boot - 在Spring Boot中实现灵活的API版本控制(上)
  • 普中51单片机:DS18B20温度传感器操作指南(十三)
  • 【网络】网络的发展历程及其相关概念
  • 鸿蒙HarmonyOS开发:如何使用第三方库,加速应用开发
  • C++的标准模板库简单介绍
  • 安卓常用控件ListView
  • 优秀的行为验证码的应用场景与行业案例
  • 《程序猿入职必会(10) · SpringBoot3 整合 MyBatis-Plus》
  • 计算机网络408考研 2018