从HTTP的底层规范上面学习一下,用实际的例子保你醍醐灌顶

本文深入浅出地介绍了HTTP协议的四要素:请求行、请求头、空行和请求体,并通过实例演示了GET、POST请求的不同形式,包括普通字符串、form表单及多表单的POST请求。理解这些基础知识有助于更好地掌握HTTP通信机制。
摘要由CSDN通过智能技术生成

简述

本文不做基础普及,希望对用过HTTP但觉得不熟悉的人有所帮助,同时我也不对很多细节做太多描述,仅仅对HTTP4要素以及我们常见的传参方式进行讲解,最重要的是我会举实实在在的例子来表达,我学习的时候看了很多文章,了解的感觉不是特别清楚,直到我按照这种方式方式去学习了一下,就完完全全明白了,希望你也可以。

注:本文内容节选与我的另外一篇关于HttpUtils的文章,感觉可以独立出来。

关于Http的基本标准

这边我对Http的基本知识不做太多普及,仅讲述和我设计有关的相关知识。

Http的四要素

众所周知,Http是基于TCP,而TCP是用来传输数据的,说得再通俗一些,就是用来传递字符串的。那么这个字符串到底要如何传递以及如何解析,这就是应用层协议需要设计的,我们平时见到的应用层协议都是围绕“如何来传递字符串”这个目标然后实现的(如何传递也意味着如何解析),Http也是,它的标准就是4要素,或者是4块内容。

  1. 请求行
    请求行占了一行,格式是:方法 请求地址 HTTP/版本号
    后面中间分别有1个空格
  2. 请求头
    这个是多行,每一行都是key:value的形式
  3. 空行
    就是一个空行,用于区分请求头和请求体
  4. 请求体
    请求体就是我们常说的body或者form部分了。这个行数不定,那如何知道结尾了呢?就要用请求头里面所标记的Content-Length来判断了,用一些框架在解析的时候,如何发现Length的长度和请求体的长度不一致的时候,就会出现异常。包括接收Http请求或者请求http的时候。

对于Http的响应也是这4要素。

四要素举例

光看上面的解释,其实还是比较抽象的,我举几个平时最常见的例子,一目了然。对了,我都是用postman做的测试。

最常见的get请求
GET /http/get?arg=123 HTTP/1.1
name: xiaopang
Host: localhost:8080


get请求,没有请求体。

普通字符串的post请求
POST /http/post/string?arg=123 HTTP/1.1
name: xiaopang
Content-Type: text/plain
Host: localhost:8080
content-length: 4

test

这个相对与之前的增加了3个地方。
请求头增加了Content-Type:text/plain,这个就是告诉接收方我发送的就是普通的字符串,不用特殊处理。
关于这个参数多说一点点,这个看你使用的web框架,会不会用这个,有的根本不会用。
增加了请求体,因此也有了conten-length,这个长度它指的是字节

普通form表单的post请求

我们经常也会用这种的,就是以key-value的方式去提交表单。都是普通的字符串,这种form我们都称之为“application/x-www-form-urlencoded”。

POST /http/post/form-simple?arg=123&arg1=456 HTTP/1.1
name: xiaopang
content-type: application/x-www-form-urlencoded
content-length: 15

name=ywg&age=25

这种的其实还是比较常见的,这边我传递了两个参数,name和age,但是你注意看第一行,我还传递了两个参数arg和arg1,你会发现和请求体里面的格式特别像。这也就解释了为什么叫做form-urlencoded了,form代表了它是表单形式,在请求体里面,同时我还标记了一下它的方式仍然是按照url参数来传递的。
在url后面跟着的key-value形式的参数,我们一般称之为url参数户或者查询参数(query),我比较喜欢称之为查询参数,叫做query。对于这些一般传递的时候都会encode一下,解析的时候需要decode一下。

multi-form(多表单)的post请求

我们这边以传递一个字符串和一个文件为例:

POST /http/post/form-multi?arg=123&arg1=456 HTTP/1.1
name: xiaopang
cache-control: no-cache
Host: localhost
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值