HTTP协议学习之Request学习

在开始前,我们首先对HTTP协议做个简单的了解

HTTP协议(Hyper Text Transfer Protocol) 超文本传输协议

名词非常的高大上,如果学过计算机网络这门课(再如果还有一点印象…)会知道这是应用层的协议,应用层对应在OSI/ISO七层模型的最顶层,
是直接对接应用程序提供服务的,HTTP协议是TCP/IP的高级协议,默认端口是80,每个请求会对应一个响应
举个简单的例子那就是,我们在网上冲浪的时候就使用到了HTTP协议,那么HTTP到底定义了什么?

  • 概念:
    HTTP协议定义了浏览器与服务器之间通信时,发送数据的格式。这是一种约定,而我们今天讲的Request请求就是浏览器在向服务器端传送数据时需要遵守的格式

一个HTTP请求会包含三部分
1.请求行
2.请求头
3.请求体

下面我们逐个来说

请求行

请求行组成的 格式是: 请求方式-URL-协议/版本
给出一个例子: GET /request/demo1 HTTP/1.1

HTTP1.1请求提供了七种请求方式,分别是GET、POST、HEAD、OPTIONS、PUT、DELETE以及Trace,我们这里着重说下用的比较多的两种 GETPOST

GET请求方式的 特点是:
1.请求参数列表直接附加在URL后面,什么是请求参数列表呢?这个我们待会以例子来说
2.请求的url是有长度限制的
3.由于参数是直接附加在URL后面的,所以相对来说没那么安全

POST请求方式的 特点是:
1.请求参数列表封装在请求体中
2.请求的url没有长度的限制
3.由于参数是封装在请求体中,相对来说会比较安全

GET请求方式多用于查询,就像我们平常在搜索引擎查询想要查询的信息的时候,就是属于GET请求方式

POST请求方式多用于提交信息,就像我们平常在页面输入账号密码登录一样,就是使用POST请求方式

请求头

*概念:客户端浏览器告诉服务器端一些信息,这里面的格式是以键值对形式出现的(请求头名称:请求头值),下面介绍几个请求头,
有兴趣的可以自行去查资料

1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

举个例子:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0

这其中涉及了一段浏览器大战的历史渊源,感兴趣的朋友自行去查资料。

这里我们注意一个就好了,Chrome和Firefox,没错这就是两个从谷歌浏览器和火狐浏览器访问同一个url得到的User-Agent,明确告诉了服务器我是属于那个浏览器
的,后面附带的自然就是浏览器版本号

2.Accpet: 告诉服务器,客户端可以处理的内容类型

HTTP协议学习之Request学习
3.Accpet-Encoding:告诉服务器端,客户端能够理解的内容编码方式,一般都是一些压缩的算法

4.Host:指明了服务器的域名,以及服务器监听的TCP端口,例如我们输入www.baidu.com,就是在访问百度的服务器

最后说一下 请求体,(需要知道的是请求头与请求体之间存在一行请求空行,作用是分割请求头和请求体)

请求体也叫做 请求正文,举个简单的例子来说

<form action="#">
用户名:<input type="text" name="username"> <br>
密码:<input type="password" name="password"><br>

<input type="submit" value="登录">

form>

上文讲到了请求参数列表,那它究竟是什么呢?从这个表单我们可以看出两个用户名和密码两个input标签里均有一个名为name的属性,注意看图

form表单默认的请求方式就是GET,所以我们会看到这username和password直接附加在url中了,此时username和password就是我们讲的请求参数列表,当然实际上会有很多,这里这是简单的举个”梨子”

所以 请求行的格式就是:请求参1名称=请求参数1值&请求参数2名称=请求参数2值 …. 注意参数列表间使用 ‘&’ 做分隔符

最后给出一个完整的HTTP请求字符串表示形式

GET /web/login.html HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: Idea-2879242d=1fa6d102-fd6b-460f-8142-83f5d129d205; JSESSIONID=66D836411246ACA9410EF12C6BA75065
Host: localhost:63342
If-Modified-Since: Thu, 28 Nov 2019 03:59:44 GMT
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
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/78.0.3904.108 Safari/537.36

username=Amg997&password=123

至此,HTTP协议学习之Request学习就讲完了…

Original: https://www.cnblogs.com/iamamg97/p/11961070.html
Author: 码农Amg
Title: HTTP协议学习之Request学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/570349/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • springboot nginx 配置

    安装nginx参考本人另一篇博客:http://www.cnblogs.com/gmq-sh/p/5750833.html spring-boot需要启动nginx的,用于监听启动…

    Java 2023年5月30日
    057
  • java_day05

    Java流程控制 用户交互Scanner Java给我们提供了一个工具类,让我们可以获取用户的输入。java.util.Scanner 是Java5的新特性 基本语法 Scanne…

    Java 2023年6月5日
    0104
  • intellij idea 之 CheckStyle 代码格式校验

    posted @2016-04-06 11:52 聊聊IT那些事 阅读(1967 ) 评论() 编辑 Original: https://www.cnblogs.com/FCWOR…

    Java 2023年6月6日
    079
  • 接口中的静态方法——模板方法设计模式

    先看一个简单的例子,相信看完下例,你会对模板方法有一个初步的了解 interface Operations{ void execute(); //&#x63A5;&…

    Java 2023年6月15日
    046
  • 10.Feign简介

    Feign介绍* Feign是一个非常好用的HTTP客户端* Feign很大程度上简化了HTTP调用方式* Feign很好的弥补了SpringCloud的HTTP调用缺陷(修改了调…

    Java 2023年6月8日
    068
  • mybatis 字段类型映射一览表

    Original: https://www.cnblogs.com/tangzeqi/p/13155854.htmlAuthor: instrTitle: mybatis 字段类型…

    Java 2023年6月6日
    066
  • Java期末复习!

    本次复习从两道编程题入手(简单的99乘法表和一个冒泡排序) 首先99乘法表是由两个for循坏嵌套完成的,如下 我的第二步是复习了一个冒泡,定义BubbleSort类,然后新建Day…

    Java 2023年6月5日
    080
  • 彻底消灭if-else嵌套

    一、背景 1.1 反面教材 不知大家有没遇到过像 横放着的金字塔一样的 if-else嵌套: if (true) { if (true) { if (true) { if (tru…

    Java 2023年6月5日
    080
  • 大头儿子和小头爸爸的战斗–java字符和字符串

    故事背景 一座普普通通的小屋里,住着大头儿子、小头爸爸和围裙妈妈。在他们普普通通的生活中,总是响起充满欢乐的笑声。最温暖的家又成了他们每个人的爱的源泉。 《大头儿子和小头爸爸》是孩…

    Java 2023年5月29日
    078
  • 分布式项目开发-spring-dao.xml基础配置

    基础步骤: 1 数据源 2 sqlSessionFactory 3 MapperScan 打包。 db.properties文件 xmlns:xsi="http://ww…

    Java 2023年6月8日
    058
  • 线上问题排查常用命令,总结太全了,建议收藏!!

    free free 是查看内存使用情况,包括物理内存、交换内存 (swap) 和内核缓冲区内存。 free -h -s 3 表示每隔三秒输出一次内存情况,命令如下 [1014154…

    Java 2023年5月29日
    084
  • JAVA多线程实战

    由于项目上要和其他系统交互,而该系统采用同步接口,我们采用单线程调用,接收一条数据平均需要4~6s。而我们需要汇总近三个月的订单信息,大约一次有几千条数据,所以进行一次交互大概需要…

    Java 2023年6月9日
    076
  • Redis学习笔记

    Redis 参考博客https://www.cnblogs.com/beiluowuzheng/https://www.cnblogs.com/hunternet/如有侵权,请联系…

    Java 2023年6月5日
    068
  • Java学习 (22) 对象篇(02)类与对象

    类与对象的关系 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物. 动物(猫、狗)、植物(花、草)、手机(安卓、苹果)、电脑(联想、华硕)、&…

    Java 2023年6月8日
    092
  • spring schedule quartz 的区别

    Original: https://www.cnblogs.com/rgqancy/p/15976875.htmlAuthor: 任国强Title: spring schedule…

    Java 2023年5月30日
    053
  • HTTP长连接–Keep-Alive

    一、 HTTP/1.0 HTTP1.0版本的Keep-alive并不像HTTP1.1那样是默认发送的,所以要想连接得到保持,必须手动配置发送connection:keep-aliv…

    Java 2023年6月13日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球