前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >HTTP 协议请求概述

HTTP 协议请求概述

原创
作者头像
PHP开发工程师
修改于 2021-04-27 09:55:35
修改于 2021-04-27 09:55:35
8720
举报
文章被收录于专栏:thinkphp+vuethinkphp+vue

1、建立一个连接(TCP三次握手)

HTTP是一个基于TCP协议的应用层协议,由请求和响应构成,另外还有HTTPS,是以安全为目标的HTTP通道,是HTTP协议加上SSL协议层的安全加密传输,另外TLS也是SSL的升级(具体关系不详细说,有兴趣的同学可以百度)

那么我们在建立一个连接的时候需要经历3个步骤(三次握手):

(1)Seq序号(sequence number):占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

(2)确认号(acknowledgement number):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

(3)标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:

URG:紧急指针(urgent pointer)有效。 ACK:确认序号有效。 PSH:接收方应该尽快将这个报文交给应用层。 RST:重置连接。 SYN:发起一个新连接。 FIN:释放一个连接。

需要注意的是:

不要将确认序号Ack与标志位中的ACK搞混了。确认方Ack=发起方Seq+1,两端配对。

三次握手的具体步骤:

  建立一个TCP连接时,需要客户端和服务器端总共发送3个包。   三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。在socket编程中,客户端执行connect()时将触发三次握手。

第一次握手(SYN=1,seq=x):     客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1):     服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1。服务器端选择自己的ISN序列号,放在seq域里,同时将确认序号(Acknowledgement Number)设置为客户的ISN加1,即X+1。发送完毕后,服务器端进入SYN_RCVD状态。

第三次握手(ACK=1,seq = x+1 ,ACKnum=y+1):     客户端再次发送确认包(ACK=1),SYN标志位为0,并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方,并且在数据段放 X 的+1。   发送完毕后,客户端进入ESTABLISHED状态,当服务器端收到这个包时,也进入ESTABLISHED状态,TCP握手结束,TCP连接建立完成。

2.请求

建立连接之后,我们就要开始向服务端发起请求

HTTP/1.1协议中,客户端和服务端默认对方支持长连接-keepalive,因为 keepalive 在很多情况下能够重用连接,减少资源消耗,缩短响应时间,所以在 HTTP1.1 中缺省就是支持 keepalive 的。

如果响应方不想支持 keepalive,需要在应答报文头中明确的标识 Connection:close,那么客户端设置的 Connection:keep-alive 就失效了,如果客户端不想支持keepalive,需要在请求报头中明确标识Connection:close

  设置 HTTP 短连接:   在应答报文头中设置 Connection:close,则在一次请求/响应之后,就会关闭连接。   设置 HTTP 长连接,有过期时间:   在应答报文头中设置 Connection:keep-alive 和 Keep-Alive: timeout=60,表明连接建立之后,空闲时间超过60秒之后,就会失效。如果在空闲第 58 秒时,再次使用此连接,则连接仍然有效,使用完之后,重新计数,空闲 60 秒之后过期。   设置 HTTP 长连接,无过期时间:   在应答报文头中只设置 Connection:keep-alive,表明连接永久有效。

http一次请求的过程大概如下:

  • 用户在浏览器输入www.xxxxx.com
  • dns服务器解析/或者本机hosts,路由器hosts对比 获得ip
  • 浏览器访问默认端口80,tls,ssl协议端口443,则访问的tcp地址为 ip:80
  • tcp协议3次握手,建立连接
  • 发送一个http request请求头
  • 服务器获得http request请求头,表明该次访问为http访问,解析http请求头,获得请求类型,请求格式,以及请求数据(cookie,get,post数据)
  • 服务器发送response响应数据,主动断开
  • 浏览器接收response响应数据,解析响应文本类型,解析数据,断开连接

HTTP请求由三部分组成 : 请求行,消息报头,请求正文

请求行

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

Method Request-URI HTTP-Version CRLF GET /Chris.jpg HTTP/1.1 Method : 请求方法; Request-URI :统一资源标识符; HTTP-Version:请求的HTTP协议版本; CRLF:回车和换行

各种请求方法:

HTTP请求方法也被叫做“请求动作”,不同的方法规定了不同的操作指定的资源方式。服务端也会根据不同的请求方法做不同的响应。

  • OPTIONS:允许客户端查看服务器的性能。这个方法会请求服务器返回该资源所支持的所有 HTTP 请求方法,该方法会用’*’来代替资源名称,向服务器发送 OPTIONS 请求,可以测试服务器功能是否正常。JavaScript 的 XMLHttpRequest 对象进行 CORS 跨域资源共享时,就是使用 OPTIONS 方法发送嗅探请求,以判断是否有对指定资源的访问权限。
  • HEAD:与GET方法一样,都是向服务器发出指定资源的请求,但是服务器在响应 HEAD 请求时不会回传资源的内容部分(即响应实体),这样我们在不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。
  • GET:请求指定的页面信息,并返回响应实体。一般来说 GET 方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。
  • POST:向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据包含在请求体中。POST 方法是非幂等的方法,因为这个请求可能会创建新的资源或修改现有资源。
  • PUT:向指定资源位置上传其最新内容,PUT 方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容,常用于修改指定资源。
  • DELETE:请求服务器删除所请求 URI 所标识的资源。DELETE 请求后指定资源会被删除,DELETE 方法也是幂等的。
  • TRACE:请求服务器回显其收到的请求信息,该方法主要用于 HTTP 请求的测试或诊断。
  • CONNECT:该方法是 HTTP/1.1 协议预留的,能够将连接改为管道方式的代理服务器。通常用于 SSL 加密服务器的链接与非加密的 HTTP 代理服务器的通信。
  • PATCH:出现的较晚,它在 2010 年的 RFC 5789 标准中被定义。PATCH 请求与 PUT 请求类似,同样用于资源的更新。二者有以下两点不同:1、PATCH 一般用于资源的部分更新,而 PUT 一般用于资源的整体更新;2、当资源不存在时,PATCH 会创建一个新的资源,而 PUT 只会对已在资源进行更新。

消息报头

 HTTP消息报头包括普通报头请求报头响应报头实体报头。每一个报头域都是由 名字+:+空格+值 组成,消息报头域的名字不区分大小写。

  • 普通报头:普通报头中有少数报头域用于所有的请求和响应信息,但并不用于被传输的实体,只用于传输的消息(如缓存控制,连接控制等),通用头域包含Cache-Control、Connection等等。既可以出现在请求报头,也可以出现在响应报头中
  • 请求报头:用于向服务器端传递请求的附加信息 ,请求报头的HTTP报头结构:通用报头-请求报头-实体报头
  • 响应报头:用于服务器端传递附加的响应信息 , 响应报头的HTTP报头结构:通用报头-响应报头-实体报头
  • 实体报头:实体报头定义了关于实体正文和请求所标识资源的元信息

典型的请求头有:

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机

User-Agent:内容包含发送请求的用户信息,一般是浏览器类型、操作系统等信息

Accept:客户端可识别的内容类型列表,用于指定客户端接收那些类型的信息

Accept-Controller-Allow-Origin :本次请求来自哪个源,服务器根据该值判断是否同意请求,在解决跨域问题上也会用到

Cache-Controller:指定请求和响应的缓存机制。只在当前请求生效

Connection:允许客户端和服务器指定与请求/响应连接有关的选项,例如这是为Keep-Alive则表示保持连接。

Cookie:Cookie分2种,一种是客户端向服务端发送的,使用Cookie报头,用来标记。另一种是服务器发给浏览器的,报头为set-Cookie。

请求正文和响应正文

消息报头结束之后,空行 标志着请求头结束,请求正文(请求体)的开始 username=aa&password=1234

响应正文就是服务器返回的资源的内容,响应头和正文之间也必须用空行分隔

四次挥手

建立一个连接需要三次握手,而终止一个连接要经过四次挥手,这是由TCP的半关闭(half-close)造成的。具体过程如下所示。

  • 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
  • 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
  • 注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
  • 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
  • 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。 既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Xcode 下载安装指南
从百度和谷歌上搜了很多帖子,发现并没有靠谱的 xcode 国内的镜像,这里提供一个可以跳转到官网的下载方式。
明明如月学长
2022/09/26
6.1K0
Xcode 下载安装指南
iOS App的上架和版本更新流程
作为一名iOSDeveloper,把开发出来的App上传到App Store是必要的。下面就来详细讲解一下具体流程步骤。
iOS Magician
2023/10/11
4K0
iOS App的上架和版本更新流程
xcode打包导出ipa
众所周知,在开发苹果应用时需要使用签名(证书)才能进行打包安装苹果IPA,作为刚接触ios开发的同学,只是学习ios app开发内测,并没有上架appstore需求,对于苹果开发者账号认证需要支付688,真的是极大的浪费,使用appuploader,只需要注册苹果普通的账号,不需要688认证,就可以打包自己开发的ios应用,自己真机测试,下面是详细教程: 第一步:注册苹果开发者账号 访问以下网址,按照提示注册即可,因为不需要支付688认证苹果开发者,所以没什么好讲的。 注册地址:Apple Developer https://developer.apple.com/cn/ 第二步:下载APP Uploader 下载地址: Appuploader官网--IOS ipa上传发布工具,证书制作工具跨平台版,windows,linux,mac系统都可用 (applicationloader.net) http://www.applicationloader.net/ 我这里是VMware虚拟机安装的mac系统,所以下载了mac安装包,直接解压,双击appuploader即可启动,看下图:
iOS程序应用
2023/04/17
4980
xcode打包导出ipa
xcode打包导出ipa
众所周知,在开发苹果应用时需要使用签名(证书)才能进行打包安装苹果IPA,作为刚接触ios开发的同学,只是学习ios app开发内测,并没有上架appstore需求,对于苹果开发者账号认证需要支付688,真的是极大的浪费,使用appuploader,只需要注册苹果普通的账号,不需要688认证,就可以打包自己开发的ios应用,自己真机测试,下面是详细教程:
爱学iOS的小麦子
2022/09/27
1.5K0
xcode打包导出ipa
xcode打包导出ipa
众所周知,在开发苹果应用时需要使用签名(证书)才能进行打包安装苹果IPA,作为刚接触ios开发的同学,只是学习ios app开发内测,并没有上架appstore需求,对于苹果开发者账号认证需要支付688,真的是极大的浪费,使用appuploader,只需要注册苹果普通的账号,不需要688认证,就可以打包自己开发的ios应用,自己真机测试,下面是详细教程:
iOS Magician
2023/03/22
4820
xcode打包导出ipa
免688申请苹果开发者证书,开发自己得苹果应用
我们都知道,在开发苹果应用时需要使用签名(证书)才能进行安装苹果IPA,但是官方给的步骤过于麻烦,本次教程围绕一款名为“APP Uploader”的平台进行简单几步操作开发自己的苹果应用。
iOS程序应用
2022/11/04
8910
Ios上架app无需688,xcode打包导出IPA,供人内测
众所周知,在开发苹果应用时需要使用签名(证书)才能进行打包安装苹果IPA,作为刚接触ios开发的同学,只是学习ios app开发内测,并没有上架appstore需求,对于苹果开发者账号认证需要支付688,真的是极大的浪费,经过一番百度,APP Uploader这款软件,真是丝滑啊,只需要注册苹果个人开发者账号,不需要688认证,就可以打包自己开发的ios应用,提供给他人测试,废话不多讲,下面是详细教程:
iOS程序应用
2023/02/23
1.3K0
iOS打包ipa无签名打包企业签
最近有一个需求,就是提供无签名的ipa包,然后再通过第三方对ipa包进行企业签,达到不需上App Store就可以快速分发供用户下载使用。
Lee坚武
2020/12/09
2.7K0
Flutter中对IOS项目进行真机调试、项目打包、提交审核
(1). 拥有苹果开发者账号个人(每年99美元)、公司(每年99美元)、企业(每年299美元)账号均可;
越陌度阡
2021/03/02
2.3K0
Flutter中对IOS项目进行真机调试、项目打包、提交审核
[ios开发]-APP-上架流程
由于苹果的机制,在非越狱机器上安装必须通过官方的Appstore, 开发者开发好应用后上传Appstore,也需要通过审核等环节。 AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传Appstore作了支持。 本文从三个流程来介绍如何实现AppCan在 线编译出ipa包,以及上传到苹果Appstore。
爱学iOS的小麦子
2023/01/13
3570
[ios开发]-APP-上架流程
由于苹果的机制,在非越狱机器上安装必须通过官方的Appstore, 开发者开发好应用后上传Appstore,也需要通过审核等环节。 AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传Appstore作了支持。 本文从三个流程来介绍如何实现AppCan在 线编译出ipa包,以及上传到苹果Appstore。
iOS Magician
2023/03/21
2630
如何使用Xcode打包导出IPA文件并进行iOS应用内测,无需支付苹果开发者账号费用?
苹果开发者账号认证需要支付688元,对于初学iOS开发的同学来说,仅仅是为了进行内测而不需要上架App Store,这样的费用是不必要的。但是,有一款名为APP Uploader的软件可以解决这个问题,只需要注册苹果个人开发者账号,无需支付688元认证,即可打包自己开发的iOS应用,并提供给他人测试。以下是详细教程:
爱学iOS的小麦子
2023/03/08
1.1K0
appuploader 上架详解大全(下)
1.本文详细介绍最新的在windows上进行ios app开发编译打包安装到手机测试的完整流程。介绍ios开发经常遇到的问题和解
iOS程序应用
2023/04/17
1.6K0
appuploader 上架详解大全(下)
LigPlot的安装与使用
LigPlot是EMBL-EBI开发的软件,用于以2D方式展示分子对接结果,LIGPLOT,绘制蛋白质和小分子之间的相互作用;DIMPLOT,绘制蛋白之间的相互作用;Antibody plot,绘制抗原抗体之间的相互作用。其余软件还有PLIP和PoseViewer,我后续再补上。
Azur1
2021/09/24
7.9K0
【玩转Lighthouse】用轻量服务器搭建一个Minecraft服!BE
在minecraft游戏火爆全球的今天,几乎每个人的旁边都有玩mc的朋友,但是苦于网络等因素的影响,并不能随时随地的进行联机。现在可以利用腾讯云的轻量服务器,搭建一个属于你自己的私人服务器,可以随时随地的召唤你的好友上线,一起游玩。(注意,本教程仅介绍Minecraft BE版本的开服方法)
MGS浪疯
2022/04/13
10.1K3
Xcode打包ipa的步骤(简述)
二、打包(生成ipa测试包)步骤 第1步:配置发布证书和AdHoc描述文件 (1)登陆苹果开发者主页 https://developer.apple.com,选择Account,然后选择 Certificates, Identifiers & Profiles,点击Certificates:
iOS Magician
2023/03/21
5.1K0
Mac Jenkins搭建 Android/IOS自动打包环境
如何在mac上利用Jenkins搭建 Android/IOS自动打包环境呢? 设置静态IP 打开”System Preferences…”,设置静态ip。 设置Terminal 在”Utilit
xiangzhihong
2018/02/06
2.6K0
Mac Jenkins搭建 Android/IOS自动打包环境
​​苹果应用上架后多久可以下载​
iOS APP上架App Store其中一个步骤就是要把ipa文件上传到App Store!
爱学iOS的小麦子
2023/01/09
6060
ios打包ipa的四种实用方法(.app转.ipa)
局限性:个人开发一般采用这种方法,但是当一个证书多人使用时就稍显麻烦。一般多人开发时都是采用provisioning profile+P12文件来进行真机调试。上述方法在最后导出ipa包时需要输入appleID,这时还要向团队的其他人要。采用provisioning profile+P12真机调试的方式不要求开发者知道appleID以及密码,密码一般放在leader那里;
iOS程序应用
2023/05/11
1.2K0
xcode打包IPA(完整详细图文)
③ 99美元的开发者证书一个(此证书提供App上传到App Store),苹果的另外一个299美元一年的证书打包流 程一样,只是在后期打包时候的选项不同,会在后文提及.xcode打包IPA
iOS Magician
2023/03/21
5670
xcode打包IPA(完整详细图文)
推荐阅读
相关推荐
Xcode 下载安装指南
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 1、建立一个连接(TCP三次握手)
  • 三次握手的具体步骤:
  • 2.请求
  • http一次请求的过程大概如下:
    • HTTP请求由三部分组成 : 请求行,消息报头,请求正文
    • 请求行
    • 各种请求方法:
    • 消息报头
    • 请求正文和响应正文
    • 四次挥手
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档