HTTP协议说明

news2024/11/23 19:25:03

1.用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文本。

HTTP报文大致可以分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。通常,并不一定要有报文主体。
在这里插入图片描述
2.请求报文
HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。

请求报文的格式如下:
在这里插入图片描述

一个GET请求报文如下:

GET /hello/index.jsp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98

一个POST请求报文如下:

POST /hello/index.jsp HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://localhost:8080/hello/index.jsp
Accept-Language: zh-cn,en-US;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 13
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=E365D980343B9307023A1D271CC48E7D

keyword=hello

相关参数解释如下:

请求首行:第一行数据

GET /hello/index?num=8 HTTP/1.1。表示请求方法、请求的资源(URL)地址、请求的协议和版本。案例中的含义就是:GET请求,请求服务器路径为/hello/index,请求协议和版本号为http1.1。同时GET请求的URL后面还附带了请求的参数num=8。
请求头:key-value的形式,value也可以使用key-value传递多个数据,使用“;”分隔:

Host:localhost。表示接受请求的服务器地址(请求的主机地址),可以是IP:端口号,也可以是域名。案例中的含义就是:localhost,即本机。
Connection: keep-alive。指定的连接相关的属性。案例中的含义就是:保持一段时间连接,默认就为3000ms;
Accept: application/json, text/plain, /。告诉服务器当前客户端可以接收的文档类型,其实这里包含了*/,就表示什么都可以接收;
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36。与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;
Referer: https://www.baidu.com/。请求来自哪个页面,例如你在百度上点击链接到了这里,那么Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了;
Accept-Encoding: gzip, deflate, br。支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
Accept-Language: zh-CN,zh;q=0.9。当前客户端支持的语言,可以在浏览器的工具-选项中找到语言相关信息;
Accept-Charset: GB2312,utf-8;q=0.7,
;q=0.7。客户端支持的编码;
Cookie: PSTM=1594605101;JSESSIONID=369766FDF622xx。用于在客户端缓存一些信息,通常用于服务器的会话功能(session)的客户端实现。比如存储用户登录信息,实现跳转免登录,后面会专门讲解。
Content-Type: application/json;charset=UTF-8。请求和响应中的媒体类型信息(数据类型)。用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析并展示html等。这里的application/json;charset=UTF-8表示JSON格式的数据交互,这是前后端分离开发的常用数据格式。
Content-Length:13。请求体的长度,这里表示13个字节。
请求空行(CR+LF):用来分隔请求头和请求体的数据。
请求体:POST请求是可以有体的,就是POST请求提交的数据,而GET请求不能有请求体,它的请求的数据会附在url之后。

3.GET和POST提交的区别
在这里插入图片描述
4 响应报文
接收到请求的服务器,会将请求内容的处理结果以响应的形式返回。响应报文格式如下:
在这里插入图片描述
响应首行和响应头共同构成了HTTP响应首部!
响应内容是由服务器发送给浏览器的内容,浏览器会根据响应内容来显示。
响应首行:
HTTP/1.1 200 OK。包括了响应协议、状态码、以及解释。该案例表示响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释;
响应头信息:
Server: Apache-Coyote/1.1。服务器的版本信息;
Content-Type: text/html;charset=UTF-8。将会响应html文本类型的数据,响应体使用的编码为UTF-8;前后端分离开发时常用的就是application/json。
Content-Length: 724。响应体为724字节;
Set-Cookie: JSESSIONID=C97E2B4C55xx; Path=/hello。响应给客户端的Cookie;
Date: Wed, 25 Sep 2012 04:15:03 GMT。响应的时间,这可能会有8小时的时区差;
响应空行:区分响应头和响应体
响应体:返回给客户端(浏览器)的数据,下面的案例中返回的是一个HTML页面,从Content-Type: text/html;charset=UTF-8中能确定响应类型。

以下是一个常见的响应报文,响应内容为一个HTML页面:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 724
Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
Date: Wed, 25 Sep 2012 04:15:03 GMT

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="http://localhost:8080/hello/">
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  <body>
<form action="" method="post">
  关键字:<input type="text" name="keyword"/>
  <input type="submit" value="提交"/>
</form>
  </body>
</html>

5.响应状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码(HTTP Status Code)的信息头(server header)用以响应浏览器的请求。

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
在这里插入图片描述
6.常见响应码
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,响应报文中通过Content-Range指定范围的资源。
301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上。
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙

7.TCP模拟HTTP发送GET和POST请求,采用模拟工具TCP网络调试助手
客户端TCP连接IP后发送GET请求

GET http://81.68.106.231:7800/gt/SignIn.php?A=2321008V3610&B=&C=0;0;0;0;0;0&D=测试机构&E=测试用户&F=8&Z=Y HTTP/1.0
Host:181.68.106.232:7820


第一行 GET请求方式+空格+路径+空格+HTTP/1.0 (参数可以加到路径上)
第二行到第三行 请求头,自行百度可以根据需要加行( Host必须要有,这样能再服务器上找到要哪个域下的文件)
第四行 空行(必须含有)
第五行 空行(必须含有)

服务器响应GET请求

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 21
Server: Werkzeug/2.0.2 Python/3.6.8
Date: Tue, 31 Oct 2023 02:17:23 GMT

<>OK=20231031101723\r\n

客户端TCP连接IP后发送POST请求

POST http://181.68.106.232:7820/Up/BH101Gs/UploadAssays HTTP/1.0
Host:181.68.106.232:7820
Content-Length:671
Content-Type:application/x-www-form-urlencoded;charset=UTF-8

scannerCode=&deviceId=2321008V3610&assayTagId=2321008V3610231011153249&assayDate=2023-10-11 15:32:49&cardId=123456&itemSampleType=&operator=ABC&agency=1501&lbs=0;0;0;0;0;0;&location=Test address&coordinate=0.000000,0.000000&detectedName=Name of test&detectedId=100000000000000000&total=3&result=[{"tag":1,"assayValue":"0.000000","calValue":"44.455681","unit":"n","itemName":"KET","conclusion":"阳性","sampleTypeName":""},{"tag":2,"assayValue":"0.000000","calValue":"54.455479","unit":"n","itemName":"MOP","conclusion":"阳性","sampleTypeName":""},{"tag":3,"assayValue":"0.000000","calValue":"30.500000","unit":"n","itemName":"MET","conclusion":"阳性","sampleTypeName":""}]

注意:请求体后面的数据必须有两个\r\n\r\n
服务器响应客户端

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 6
Server: Werkzeug/2.0.2 Python/3.6.8
Date: Mon, 30 Oct 2023 10:40:22 GMT

<>==OK

HTTP相关参考网址:
https://api.dandelioncloud.cn/article/details/1610084821210710018

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux C] signal 的使用

前言&#xff1a; signal 是一种通信机制&#xff0c;可以跨进程发送&#xff0c;可以同进程跨线程发送&#xff0c;可以不同进程向指定线程发送。 信号的创建有两套api&#xff0c;一个是signal&#xff0c;一个是sigaction&#xff0c;signal缺陷很多&#xff0c;比如没有提…

亚马逊美国站衣物收纳商品合规标准是什么?如何办理?

随着秋季的来临&#xff0c;不少人翻箱倒柜地寻找换季用品。相信现在很多人都和小编一样&#xff0c;出门时打算找个外套穿上&#xff0c;但想到要去柜子里翻半天&#xff0c;就立刻打消了想要出门的念头。 但当翻箱倒柜地找到了换季用品&#xff0c;却又要一件一件地把翻出来…

Variations-of-SFANet-for-Crowd-Counting可视化代码

前文对Variations-of-SFANet-for-Crowd-Counting做了一点基础梳理&#xff0c;链接如下&#xff1a;Variations-of-SFANet-for-Crowd-Counting记录-CSDN博客 本次对其中两个可视化代码进行梳理 1.Visualization_ShanghaiTech.ipynb 不太习惯用jupyter notebook, 这里改成了p…

spring解决后端显示时区的问题

spring解决后端显示时区的问题 出现的问题&#xff1a; 数据库中的数据&#xff1a; 解决方法 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: Asia/Shanghai

vscode前端必备插件

安装插件的位置如下&#xff1a; 1、Chinese (Simplified) Language Pack 中文简体插件 2、Vetur Vue官方钦定插件&#xff0c;包括&#xff1a;语法高亮&#xff0c;智能提示&#xff0c;错误提示&#xff0c;格式化&#xff0c;自动补全等等 3、ESLint 语法检查工具&#…

客户端性能测试基础知识

目录 1、客户端性能 1.1、客户端性能基础知识 2、客户端性能工具介绍与环境搭建 2.1.1、perfdog的使用 2.1.2、renderdoc的使用 1、客户端性能 1.1、客户端性能基础知识 客户端性能知识这里对2D和3D类游戏进行展开进行&#xff0c;讲述的有内存、CPU、GPU、帧率这几个模块…

云栖大会十五年:开放创新,未来愿景

时光荏苒&#xff0c;转眼间云栖大会已经走过了十五个年头&#xff0c;这一场中国云计算行业的盛会已经成为业内不可或缺的一部分。在这个特殊的时刻&#xff0c;我想分享一些对未来云栖大会的期待与建议&#xff0c;希望这个盛会能够继续推动云计算领域的创新和发展。 云栖大会…

数据库深入浅出,数据库介绍,SQL介绍,DDL、DML、DQL、TCL介绍

一、基础知识&#xff1a; 1.数据库基础知识 数据(Data)&#xff1a;文本信息(字母、数字、符号等)、音频、视频、图片等&#xff1b; 数据库(DataBase)&#xff1a;存储数据的仓库&#xff0c;本质文件&#xff0c;以文件的形式将数据保存到电脑磁盘中 数据库管理系统(DBMS)&…

LSF 概览——了解 LSF 是如何满足您的作业要求,并找到最佳资源来运行该作业的

LSF 概览 了解 LSF 是如何满足您的作业要求&#xff0c;并找到最佳资源来运行该作业的。 IBM Spectrum LSF ("LSF", load sharing facility 的简称) 软件是行业领先的企业级软件。LSF 将工作分散在现有的各种 IT 资源中&#xff0c;以创建共享的&#xff0c;可扩展…

国内内卷太严重,还不考虑一下在海外接单?那这几个平台你知道吗?

作为一个程序员&#xff0c;在平台上接单赚点外快是再正常不过的事情了&#xff0c;但是现今国内各个平台都内卷比较严重&#xff0c;你是否考虑过去“外面的世界”看看&#xff1f; 如果想过&#xff0c;那么这几个外国的接单平台你都知道吗&#xff1f; 接下来就和我一起来看…

vmWare虚拟机扩容及pip国内镜像源

扩展虚拟机容量 打开虚拟机.sudo apt-get install gparted pip镜像源 pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple-i https://pypi.douban.com/simple-i https:// mirrors.aliyun.com/pypi/simple

Linux CentOS7 shell

学好linux&#xff0c;首先要深入理解shell。 shell俗称壳&#xff0c;它包裹在内核的外面&#xff0c;是用户命令的翻译官。 作用&#xff1a;接收用户的命令&#xff0c;翻译后(处理一下)交给Linux内核处理。 用户执行命令 -> shell -> 内核 -> CPU -> 内核 -…

C/C++笔试易错与高频题型图解知识点(三)——数据结构部分(持续更新中)

目录 1. 排序 1.1 冒泡排序的改进 2. 二叉树 2.1 二叉树的性质 3. 栈 & 队列 3.1 循环队列 3.2 链式队列 4. 平衡二叉搜索树——AVL树、红黑树 5 优先级队列&#xff08;堆&#xff09; 1. 排序 1.1 冒泡排序的改进 下面的排序方法中&#xff0c;关键字比较次数与记录的初…

LeetCode 996.正方形数组的数目

和上一道状压的区别在于我们要去重一下~ 思路都是和上一篇博客是一样的&#xff0c;感兴趣的同学可以看一下 const int N 15; int dp[1<<N][N]; int n; vector<int>nums1;bool check(int x){int tem sqrt(x);if(tem*temx)return 1;return 0; }int dfs(int u,in…

比较Excel中的两列目录编号是否一致

使用java代码比较excel中两列是否有包含关系&#xff0c;若有包含关系&#xff0c;核对编号是否一致。 excel数据样例如下&#xff1a; package com.itownet.hg;import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import j…

网站如何改成HTTPS访问

在今天的互联网环境中&#xff0c;将网站更改成HTTPS访问已经成为了一种标准做法。HTTPS不仅有助于提高网站的安全性&#xff0c;还可以提高搜索引擎排名&#xff0c;并增强用户信任。因此&#xff0c;转换为HTTPS是一个重要的举措&#xff0c;无论您拥有个人博客、电子商务网站…

如何将你的PC电脑数据迁移到Mac电脑?使用“迁移助理”从 PC 传输到 Mac的具体操作教程

有的小伙伴因为某一项工作或者其它原因由Windows电脑换成了Mac电脑&#xff0c;但是数据和文件都在原先的Windows电脑上&#xff0c;不知道怎么传输。接下来小编就为大家介绍使用“迁移助理”将你的通讯录、日历、电子邮件帐户等内容从 Windows PC 传输到 Mac 上的相应位置。 在…

PicoDiagnostics (NVH设备软件)-Mongoose识别不了VIN码

如果Mongoose J2534诊断线识别不到车辆的VIN码&#xff0c;通常在PD软件中会像下图那样提示。 遇到这种情况&#xff0c;首先确保你的电脑是否已经安装J2534驱动&#xff1a;打开【设备管理器】&#xff0c;如果你将示波器和Mongoose J2534诊断线连接到电脑&#xff0c;【设备管…

EtherCAT FP介绍系列文章—RAS

RAS扩展功能包是acontis公司在EC-Master EtherCAT主站基础上提供的一套基于TCP/IP的客户端/服务器架构的Remote API。Remote API旨在远程API提供了一个接口&#xff0c;解决在操作系统中当第二个进程&#xff08;例如OPC服务器&#xff09;可能访问EtherCAT总线的数据或在Ether…

oracle 校验左括号和有括号是否对称匹配

校验数据比如名称字段的左括号和有括号是否匹配。不匹配情况有&#xff1a; 左括号是英文的&#xff0c;右括号是中文的&#xff1b;右括号是中文的&#xff0c;左括号是英文的&#xff1b; 通过正则表达式对名称进行校验&#xff0c;校验脚本如下&#xff1a; SELECT NAMEFR…