深入HTTP请求流程

0|1 

1|01.HTTP协议介绍

 

  1. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。所有的WWW文件都必须遵守这个标准
  2. HTTP是一个基于TCP/IP通信协议来传递数据的协议(传输的数据类型为HTML 文件,、图片文件, 查询结果等)
  3. HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议
  4. HTTP协议一般用B/S架构(浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求)
  5. HTTP协议通常承载于TCP协议之上或者承载于TLS或SSL协议层之上,这个时候就成了常说的HTTPS
  6. HTTP是万维网交换信息的基础。

2|02.URI和URL的区别

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。 URI:Uniform Resource Identifier 统一资源标识符 URL:Uniform Resource Location 统一资源定位符 URI 是用来标示 一个具体的资源的,我们可以通过 URI 知道一个资源是什么。 URL 则是用来定位具体的资源的,标示了一个具体的资源位置。互联网上的每个文件都有一个唯一的URL。

3|03.HTTP请求报文

 

HTTP请求消息由四部分构成:请求行(请求方法)、请求头部(消息报头)、空行、请求主体(请求正文)

3.1 请求行

请求行由三个标记组成:请求方法、请求URL和HTTP版本,它们用空格分隔。
例如: GET /index.html HTTP/1.1

首行结构为[方法] + [url] + [版本]

URL的标准如下:

协议://服务器IP[:端口]/路径/[?查询]

请求方法如下:

  • GET 获取资源
  • POST 向服务器端发送数据,传输实体主体
  • PUT 传输文件
  • HEAD 获取报文首部
  • DELETE 删除文件
  • OPTIONS 询问支持的方法
  • TRACE 追踪路径
  • CONNECT:已文档化,但当前未实现的一个方法,预留做隧道处理
(GET一般用于获取/查询资源信息,而POST一般用于更新资源信息)

post和get的区别:

都包含请求头请求行,post多了请求body。
get多用来查询,请求参数放在url中,不会对服务器上的内容产生作用。post用来提交,如把账号密码放入body中。
GET是直接添加到URL后面的,直接就可以在URL中看到内容,而POST是放在报文内部的,用户无法直接看到。
GET提交的数据长度是有限制的,因为URL长度有限制,具体的长度限制视浏览器而定。而POST没有。

3.2 请求头部(header)

基本是一些键值对,浏览器与web服务器之间都可以发送,代表特殊的某种含义。

请求的属性,全部为以冒号分割的键值对,请求头只出现在HTTP请求中,请求报头允许客户端向服务器端传递请求的附加信息和客户端自身的信息。

常见请求头:

①Host
       Host请求报头域主要用于指定被请求资源的Interbet主机和端口号(主机或域名地址,对应网址URL中的web名称和端口号)
②User-Agent
       User-Agent请求报头域允许客户端将他的操作系统,浏览器和其他属性告诉服务器(客户浏览器的名称)
③Referer
       Referer包含一个URL,代表当前访问URL的上一个URL,也就是说用户是从什么地方来到当前页面。(这个属性可以用来跟踪web请求是从什么网站来的)

如比从网页/icconcept/index.jsp中点击一个链接到网页/icwork/search,再向服务器发送的GET/icwork/search中的请求中,Referer是http://hostname:8080/icconcept/index.jsp
④Cookies
       Cookies是非常重要的请求头,它通常是是一段文本,常用来表示请求者身份,保存用户会话信息等
⑤Range
       Range可以请求实体的部分内容,多线程下载一定会用到此请求头
X-Forwarded-For
       X-Forwarded-For即XXF头,它代表请求端的IP,可以有多个,中间由逗号隔开
⑦Accept
       如Accept:text/html,表明客户端希望接收HTML文本。(指浏览器或其他客户可以接受的MIME文件格式,servlet可以根据它判断并返回适当的文件格式)
⑧Accept-Charset

  请求报头域用于指定客户端接收的字符集。例如:Accept-Charset:iso-8859-1,gb2312。如果在请求消息中设置这个域,默认是任何字符集都可以接收

Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件传递速度。浏览器在接收到web响应之后再解码,然后再检查文件格式

⑩Content-Type用来表明request的内容类型,可以用HttpServeletRequest的getContentType()方法取得

1 Host: www.baidu.com 2 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0 3 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 4 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 5 Accept-Encoding: gzip, deflate 6 Connection: close 7 Cookie: BAIDUID=DF85C12211175FD67D599BC8A06EB4B2:FG=1; BIDUPSID=DF85C12211175FD6D8AC7AF7356EF11F; PSTM=1571798152; BD_UPN=13314752; COOKIE_SESSION=251208_1_7_5_8_6_0_0_5_5_0_0_251207_0_1_0_1580795676_1580539587_1580795675%7C9%235096250_55_1580539585%7C9; BDRCVFR[Fc9oatPmwxn]=mk3SLVN4HKm; delPer=0; BD_CK_SAM=1; PSINO=1; H_PS_PSSID=1465_21124_26350_30496; H_PS_645EC=d0f32cF5kQJ3ZcmKhkebQhVlmvrVbJe34vcNJntPlQBU7X%2BEF0T1MJCfpt5UZln7q4OU; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BD_HOME=0 8 Upgrade-Insecure-Requests: 1 9 Cache-Control: max-age=0

1|03.3 空行

请求头与请求体之间用一个空行分开,用于区分请求头部信息和请求正文

最后一个请求头标之后是空行,发送回车符和退行,通知服务器以下不再有头标

1|03.4 请求主体(body)

可选部分,比如GET请求就没有请求正文,若方法字段是POST,则通常来说此处放置的就是要提交的数据;

比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456

那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段

username=admin&password=amdin

4|04.HTTP响应报文

1|04.1响应行

响应行一般由协议版本、状态码及其描述组成

例如 HTTP/1.1 200 OK;

其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述

HTTP响应码
1XX:信息,请求收到,继续处理(表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程)
2XX:成功,行为被成功的接收、理解和采纳(表示成功接收请求并已完成整个处理过程。常用200)
3XX:重定向,为了完成请求,必须进一步细化请求或执行的动作(例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存))
4XX:客户端错误(客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够))
5XX:服务器错误
200:存在文件 403:存在文件夹 3XX:均可能存在 404:不存在文件及文件夹 500:均可能存在

常见状态码:

200 OK - 客户端请求成功 301 - 资源(网页等)被永久转移到其它URL 302 - 临时跳转 400 Bad Request - 客户端请求有语法错误,不能被服务器所理解 401 Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 404 - 请求资源不存在,可能是输入了错误的URL 500 - 服务器内部发生了不可预期的错误 503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

1|04.2 响应头

响应头是服务器根据请求向客户端发送的HTTP报头信息

①Server
       服务器所使用的Web服务器名称,如Server:Apache/1.3.6(Unix),攻击者通过查看此头,可以探测web服务器名称。所以,建议服务器端修改此头信息。
②Set-Cookie
       向客户端设置Cookie,通过查看此头,可以清楚看到服务器向客户端发送的Cooie信息。
③Last-Modified
       服务器通过这个头告诉浏览器,资料的最后修改时间。
④Location
       服务器通过这个头告诉浏览器去访问那个页面,浏览器接收到这个请求之后,通常会立刻访问localtion头所指向的页面。这个头通常配合302状态码使用。
⑤Refresh
       服务器通过Refresh头告诉浏览器定时刷新浏览器。

 

普通头:在普通报头中,有少数报头域用于所有请求和响应消息 ,但并不用于被传输的实体,只用于传输的消息。

例如:

Date,表示消息产生的日期和时间。 Connection,允许发送指定连接的选项。例如,指定连接是连续的,或者指定连接“close”选项,通知服务器,在响应完成后,关闭连接。 Cache-Control,用于指定缓存指令,缓存指令是单向的,且是独立的。

 

实体头:请求和响应消息都可以传送一个实体头。实体头定义了关于实体正文和请求所表示的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。常见的实体头如下。

Content-Type
       Content-Type实体头用于向接收方指示实体的介质类型。
Content-Encoding
       Content-Encoding头被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得中Content-Type报头域所引用的媒体类型,必须采用相应的解码机制。
Content-Length
       Content-Length实体报头用于指明实体正文的长度,以字节方式储存的十进制数字来表示。
Last-Modified
       Last-Modified实体报头用于指示资源的最后修改日期和时间。

常见的Content-Type:

1|04.3 空行

同请求报文空行作用

1|04.4 相应主体(body体)

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码。

 

5|05.HTTP协议与HTTPS协议的区别

       HTTPS协议是以安全为目标的HTTP通道,其实就是HTTP的“升级”版本,只是它单纯的比HTTP协议更安全。

    • https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
    • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份    认证的网络协议,比http协议安全。

HTTP协议与HTTPS协议的主要区别如下:

HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。 HTTP与HTTPS协议使用的是完全不同的连接方式,HTTP采用80端口连接,而HTTPS则是443端口。 HTTPS协议需要到ca申请证书,一般免费的证书很少,需要交费,也有些web容器提供,如TOMCAT。而HTTP协议却不需要。 HTTP连接相对简单,是无状态的,而HTTPS协议是由SSL+HTTP协议构建的课进行加密传输、身份认证的网络协议,相对来说,它要比HTTP协议更安全。

HTTP和HTTPS的简要通信过程
(1)HTTP通信过程
建立链接——>发送请求数据包——>返回响应数据包——>关闭连接

1.浏览器建立与web服务器直接的连接

2.浏览器将请求数据打包(生成请求数据包)并发送到web服务器

3.web服务器将处理结果打包(生成响应数据包)并发送给浏览器

4.web服务器关闭连接

(2)HTTPS通信过程

 

 


 


__EOF__

本文作者
本文链接https://www.cnblogs.com/icml8/p/15986561.html
关于博主:ICML0X824
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ICML0X824  阅读(184)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示