目录

1.什么是 HTTP(超文本传输) 协议 ?

2.HTTP的操作过程

3.统一资源定位符URL

一个具体的url:

4.HTTP报文结构

通过fiddler抓包来查看http报文的结构

5.认识方法 (method)

1.GET方法

2.post方法

GET 和 POST 的区别?

6.认识状态码

状态码小结

7.认识请求"报头"(header)

1.Host

2.Content-Length

3.Content-Type

4.User-Agent(UA)

5.Referer

6.cookie

8.HTTP 和 HTTPS


1.什么是 HTTP(超文本传输) 协议 ?

HTTP协议定义了浏览器(即万维网客户进程)怎样向万维网服务器轻请求万维网文档,以及服务器怎样把文档传送给浏览器。简单来说,就是客户端和服务器进行数据传输的一种规则。

目前大部分的 HTTP 都是基于TCP进行传输的

注意:服务器和客户端并不是固定的!!!

HTTP 是 无状态的。意思就是,同一个客户端第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问的页面相同(假定页面没有进行更新)。HTTP的无状态见花开服务器的设计,是的服务器能支持大量的HTTP请求。

由于HTTP是无状态的,这就使得服务器并不记得这个曾经访问过他的客户端,然而在实际工作中,一些万维网站点却常常希望能够识别用户,所以就引入了 cookie

2.HTTP的操作过程

每个万维网网点都有一个服务器进程,他不断监听TCP的端口80,以便发现是否有浏览器(客户端)向他发出连接建立请求。一旦监听到连接建立请求并建立了TCP连接后,浏览器(客户端)就向服务器发出浏览器某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP连接就被释放了。在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传输协议HTTP。

3.统一资源定位符URL

URL包含了用于查找某个资源的足够的信息,是互联网上用来标识某一处资源的具体地址,相当于本地文件路径中的绝对路径,互联网上的每个文件都有一个唯一的URL。

简单来说一个网址,就是一个URL

一般由四个部分组成:<协议>://<主机>:<端口>/<路径>

一个具体的url:


4.HTTP报文结构

HTTP有两类报文:

1.请求报文:从客户端向服务器发送请求报文

2.响应报文:从服务器到客户端的回答

通过fiddler抓包来查看http报文的结构

fiddler是专门用来抓取http的一种抓包工具,具体用法也就不细说了,将下载地址写在下方了

Download Fiddler Web Debugging Tool for Free by Telerik

打开Fiddler,访问百度页面,观察抓包结果

1.初始页面

2.打开百度

3.截取一段请求

4.截取一段响应


5.认识方法 (method)

方法位于http请求的首行,大部分都是 GET 和 POST 两种方法

1.GET方法

GET 是做常用的HTTP方法,常用于获取服务器上的某个资源,在浏览器中直接输入URL ,此时浏览器就会发送一个GET请求,另外,HTML中的link,img,script等标签,也会触发请求

特点:

  • 首行的第一被分为GET
  • URL的 query string 可以为空,也可以不为空
  • header部分有若干个键值对结构
  • body部分为空

关于 GET 请求的 URL 长度问题
网上有些资料上描述: get请求长度最多1024kb 这样的说法是错误的.
HTTP 协议由 RFC 2616 标准定义, 标准原文中明确说明: "Hypertext Transfer Protocol --
HTTP/1.1," does not specify any requirement for URL length.
没有对 URL 的长度有任何的限制.
实际 URL 的长度取决于浏览器的实现和 HTTP 服务器端的实现. 在浏览器端, 不同的浏览器最大长度是不同的, 但是现代浏览器支持的长度一般都很长; 在服务器端, 一般这个长度是可以配置的.

2.post方法

POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面).
通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript 的 ajax 也可以构造 POST 请求.

特点:

  • 首行的第一部分为POST
  • URL 的 query string 一般为空 (也可以不为空)
  • header部分有若干个键值对
  • body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由header 中的 Content-Length 指定.

GET 和 POST 的区别?

  • 语义不同: GET 一般用于获取数据, POST 一般用于提交数据
  • GET 的 body 一般为空, 需要传递的数据通过 query string 传递, POST 的 query string 一般
    为空, 需要传递的数据通过 body 传递
  • GET 可以被缓存, POST 不能被缓存. (这一点也是承接幂等性)

补充:

  • 关于语义: GET 完全可以用于提交数据, POST 也完全可以用于获取数据
  • 关于幂等性: 标准建议 GET 实现为幂等的. 实际开发中 GET 也不必完全遵守这个规则(主流网
    站都有 "猜你喜欢" 功能, 会根据用户的历史行为实时更新现有的结果
  • 关于安全性: 有些资料上说 "POST 比 GET 请安全". 这样的说法是不科学的. 是否安全取决于
    前端在传输密码等敏感信息时是否进行加密, 和 GET POST 无关
  • 关于传输数据量: 有的资料上说 "GET 传输的数据量小, POST 传输数据量大". 这个也是不科
    学的, 标准没有规定 GET 的 URL 的长度, 也没有规定 POST 的 body 的长度. 传输数据量多少,
    完全取决于不同浏览器和不同服务器之间的实现区别
  • 关于传输数据类型: 有的资料上说 "GET 只能传输文本数据, POST 可以传输二进制数据". 这
    个也是不科学的. GET 的 query string 虽然无法直接传输二进制数据, 但是可以针对二进制数
    据进行 url encode

6.认识状态码

我们可以在上面的抓包结果的响应中看到状态码。状态码表示访问一个页面的结果

以下为常见的状态码:

1.200 ok

这是一个最常见的状态码, 表示访问成功

2.404 Not Found

表示没有找到资源

3.403 Forbidden

表述被拒绝访问,有的页面通常需要用户具有一定的权限才能进行访问

4.405 Method Not Allowed

前面我们已经学习了 HTTP 中所支持的方法, 有 GET, POST, PUT, DELETE 等.
但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法)

5.500 Internal Server Error
服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码

6.504 Gateway Timeout
当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况

7.302 Move temporarily(重定向)

在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页.
响应报文的 header 部分会包含一个 Location 字段, 表示要跳转到哪个页面.

理解 "重定向"
就相当于手机号码中的 "呼叫转移" 功能.
比如我本来的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码,
只要我去办理一个呼叫转移业务, 其他人拨打 186-1234-5678 , 就会自动转移到 135-1234-5678上

8.301 Moved Permanently

永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址.
301 也是通过 Location 字段来表示要重定向到的新地址

状态码小结


7.认识请求"报头"(header)

header的整体也是一种键值对形式,键和值之间使用 :+ 空格 形式分开。请求头封装了有关客户端的请求信息。

请求头的种类有很多,这里就介绍几种

1.Host

表示服务器的地址和端口

2.Content-Length

表示body的长度

3.Content-Type

表示body中的数据格式

常见的几种格式有:

  • application/x-www-form-urlencoded   form表单提交的数据格式,此时数据格式形如
title=test&content=hello
  • title=test&content=hello

在form标签中添加 enctyped="multipart/form-data         形如以下形式

<form action="http://localhost:8000/" method="post" enctype="multipart/form-data"><label>Name: <input name="myTextField" value="Test"></label><label><input type="checkbox" name="myCheckBox"> Check</label><label>Upload file: <input type="file" name="myFile" value="test.txt"></label><button>Send the file</button>
</form>

body形式如下:

Content-Type:multipart/form-data; boundary=----
WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
  • application/json  body的数据格式为json
{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16
a861fa2bddfdcd15"}

4.User-Agent(UA)

表示浏览器的属性和系统

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/91.0.4472.77 Safari/537.36

5.Referer

表示这个页面从哪里来

如果直接在浏览器中输入URL, 或者直接通过收藏夹访问页面时是没有 Referer 的 

6.cookie

Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据)

cookie也可使通过浏览器页面直接的删除


8.HTTP 和 HTTPS

首先来认识HTTP 的一些不足之处

  • 通信是使用明文(不加密),可能会被窃听
  • 不需要验证通信方的身份,因此可能是中间人的伪装
  • 无法验证报文的完整性,因此可能被篡改

认识一下 HTTPS

HTTP和HTTPS是一对孪生兄弟,HTTPS是通过HTTP和SSL或TSL进行组合加密,使得HTTP传输更加的安全。简单的说HTTPS就是HTTP的安全版

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

1.传统的http协议通信:传统的http报文是直接将报文信息传送给tcp,tcp在通过套接字一步步的传送给目的主机

2.HTTPS协议通信:HTTPS是HTTP报文直接将报文信息传输给SSL套接字进行加密,SSL加密后将加密后的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机将通过TCP套接字获取加密后的报文给SSL套接字,SSL解密后交给对应进程

加密形如下图:

关于加密的具体信息可以参考以下文章:

彻底搞懂HTTPS的加密原理 - 知乎 (zhihu.com)

一文读懂 HTTP(超文本传输)协议相关推荐

  1. 一文读懂物联网 MQTT 协议之实战篇

    一.前言 上一篇我们介绍了 MQTT 协议格式以及相关的特性:一文读懂物联网 MQTT 协议之基础特性篇,这一篇我们就来实战一番,理论得与实践结合,方能吃透 MQTT. 我的那个读者还提到了讲一下 M ...

  2. 为什么浏览器会提示网站“不安全”?一文读懂https协议与SSL证书

            为什么浏览器会提示网站"不安全"?从浏览器的"不安全"提示来详细了解https与SSL证书 我们打开很多http网站时候,会看到浏览器提示&qu ...

  3. 带你一文看懂--应用层、传输层的协议,HTTP协议及实现,UDP和TCP的报文格式以及为什么3次握手和4次挥手

    网络基础:TCP/IP四层模型中的典型协议--理解网络通信的流程原理 应用层协议:负责应用程序之间的数据沟通 网络版计算器:客户端向服务端传递两个数字以及一个运算符,服务端收到数据进行解析得到数字与运 ...

  4. 一文读懂HTTP/2及HTTP/3特性

    前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何优雅降级应该是国内还不普遍使用的原因之一. 虽然 ...

  5. 一文读懂 HTTPS 与 TLS证书链校验

    一文读懂 HTTPS 与 TLS证书链校验 前一段时间在看X.509证书结构 与 TLS证书校验链相关知识,到今天感觉基本了解清楚,想着写一篇文章记录学习心得. 在实际工作中,涉及到X.509证书结构 ...

  6. HTTP超文本传输协议-HTTP/1.1中文版

    HTTP超文本传输协议-HTTP/1.1中文版 摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了 ...

  7. (转载)HTTP超文本传输协议-HTTP/1.1中文版

    HTTP超文本传输协议-HTTP/1.1中文版 摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了 ...

  8. 一文读懂大数据平台——写给大数据开发初学者的话!

     一文读懂大数据平台--写给大数据开发初学者的话! 文|miao君 导读: 第一章:初识Hadoop 第二章:更高效的WordCount 第三章:把别处的数据搞到Hadoop上 第四章:把Hado ...

  9. 一文读懂HttpServletRequest

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 全网最全电子图书分享 你所需要的大数据视频 ...

最新文章

  1. (原)使用mkl计算特征值和特征向量
  2. 迄今为止程序员写过的最大Bug:亏损30亿、致6人死亡,甚至差点毁灭世界
  3. 网络不通 从“本地连接”中找问题
  4. c#写图像tif gdal_C# GDAL显示TIF
  5. java int == integer_java int与integer的区别
  6. tomcat https 配置
  7. SQL查询【根据生日计算】
  8. 二阶振荡环节的谐振频率_晶体振荡器和谐振器的区别 555压控振荡器电路图
  9. Nim游戏(初谈博弈)
  10. 代码里无图片地址_项目实战:爬高清图片
  11. JLink和JFlash使用方法笔记
  12. WPS Office 2005的评议
  13. QTreeView 和QTreeWidget
  14. 2017中国产品经理大会总结-我又开始相信可以改变世界了
  15. 用计算机和电视机组成家庭影院,如何让我的电脑连上我的家庭影院?
  16. vue通过子组件修改父组件prop的几种实现方式
  17. thinkadmin默认ckeditor富文本配置修改
  18. 赢富博易告诉你成功交易者的基本素质
  19. wmware网络模式
  20. Jmeter(三) - 从入门到上天 - 常用原件 (详解教程)

热门文章

  1. 联通校园网不能开热点问题解决办法
  2. win10系统截图快捷键
  3. 关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFa
  4. QlikView学习笔记
  5. Oracle Database XE(免费)的数据库下载安装使用教程-第一篇
  6. sin n次方 x 的降幂公式
  7. ps图案叠加怎么添加图案?Photoshop图案如何使用?
  8. linux 解压rar压缩包
  9. SAP 固定资产主数据
  10. 一个人靠不靠谱,就看这 8 个细节