首页 > 其他分享 >HTTP协议入门

HTTP协议入门

时间:2024-08-30 13:05:16浏览次数:3  
标签:协议 1.0 入门 请求 TCP Content HTTP 客户端

HTTP协议入门

参考:http://www.ruanyifeng.com/blog/2016/08/http.html

 

 

 

 

 

 

一、HTTP/0.9

HTTP是基于TCP/IP协议的应用层协议。它不涉及数据包传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

最早版本是1991年发布的0.9版。该版本及其简单,只有一个命令`GET`

GET /index.html

上面命令表示,TCP连接(connection)建立后,客户端向服务器请求(request)网页index.html

协议规定,服务器只能回应HTML格式的字符串,不能回应别的格式。

<html>
    <body>Hello World</body>
</html>

服务器发送完毕,就关闭TCP连接。

 

二、HTTP/1.0

简介

1996年5月,HTTP/1.0版本发布,内容大大增加。

首先,任何格式的内容都可以发送。这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。这为互联网的大发展奠定了基础。

 

其次,除了GET命令,还引入了POST命令和HEAD命令,丰富了浏览器与服务器的互动手段。

 

再次,HTTP请求和回应的格式也变了。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。

 

其他的新增功能还包括:

  • 状态码(status code)
  • 多字符集支持
  • 多部分发送(multi-part type)
  • 权限(authorization)
  • 缓存(cache)
  • 内容编码(content encoding)等

 

请求格式

下面是一个1.0版本的HTTP请求的例子

GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*

第一行是请求命令,必须在尾部添加协议版本(HTTP/1.0),后面就是多行头信息,描述客户端的情况。

 

回应格式

服务器的回应如下:

HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5, August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
    <body>Hello World</body>
</html>

回应的格式是“头信息 + 一个空行(\r\n)+数据”。其中,第一行是“协议版本 + 状态码(status code) + 状态描述”。

 

Content-Type字段

关于字符的编码,1.0版本规定,头信息必须是ASCII码,后面的数据可以是任何格式。因此,服务器回应的时候,必须告诉客户端,数据是什么格式,这就是Content-Type字段的作用。

 

下面是一些常见的Content-Type字段的值

  • text/plain
  • text/html
  • text/css
  • image/jpeg
  • image/png
  • image/svg+xml
  • audio/mp4
  • video/mp4
  • application/javascript
  • application/pdf
  • application/zip
  • application/atom+xml

 

这些数据类型总称为MIME type,每个值包括一级类型和二级类型,之间用斜杠分隔。

 

除了预定义的类型,厂商也可以自定义类型

application/vnd.debian.binary-package

上面的类型表明,发送的是Debian系统的二进制数据包

MIME type还可以在尾部使用分号,添加参数

Content-Type: text/html; charset=utf-8

上面的类型表明,发送的是网页,而且编码是UTF-8

 

客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。

Accept: */*

上面代码中,客户端声明自己可以接受任何格式的数据。

MIME type不仅用在HTTP协议,还可以用在其他地方,比如HTML网页。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- 等同于 --->
<meta charset="utf-8" />

 

Content-Encoding字段

由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法

Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate

客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法

Accept-Encoding: gzip, deflate

 

缺点

HTTP/1.0版的主要缺点是,每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

 

TCP连接的新建成本很高,因为需要客户端和服务端三次握手,并且开始时发送速率较慢。所以,HTTP 1.0版本的性能较差。随着网页加载的外部资源越来越多,这个问题就愈发突出了。

 

为了解决这个问题,有些浏览器在请求时,用了一个非标准的Connection字段

Connection: keep-alive

这个字段要求服务器不要关闭TCP连接,以便其他请求复用。服务器同样回应这个字段。

Connection: keep-alive

一个可以复用的TCP连接就建立了,直到客户端或服务器主动关闭连接。但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。

 

三、HTTP/1.1

1997年1月,HTTP/1.1版本发布,只比1.0版本晚了半年。它进一步完善了HTTP协议,一直用到了20年后的今天,直到现在还是最流行的版本。

持久连接

1.1版的最大变化,就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive

客户端和服务端发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。

Connection: close

目前,对于同一个域名,大多数浏览器允许同时建立6个持久连接。

 

HTTP2的主要目标是通过支持完整的请求与响应复用来减少延迟,通过有效压缩HTTP标头字段将协议开销降至最低,同时增加对请求优先级和服务器推送的支持。

标签:协议,1.0,入门,请求,TCP,Content,HTTP,客户端
From: https://www.cnblogs.com/cathy1024/p/14012211.html

相关文章

  • 投屏协议
    AirPlay协议是苹果开发、广泛应用于iPhone、iPad和Mac设备,可以通过WiFi将iPhone、iPad等iOS设备上的图片、音频、视频通过无线的方式传输到支持AirPlay设备。即移动终端显示什么电视大屏就显示什么。随着AirPlay协议逐步普及,国内越来越多网络机顶盒,智能电视都集成了AirPlay协议。......
  • 快充协议方案 TYPE-C口取电支持PD5V、 9V、 12V、 15V、 20V
    Type-C口的充电器,一般是PD协议的充电器,例如华为65W,iPhone20W,小米45W充电器等等,这种充电器具有电压范围广,电流大,充电速度快等特点,一个充电器可以支持多种设备使用的优点。PD充电器的电压一般有5V、9V、12V、15V、20V,所有可以满足手机,ipad、平板和笔记本电脑使用,但是,这种充电器......
  • PD取电协议芯片 XSP08Q集成全协议芯片
    1:Type-C接口应用很广泛,几乎可以覆盖各行各业,例如快充领域,多种快充协议都可以在Type-C接口上实现,在用电端,只需要使用XSP08取电协议控制芯片,即可获取各种快充电压,例如:1、PowerDelivery(USB-PD)协议2、QC快充协议3、三星AFC快充协议4、华为快充协议等等2:在用电端的Type-C接口......
  • 快充协议方案——XSP04集成多种快充协议芯片
    快充协议芯片作为现代充电技术的核心组件,通过智能协商和动态调整电压电流,实现了快速、安全、高效的充电体验快充协议芯片的工作原理主要涉及识别充电设备、建立通信协议以及快速充电控制。这些芯片通过与充电设备的通信,识别出设备的充电需求和最大安全充电电流,然后根据这些信......
  • Python编程实战营:四款实用小项目助你快速入门,从零开始打造你的个人项目集!
    踏入编程世界的门槛,总是伴随着既兴奋又忐忑的心情。作为Python的新手,你是否渴望通过实际项目来巩固知识、提升技能?本篇文章将引领你踏上一段从理论到实践的精彩旅程,通过四个精心设计的项目,让你在趣味与挑战中快速成长。项目一:简易文本编辑器首先,我们将从基础出发,动手打造一......
  • https通信过程
    转自:https://zhuanlan.zhihu.com/p/692295428 HTTPS的通信过程可以简单分为以下几个步骤:客户端发起连接请求:客户端向服务器发送HTTPS请求,请求连接到服务器的HTTPS端口(默认是443端口)。服务器返回证书:服务器在接收到客户端的连接请求后,会将自己的数字证书发送给客户端。......
  • LLaMA-Factory微调入门个人重制版
    LLaMA-Factory微调入门个人重制版说明:首次发表日期:2024-08-30LLaMA-Factory官方Github仓库:https://github.com/hiyouga/LLaMA-Factory关于本文是对LLaMA-Factory入门教程https://zhuanlan.zhihu.com/p/695287607的个人重制版,记录一下学习过程,省略掉了很多文字部分,建议......
  • 如何提取用C#语言写的接口(http)里的内容
    这段Kotlin代码定义了一个用于发起HTTP请求的异步函数和相关的数据模型。下面是对代码的详细解析,包括每个部分的功能和工作原理。代码解析1.Response数据类dataclassResponse(vardata:JSONObject=JSONObject(),varlist:JSONArray=JSONArray(),v......
  • Pearson相关性分析 —— 入门案例
    简介Pearson相关系数Pearson相关系数是一种统计方法,用于衡量两个连续变量之间的线性相关程度。Pearson相关系数的值范围从-1到1,其中:接近1的值表示两个变量之间存在强正线性关系。接近-1的值表示两个变量之间存在强负线性关系。接近0的值表示两个变量之间没有线性关系。Pea......
  • Datawhale X 李宏毅苹果书(入门) AI夏令营 task02笔记
    官方学习文档:https://linklearner.com/activity/16/14/55往期task01链接:https://mp.csdn.net/mp_blog/creation/editor/141535616李宏毅老师对应视频课程可供食用:https://www.bilibili.com/video/BV1JA411c7VT/?p=3机器学习基础线性模型        w跟b的值上期ta......