Http请求参数详解

 

http请求参数之Query String Parameters、Form Data、Request Payload

HTTP请求中不同的请求方式和设置不同的Content-Type时,参数传递的方式会不一样,一起了解这三种形式:Query String Parameters、Form Data、Request Payload;

GET请求

Query String Parameters

GET请求时,参数会以url string 的形式进行传递,即?后的字符串则为其请求参数,并以&作为分隔符。

General
Request URL: http://test.com?from_type=省&from_name='四川省'
Request Method: GET

Query String Parameters

from_type=省&from_name=‘四川省’

 

Post请求

post请求会出现两种形式的请求体:

FormData

当发起一次Post请求,若未指定Content-type,则默认content-type为application/x-www-form-urlencoded,即参数会以FormData的形式进行传递,不会显示出现在请求URL中。

 

Request Payload

当发起一次post请求,若Content-Type为application/json,则参数会以Request Payload的形式进行传递(数据格式为json),不会显示出现在请求url中。

 

formData()方法

服务器为什么会对表单提交和文件上传做特殊处理,因为表单提交数据是名值对的方式,且Content-Type为application/x-www-form-urlencoded,而文件上传服务器需要特殊处理,普通的post请求(Content-Type不是application/x-www-form-urlencoded)数据格式不固定,不一定是名值对的方式,所以服务器无法知道具体的处理方式,所以只能通过获取原始数据流的方式来进行解析。

当我们遇到一些文件上传功能时,我们需要使用原生的formData()来进行数据组装,且content-type需要设置为multipart/formdata http请求头:

Request URL: http://test.com/upload
Request Method: POST

 

其中,WebKitFormBoundarysBkB6WoEBvbCRkmh为浏览器随机生成的boundary,作为分隔参数,作用等同于&。

HTTP POST 表单请求提交时,使用的Content-Type是application/x-www-form-urlencoded,而使用原生AJAX的POST请求如果不指定请求头RequestHeader,默认使用的Content-Type是text/plain;charset=UTF-8。

所以,在使用原生AJAX POST请求时,需要明确设置Request Header,即:

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');


链接:https://juejin.cn/post/6844903814760251399
 

 

 

 

 

 

 

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C 语言中,可以使用标准库中的 socket 和 HTTP 协议来实现 HTTP 请求和响应的处理。HTTP 头部(header)是 HTTP 请求和响应中的重要组成部分,包含了请求和响应的各种参数信息。下面是一个简单的 C 语言程序,可以解析 HTTP 请求头部中的参数信息: ```c #include <stdio.h> #include <string.h> int main() { char buffer[1024]; char *method, *path, *http_version; int content_length = -1; // 读取 HTTP 头部 fgets(buffer, sizeof(buffer), stdin); sscanf(buffer, "%s %s %s", method, path, http_version); while (fgets(buffer, sizeof(buffer), stdin)) { if (strcmp(buffer, "\n") == 0 || strcmp(buffer, "\r\n") == 0) { break; } if (strncmp(buffer, "Content-Length:", 15) == 0) { sscanf(buffer + 15, "%d", &content_length); } } printf("Method: %s\n", method); printf("Path: %s\n", path); printf("HTTP Version: %s\n", http_version); printf("Content-Length: %d\n", content_length); return 0; } ``` 在上面的代码中,首先声明了三个指针变量 `method`、`path` 和 `http_version`,用于存储 HTTP 请求的方法、路径和版本号。然后通过 `fgets()` 函数和 `sscanf()` 函数从标准输入流(stdin)中读取 HTTP 头部的各个参数。 接着,通过一个 while 循环遍历 HTTP 头部中的每一行,如果遇到空行,则表示 HTTP 头部已经读取完毕,可以退出循环。如果遇到 Content-Length 参数,则使用 sscanf() 函数解析其中的数值,并将其存储到 content_length 变量中。 最后,通过 printf() 函数输出读取到的 HTTP 头部参数信息。 需要注意的是,上面的代码只是一个简单的示例,实际的 HTTP 头部可能会更加复杂,需要根据不同的情况进行适当的调整。同时,还需要对 HTTP 请求和响应的其他部分进行处理,包括请求体、响应状态码、响应体等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值