首页 > 编程知识 正文

应用层通信协议,运行在应用层的协议

时间:2023-05-06 20:37:38 阅读:176103 作者:3084

HTTP是什么?

HTTP (超文本传输协议)是非常广泛的APP应用层协议。

HTTP往往基于传输层的TCP协议来实现。 (HTTP1.0、HTTP1.1、HTTP2.0都是TCP,HTTP是基于UDP来实现的) ) )。

HTTP要解决的问题?

要求传输哪个信息,按照哪个格式进行传输。

在响应中包含哪个信息,按照哪个格式进行转发。

HTTP协议的详细格式与信息

【使用快照工具也可以参考本人的其他博客。 https://blog.csdn.net/QQ _ 39537400/article/details/121626993? spm=1001.2014.3001.5501】

通过Fiddler捕获包获取的浏览器请求Sogou服务器信息。

HTTP请求协议是文本的。

开头: HTTP方法请求的URL的HTTP版本号

头(请求头)头

header是一堆键/值对,键/值对之间由换行符分隔,键/值之间由冒号空格分隔。

header中没有固定具体有多少行,具体来说是将空行作为结束标记使用

空行

此空行表示标题部分结束。

正文主体

请求中有的有正文,有的没有正文。

HTTP响应的格式

第一行

HTTP协议版本号状态代码的状态代码说明

协议头(header ) ) ) )。

空行

正文

HTTP在传输层上依赖于TCP协议,TCP是面向字节流的,如果没有这个空行,就会发生“数据包的粘贴问题”

对URL的详细分析

地址、域名:例如www.baidu.com

本质上是IP地址,域名写得很容易记忆。 也可以在地址后面加上冒号。 冒号后面可以加上端口号,表示访问服务器的端口。 不写的话会使用默认的端口号。 对于HTTP协议,默认端口号为80;对于HTTPS,默认端口号为443。

URL中的路径

同一网址中的路径不同,意味着访问服务器上的不同资源。

URL中的参数

键和值对之间用分开,键和值之间用=分开。 要使用吗? 作为开始标志。

URL中的片段标识符#

使用频率很低,通常用于搜索HTML页面上的特定位置。

URL的目的就是来区分一个网络上唯一资源

首先,导航到由服务器地址、特定服务器、端口号、特定APP应用程序、路径和APP应用程序管理的特定资源。 最后,使用查询字符串详细说明特定资源的要求,并使用片段id确定要移动到资源的哪些部分。URL encode与decode

query string中的特殊符号(如“:/=”)导致浏览器/服务器分析URL时出现错误的问题。 引入了URL编码和解码

URL encode :将特殊字符转换为转义字符

URL decode :将转义字符恢复为原始字符

转义是指用十六进制表示特殊字符中的值,并在每个字节前放置%

浏览器会自动对特殊符号进行编码,但有时自己手动创建的URL并不一定能自动编码。 以防万一,需要自己构建URL时,如果有特殊符号,请手动进行编码。 否则,请求可能会失败。

请求中的方法

HTTP协议中GET和POST两个方法有什么区别?

两者没有本质上的区别,但在细节上有区别。

数据位置: GET将自定义数据放置在query string中,POST将自定义数据放置在body语义的差异中。 GET一般为“获取数据”,POST一般用于提出数据的幂等性。 GTE请求通常设计为“幂等”,但POST请求通常不需要设计为“幂等”【执行一次请求与执行几次请求没有区别】(称为“幂等”)可缓存: GET请求

5 .直接在浏览器中输入URL将触发HTTP请求。

6. HTML页面中的一些特殊标签,link(CSS部署)、img )、scrip )、JS部署)、加载触发器)、a )超链接)、单击触发器)也触发了HTTP获取请求

7 .表单

8. ajax

使用java代码/其他库

10.Linux上的wget/curl

11 .通过第三方工具,

postman这类工具

通过情况下,GTE的body为空,但是可以自己构造一个body不为空的GET请求。

关于GET请求的URL长度的问题
GET的URL长度的上限以权威的RFC标准文档为准,在RFC标准文档中,HTTP协议,RFC2616标准,对于URL的长度,是没有做出限制的。

标准只是一份文件,实际开发的时候要遵守标准,但是同时也要看别人是不是严格遵守了标准。现在使用的chrome浏览器,对于URL的长度是能够支持的非常长的,一般来说不用担心长度问题。

构造POST请求的方式

form表单ajax第三方工具

POST请求的特点
4. 首行第一部分为POST
5. URL的query string一般为空,但是,也可以加上query string
6. header部分有若干个键值对
7. body部分一般不为空,但是,如果body为空,也是完全可行的

——————————————————————————————————————————
关于GET和POST传输的数据量
有的资料上说“GET传输的数据量小,POST传输数据量大”(不科学)。标准没有规定GET的URL的长度,也没有规定POST的body的长度,传输数据量多少,完全取决于不同浏览器和不同服务器之间的实现区别。

关于GET和POST传输数据类型
有的资料说“GET只能传输文本数据,POST可以传输二进制”(不科学),GET的query string虽然无法直接传输二进制数据,但是可以针对二进制数据进行url encode

Host键值对
一般来说是Host中的内容和URL中的地址是一致的,但是也不绝对

Content-Length
表示body的长度,单位是字节,如果没有body(GET),此时就可以没有Content-Length

Content-Type
表示body中的数据格式的类型。

appLication/x-www-form-urlencoded:form表单提交的数据格式,此时body的格式形如 name=lisi&pass=123456 multipart/form-data:form表单提交的数据格式(在form标签加上enctyped=“multipart/form-data”).通常用于提交图片/文件。body格式形如 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA------WebKitFormBoundaryrGKCBY7qhFd3TrwAContent-Disposition: form-data; name="text"title------WebKitFormBoundaryrGKCBY7qhFd3TrwAContent-Disposition: form-data; name="file"; filename="chrome.png"Content-Type: image/pngPNG ... content of chrome.png ...------WebKitFormBoundaryrGKCBY7qhFd3TrwA-- application/json:数据为json格式,body格式形如: {"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16a861fa2bddfdcd15"}

User-Agent键值对
描述了浏览器和操作系统的版本信息,形如:
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36

目前的UA已经失去了最初用于区分操作系统和浏览器版本的不同,以达到有选择性的现实图片,视频的显示问题,现在更多的用于区分PC端和移动端。

Referer键值对
表示当前页面是从哪来的,直接在浏览器中输入URL/点击收藏夹打开的页面是没有Referer。

Cookie

Cookie是浏览器访问服务器后,服务器传给浏览器的一段数据;浏览器需要保存这段数据,不得轻易删除;此后每次浏览器访问服务器,都必须带上这段数据。

Cookie的两个作用:第一个作用是识别用户身份,第二个作用是记录历史。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。