Skip to content

HTTP

mdn/web/http

HTTP, Hypertext Transfer Protocol 超文本传输协议

HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议,也就是说,请求是由接受方——通常是 Web 浏览器——发起的。完整网页文档通常由文本、布局描述、图片、视频、脚本等资源构成。

客户端与服务端之间通过交换一个个独立的消息(而非数据流)进行通信。由客户端发出的消息被称作请求(request),由服务端发出的应答消息被称作响应(response)。

HTML, Hypertext Mark Language 超文本标记语言

HTML 定义了网页内容的含义和结构。除 HTML 以外的其他技术则通常用来描述一个网页的表现与展示效果(如 CSS),或功能与行为(如 JavaScript)。

“超文本”(hypertext)是指连接单个网站内或多个网站间的网页的链接。链接是网络的一个基本方面。只要将内容上传到互联网,并将其与他人创建的页面相链接,你就成为了万维网的积极参与者。

HTTP 系统组成

HTTP 是一个客户端—服务器协议:请求由一个实体,即用户代理(user agent),或是一个可以代表它的代理方(proxy)发出。大多数情况下,这个用户代理都是一个 Web 浏览器,不过它也可能是任何东西,比如一个爬取网页来充实、维护搜索引擎索引的机器爬虫。

每个请求都会被发送到一个服务器,它会处理这个请求并提供一个称作响应的回复。在客户端与服务器之间,还有许许多多的被称为代理的实体,履行不同的作用,例如充当网关或缓存。

  • 客户端/用户代理

    用户代理是任何能够代表用户行为的工具。这类工具以浏览器为主,不过,它也可能是工程师和 Web 开发人员调试应用所使用的那些程序。

  • Web 服务器

    通信过程的另一侧是服务器,它负责_提供_客户端所请求的文档。

  • 代理

    在 Web 浏览器和服务器之间,有许多计算机和设备参与传递了 HTTP 消息。依靠 Web 技术栈的层次化的结构,传递过程中的多数操作都位于传输层、网络层或物理层,它们对于 HTTP 应用层而言就是透明的,并默默地对网络性能产生着重要影响。还有一部分实体在应用层参与消息传递,一般被称为代理(Proxy)。代理可以是透明的,即转发它们收到的请求并不做任何修改,也可以表现得不透明,将它传递给服务端之前使用一些手段修改这个请求。代理可以发挥很多种作用:

    • 缓存(可以是公开的也可以是私有的,如浏览器的缓存)
    • 过滤(如反病毒扫描、家长控制...)
    • 负载均衡(让多个服务器服务不同的请求)
    • 认证(控制对不同资源的访问)
    • 日志(使得代理可以存储历史信息)

HTTP 基本性质

  • 简约

    HTTP 报文能够被人读懂并理解,向开发者提供了更简单的测试方式

  • 可扩展

    HTTP/1.0 中引入的 HTTP Headers 让该协议易于扩展和实验。只要服务器客户端之间对新标头的语义经过简单协商,新功能就可以被加入进来。

  • 无状态,但并非无会话

    无状态,在同一个连接中,两个执行成功的请求之间是没有关系的;会话,利用标头的扩展性,HTTP Cookie 被加进了协议工作流程,每个请求之间就能够创建会话,让每个请求都能共享相同的上下文信息或相同的状态。

HTTP 流

    1. 打开一个 TCP 连接:TCP 连接被用来发送一条或多条请求,以及接受响应消息。客户端可能打开一条新的连接,或重用一个已经存在的连接,或者也可能开几个新的与服务器的 TCP 连接。
  • 2.发送一个 HTTP 报文:HTTP 报文(在 HTTP/2 之前)是人类可读的。在 HTTP/2 中,这些简单的消息被封装在了帧中,这使得报文不能被直接读取,但是原理仍是相同的。

  • 3.读取服务端返回的报文信息

  • 4.关闭连接或者为后续请求重用连接。

    当启用 HTTP 流水线时,后续请求都可以直接发送,而不用等待第一个响应被全部接收。然而 HTTP 流水线已被证明很难在现有的网络中实现,因为现有网络中有老旧的软件与现代版本的软件同时存在。因此,HTTP 流水线已在 HTTP/2 中被更健壮、使用帧的多路复用请求所取代。

HTTP 请求报文

http
<Method> <Path> <Protocol version>
<Headers>
[Body]

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr

HTTP 响应报文

http
<Protocol version> <Status code> <Status message>
<Headers>
[Body]

HTTP/1.1 200 OK
date: Tue, 18 JUN 2024 10:03:55 GMT
cache-control: public, max-age=3600
control-type: text/html

HTTP 的发展

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/Evolution_of_HTTP

  • HTTP/0.9——单行协议
  • HTTP/1.0——构建可扩展性
  • HTTP/1.1——标准化的协议
  • HTTP/2 ——为了更有意的表现
  • HTTP/3 ——基于QUIC 的 HTTP

HTTP Method

HTTP 定义了一组请求方法,以表明要对给定资源执行的操作。指示针对给定资源要执行的期望动作。虽然它们也可以是名词,但这些请求方法有时被称为 HTTP 动词

  • 安全

    如果说一个 HTTP 方法是安全的,是指这是个不会修改服务器的数据的方法。也就是说,这是一个对服务器只读操作的方法。

  • 幂等

    如果同样的请求被执行一次与连续执行多次,对服务器的预期影响是相同的,那么称这个 HTTP 方法是幂等的。

  • 可缓存

    可缓存的响应是可以缓存的 HTTP 响应。它被存储起来以便后续的检索和使用,省去了对服务器的新的请求。

IdxMethodRequest BodyResponse Body安全幂等可缓存HTML 表单中使用Desc
1GETxooooo请求指定资源的表示。使用 GET 的请求应该只用于请求数据,而不应该包含载荷。
2HEADxxooox请求一个与 GET 请求的响应相同的响应,但没有响应体。
3POSTooxxoo发送数据给服务器。请求主体的类型由Content-Type标头指定。
4PUTooxoox用有效载荷请求替换目标资源的所有当前表示。
5DELETEooxoxx删除指定的资源。
6CONNECTxxxxxx建立一个到由目标资源标识的服务器的隧道。
7OPTIONSooooxx用于描述目标资源的通信选项。
8TRACExoooxx沿着到目标资源的路径执行一个消息环回测试。
9PATCHooxxxx用于对资源应用部分修改。

HTTP response status code

status codeDesc
100-199信息响应
200-299成功响应
300-399重定向消息
400-499客户端错误响应
500-599服务端错误响应
status code
100continue这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。
101switching protocols该代码是响应客户端的 Upgrade 请求头发送的,指明服务器即将切换的协议。
102processing此代码表示服务器已收到并正在处理该请求,但当前没有响应可用。
103early hints此状态代码主要用于与 Link 链接头一起使用,以允许用户代理在服务器准备响应阶段时开始预加载 preloading 资源。
200ok
201created
202accepted
203non-authoritative information
204not content对于该请求没有的内容可发送,但头部字段可能有用。用户代理可能会用此时请求头部信息来更新原来资源的头部缓存字段。
205reset content告诉用户代理重置发送此请求的文档。
206partial content当从客户端发送Range范围标头以只请求资源的一部分时,将使用此响应代码。
207multi-status对于多个状态代码都可能合适的情况,传输有关多个资源的信息。
226im used服务器已经完成了对资源的GET请求,并且响应是对当前实例应用的一个或多个实例操作结果的表示。
300multiple choice请求拥有多个可能的响应。用户代理或者用户应当从中选择一个。(没有标准化的方法来选择其中一个响应,但是建议使用指向可能性的 HTML 链接,以便用户可以选择。)
301moved permanently请求资源的 URL 已永久更改。在响应中给出了新的 URL。
302found此响应代码表示所请求资源的 URI 已 暂时 更改。未来可能会对 URI 进行进一步的改变。因此,客户机应该在将来的请求中使用这个相同的 URI。
303see other服务器发送此响应,以指示客户端通过一个 GET 请求在另一个 URI 中获取所请求的资源。
304not modified这是用于缓存的目的。它告诉客户端响应还没有被修改,因此客户端可以继续使用相同的缓存版本的响应。
305use proxy在 HTTP 规范中定义,以指示请求的响应必须被代理访问。由于对代理的带内配置的安全考虑,它已被弃用。
306unused此响应代码不再使用;它只是保留。它曾在 HTTP/1.1 规范的早期版本中使用过。
307temporary redirect服务器发送此响应,以指示客户端使用在前一个请求中使用的相同方法在另一个 URI 上获取所请求的资源。这与 302 Found HTTP 响应代码具有相同的语义,但用户代理 不能 更改所使用的 HTTP 方法:如果在第一个请求中使用了 POST,则在第二个请求中必须使用 POST
308permanent redirect这意味着资源现在永久位于由Location: HTTP Response 标头指定的另一个 URI。这与 301 Moved Permanently HTTP 响应代码具有相同的语义,但用户代理不能更改所使用的 HTTP 方法:如果在第一个请求中使用 POST,则必须在第二个请求中使用 POST
400bad request由于被认为是客户端错误(例如,错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或不会处理请求。
401unauthorized虽然 HTTP 标准指定了"unauthorized",但从语义上来说,这个响应意味着"unauthenticated"。也就是说,客户端必须对自身进行身份验证才能获得请求的响应。
402payment required此响应代码保留供将来使用。创建此代码的最初目的是将其用于数字支付系统,但是此状态代码很少使用,并且不存在标准约定。
403forbidden客户端没有访问内容的权限;也就是说,它是未经授权的,因此服务器拒绝提供请求的资源。与 401 Unauthorized 不同,服务器知道客户端的身份。
404not found服务器找不到请求的资源。在浏览器中,这意味着无法识别 URL。在 API 中,这也可能意味着端点有效,但资源本身不存在。服务器也可以发送此响应,而不是 403 Forbidden,以向未经授权的客户端隐藏资源的存在。这个响应代码可能是最广为人知的,因为它经常出现在网络上。
405method not allowed服务器知道请求方法,但目标资源不支持该方法。例如,API 可能不允许调用DELETE来删除资源。
406not acceptable当 web 服务器在执行服务端驱动型内容协商机制后,没有发现任何符合用户代理给定标准的内容时,就会发送此响应。
407proxy authentication required类似于 401 Unauthorized 但是认证需要由代理完成
408request timeout此响应由一些服务器在空闲连接上发送,即使客户端之前没有任何请求。这意味着服务器想关闭这个未使用的连接。由于一些浏览器,如 Chrome、Firefox 27+ 或 IE9,使用 HTTP 预连接机制来加速冲浪,所以这种响应被使用得更多。还要注意的是,有些服务器只是关闭了连接而没有发送此消息
409conflict当请求与服务器的当前状态冲突时,将发送此响应。
410gone当请求的内容已从服务器中永久删除且没有转发地址时,将发送此响应。客户端需要删除缓存和指向资源的链接。HTTP 规范打算将此状态代码用于“有限时间的促销服务”。API 不应被迫指出已使用此状态代码删除的资源。
411length required服务端拒绝该请求因为 Content-Length 头部字段未定义但是服务端需要它。
412precondition failed客户端在其头文件中指出了服务器不满足的先决条件。
413payload too large请求实体大于服务器定义的限制。服务器可能会关闭连接,或在标头字段后返回重试 Retry-After
414uri too long客户端请求的 URI 比服务器愿意接收的长度长。
415unsupported media type服务器不支持请求数据的媒体格式,因此服务器拒绝请求。
416range not satisfiable无法满足请求中 Range 标头字段指定的范围。该范围可能超出了目标 URI 数据的大小。
417expectation failed此响应代码表示服务器无法满足 Expect 请求标头字段所指示的期望。
418i'm a teapot服务端拒绝用茶壶煮咖啡。笑话,典故来源茶壶冲泡咖啡
421misdirected request请求被定向到无法生成响应的服务器。这可以由未配置为针对请求 URI 中包含的方案和权限组合生成响应的服务器发送。
422unprocessable entity请求格式正确,但由于语义错误而无法遵循。
423locked正在访问的资源已锁定。
424failed dependency由于前一个请求失败,请求失败。
425too early表示服务器不愿意冒险处理可能被重播的请求。
426upgrade required服务器拒绝使用当前协议执行请求,但在客户端升级到其他协议后可能愿意这样做。 服务端发送带有Upgrade 字段的 426 响应 来表明它所需的协议(们)。
428precondition required源服务器要求请求是有条件的。此响应旨在防止'丢失更新'问题,即当第三方修改服务器上的状态时,客户端 GET 获取资源的状态,对其进行修改并将其 PUT 放回服务器,从而导致冲突。
429too many requests用户在给定的时间内发送了太多请求("限制请求速率")
431request header fields too large服务器不愿意处理请求,因为其头字段太大。在减小请求头字段的大小后,可以重新提交请求。
451unavailable for legal reasons用户代理请求了无法合法提供的资源,例如政府审查的网页。
500internal server error服务器遇到了不知道如何处理的情况。
501not implemented服务器不支持请求方法,因此无法处理。服务器需要支持的唯二方法(因此不能返回此代码)是 GET and HEAD.
502bad gateway此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。
503service unavailable服务器没有准备好处理请求。常见原因是服务器因维护或重载而停机。请注意,与此响应一起,应发送解释问题的用户友好页面。这个响应应该用于临时条件和如果可能的话,HTTP 标头 Retry-After 字段应该包含恢复服务之前的估计时间。网站管理员还必须注意与此响应一起发送的与缓存相关的标头,因为这些临时条件响应通常不应被缓存。
504gateway timeout当服务器充当网关且无法及时获得响应时,会给出此错误响应。
505HTTP version not supported服务器不支持请求中使用的 HTTP 版本。
506variant also negotiates服务器存在内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的适当终点。
507insufficient storage无法在资源上执行该方法,因为服务器无法存储成功完成请求所需的表示。
508loop detected服务器在处理请求时检测到无限循环。
510not extended服务器需要对请求进行进一步扩展才能完成请求。
511network authentication required指示客户端需要进行身份验证才能获得网络访问权限。

HTTP Header

HTTP header 允许客户端和服务器通过 HTTP 请求(request)或者响应(response)传递附加信息。

Request Headers

HeaderDesc
Host请求的服务器的域名和端口号(HTTP/1.1 规范要求必须包含)
User-Agent包含发出请求的客户端应用程序信息(如浏览器类型、操作系统等)。
Accept通知服务器可以发回的数据类型
Accept-Language通知希望服务器返回的人类语言。
Accept-Encoding可用于返回的资源的编码算法,通常是压缩算法
Referer前一个网页的地址,表示从该网页链接(进入)到当前请求的页面。
Connection控制当前事务完成后网络连接是否保持打开状态。
Upgrade-Insecure-Requests
If-Modified-Since使请求有条件,并期望资源在给定日期后被修改时才请求传输该资源。这用于仅在缓存过期时传输数据。
If-None-Match使请求有条件,并且仅当存储的资源与给定的 ETag 都_不_匹配时才应用该方法。这用于更新缓存(用于安全请求),或防止在资源已存在时上传新资源
Cache-Control请求和响应中缓存机制的指令。
OriginWeb 内容的由用于访问它的 URL 的_方案_(协议)、主机名(域名)和_端口_定义。只有当协议、主机和端口都匹配时,两个对象才具有相同的源。
Cookie包含先前由服务器使用 Set-Cookie 标头发送然后被存储的 HTTP

Response Headers

HeaderDesc
Access-Control-Allow-Origin响应标头指定了该响应的资源是否被允许与给定的来源(origin)共享。
Content-Encoding用于指定压缩算法。
Date包含消息的创建日期和时间。
Etag标识资源版本的唯一字符串。使用 If-Match 和 If-None-Match 的条件请求使用此值来更改请求的行为。
Keep-Alive控制持久连接应保持打开状态的时间。
Last-Modified资源的最后修改日期,用于比较同一个资源的多个版本。它不如 ETag 准确,但在某些环境中更容易计算。使用 If-Modified-Since 和 If-Unmodified-Since 的条件请求使用此值来更改请求的行为。
Server包含了处理请求的源服务器所用到的软件相关信息。
Set-Cookie将 cookie 从服务器发送到用户代理。
Transfer-Encoding指定用于将资源安全地传输给用户的编码形式。
Vary确定如何匹配请求标头,以决定是否可以使用缓存的响应,还是从源服务器请求新的响应。

Message body information

HeaderDesc
Content-Length资源的大小,以十进制字节数表示。
Content-Type指示资源的媒体类型。(见 MIME 说明)
Content-Encoding用于指定压缩算法。
Content-Location指示返回数据的备用位置。
Content-Language描述面向受众的人类语言,以便用户可以根据自己的首选语言进行区分。
Content-Disposition指示回复的内容该以何种形式展示,是以_内联_的形式(即网页或者页面的一部分),还是以_附件_的形式下载并保存到本地。

MIME, Multipurpose Internet Mail Extensions 多用途互联网邮件拓展

MIME 类型现在正式地称作“媒体类型”,但有时也被称作“内容类型”。是指示文件类型的会与文件同时发送出去的字符串,描述了内容的格式(例如,一个声音文件可能被标记为 audio/ogg,一个图像文件可能是 image/png)。

它与传统 Windows 上的文件扩展名有相同目的。这个术语的名字源于最初用于电子邮件的 MIME 标准。

两种主要的 MIME 类型在默认类型中扮演了重要的角色:

  • text/plain 表示文本文件的默认值。一个文本文件应当是人类可读的,并且不包含二进制数据。
  • application/octet-stream 表示所有其他情况的默认值。一种未知的文件类型应当使用此类型。浏览器在处理这些文件时会特别小心,试图防止、避免用户的危险行为。

IANA 是 MIME 媒体类型的官方注册机构,并维护了官方所有 MIME 类型的列表。下面的表格列出了 Web 上的一些重要 MIME 类型:

扩展名文档类型MIME 类型
.aacAAC 音频audio/aac
.abwAbiWord 文档application/x-abiword
.apng动态可移植网络图形(APNG)图像image/apng
.arc归档文件(嵌入多个文件)application/x-freearc
.avifAVIF 图像image/avif
.aviAVI:音频视频交织文件格式(Audio Video Interleave)video/x-msvideo
.azwAmazon Kindle 电子书格式application/vnd.amazon.ebook
.bin任何二进制数据类型application/octet-stream
.bmpWindows OS/2 位图image/bmp
.bzBZip 归档application/x-bzip
.bz2BZip2 归档application/x-bzip2
.cdaCD 音频application/x-cdf
.cshC-Shell 脚本application/x-csh
.css层叠样式表(CSS)text/css
.csv逗号分隔值(CSV)text/csv
.docMicrosoft Wordapplication/msword
.docxMicrosoft Word(OpenXML)application/vnd.openxmlformats-officedocument.wordprocessingml.document
.eotMS 嵌入式 OpenType 字体application/vnd.ms-fontobject
.epub电子出版(EPUB)application/epub+zip
.gzGZip 压缩归档application/gzip
.gif图像互换格式(GIF)image/gif
.htm.html超文本标记语言(HTML)text/html
.ico图标(Icon)格式image/vnd.microsoft.icon
.icsiCalendar 格式text/calendar
.jarJava 归档(JAR)application/java-archive
.jpeg.jpgJPEG 图像image/jpeg
.jsJavaScripttext/javascript (规范:HTML 和 RFC 9239
.jsonJSON 格式application/json
.jsonldJSON-LD 格式application/ld+json
.mid.midi音乐数字接口(MIDI)audio/midiaudio/x-midi
.mjsJavaScript 模块text/javascript
.mp3MP3 音频audio/mpeg
.mp4MP4 视频video/mp4
.mpegMPEG 视频video/mpeg
.mpkgApple 安装包application/vnd.apple.installer+xml
.odp开放文档演示稿文档application/vnd.oasis.opendocument.presentation
.ods开放文档表格文档application/vnd.oasis.opendocument.spreadsheet
.odt开放文档文本文档application/vnd.oasis.opendocument.text
.ogaOGG 音频audio/ogg
.ogvOGG 视频video/ogg
.ogxOGGapplication/ogg
.opusOpus 音频audio/opus
.otfOpenType 字体font/otf
.png便携式网络图形image/png
.pdfAdobe PDFapplication/pdf
.php超文本预处理器(Personal Home Pageapplication/x-httpd-php
.pptMicrosoft PowerPointapplication/vnd.ms-powerpoint
.pptxMicrosoft PowerPoint(OpenXML)application/vnd.openxmlformats-officedocument.presentationml.presentation
.rarRAR 归档application/vnd.rar
.rtf富文本格式(RTF)application/rtf
.sh伯恩 shell 脚本application/x-sh
.svg可缩放矢量图形(SVG)image/svg+xml
.tar磁带归档(TAR)application/x-tar
.tif.tiff标签图像文件格式(TIFF)image/tiff
.tsMPEG 传输流video/mp2t
.ttfTrueType 字体font/ttf
.txt文本(通常是 ASCII 或 ISO 8859-ntext/plain
.vsdMicrosoft Visioapplication/vnd.visio
.wav波形音频格式audio/wav
.webaWEBM 音频audio/webm
.webmWEBM 视频video/webm
.webpWEBP 图像image/webp
.woffWeb 开放字体格式(WOFF)font/woff
.woff2Web 开放字体格式(WOFF)font/woff2
.xhtmlXHTMLapplication/xhtml+xml
.xlsMicrosoft Excelapplication/vnd.ms-excel
.xlsxMicrosoft Excel(OpenXML)application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xmlXMLRFC 7303(section 4.1)推荐使用 application/xml,但有时仍会使用 text/xml。你可以将特定的 MIME 类型分配给具有 .xml 扩展名的文件,这取决于其内容的解释方式。例如,Atom 消息来源是 application/atom+xml,而 application/xml 是默认的有效值。
.xulXULapplication/vnd.mozilla.xul+xml
.zipZIP 归档application/zip
.3gp3GPP 音视频容器video/3gpp;如果不包含视频则为 audio/3gpp
.3g23GPP2 音视频容器video/3gpp2;如果不包含视频则为 audio/3gpp2
.7z7-zip 归档application/x-7z-compressed

URI, Uniform Resource Identifier 统一资源标识符

URI 是一段用于标识超文本资源的字符序列。这个资源可以是抽象的,也可以是物理存在的,甚至可能是尚未创建的未来资源。URI 的语法设计非常灵活,能够涵盖各种使用场景。

URI 在其他地方使用时,如 HTML <a> 可用于触发获取资源以外的行为,包括打开电子邮件客户端、发送文本信息或执行 JavaScript。

scheme:[authority]host[:port][/path][?query][#fragment]

例:http://john.doe@example.com:123/forum/questions?tag=networking&order=newest#top

  • scheme 协议

    URI 的第一个组成部分,由一个字母开头,后跟字母、数字、加号(+)、点号(.)或连字符(-)组成。虽然语法上不区分大小写,但推荐使用小写。例如:httphttpsmailto。scheme 是必须的,不能省略。

  • authority 授权信息

    username@host

  • path 路径

    由斜杠(/)分隔的路径片段组成

  • query 参数

    可选部分,通常以问号(?)开头,包含多个键值对,用 & 或 ; 分隔。

  • fragment 片段

    可选部分,以井号(#)开头,用于标识资源内部的某个子部分。

URL, Uniform Resource Locator 统一资源定位符

URL 属于 URI 的一个子集,用于标识资源在网络中的位置,并说明如何获取该资源。

例:

http
http://example.org/wiki/main_page

<!-- 这个 URL 标识通过 HTTP 协议从 example.org 获取 HTML 页面 /wiki/main_page。 -->

URN, Uniform Resource Name 统一资源名称

URN 是 URI 的另一个子集,用于提供全球唯一持久的资源标识,即使资源不存在或无法访问

urn:<namespace>:<specific part>

例:

  • 书籍 ISBN 号urn:isbn:0451450523表示书籍《The Last Unicorn》
  • 电影 ISAN 号urn:isan:0000-0000-2CEA-0000-1-0000-0000-Y

其他常见 URI 协议

schemadesc
tel电话号码
mailto邮箱地址
skypeSkype 通话
ftp文件传输
file本地文件路径
HTTP 使用 80 端口通信,不加密,存在安全风险;而 HTTPS 使用 443 端口加密通信并需要证书验证,安全性更高。

Web Server

1、建立链接:接受或拒接客户端链接请求; 2、接收请求:通过网络读取 HTTP 请求报文; 3、处理请求:解析报文并作出响应动作; 4、访问资源:访问请求报文中相关的资源; 5、构建响应:使用正确的首部生产 HTTP 响应报文; 6、发送响应:向客户端发送生成响应报文; 7、记录日志:记录完成的 HTTP 事务;

Web 服务器不提供”动态处理“(不提供解释器)

获取一个动态页面

客户端请求 -> 内核空间 (处理 tcp/ip) -> 套接字 -> 用户空间 web server -> 内核模式访问硬盘获取文件 -> 用户空间(处理文件)-> 返回客户端(HTML 格式文件)

HTTP,TCP:三次握手,四次断开

HTTP/1.1

  • 缓存
  • 长连接

Apache MPM

CS

  • C: Client Agent (browser, spider)
  • S: server
  • client -> request -> server
    • URI
    • HTTP Method: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECTION
    • HTTP status: 2xx, 3xx, 4xx, 5xx
    • HTTP headers
      • name: value
  • server -> response -> client
    • 并发响应模型:单线程/单进程、多进程/多线程、单进程多请求、多进程多请求
    • Apache httpd
    • Nginx
    • lighttpd

单线程/单进程

多进程/多线程 https://hellogithub.com/report/netcraft

监听

阻塞

非阻塞

tcp/ip

IP

  • source IP
  • destination IP TCP
  • source port
  • destination port HTTP
  • GET xxx.html
  • Host: www.xxx.com(虚拟主机)

[^1]: