教 程 目 录
http教程

http教程提供http(超文本传输协议)的基本和高级概念.我们的HTTP教程是为初学者和专业人士开发的.
什么是http
HTTP代表超文本传输协议.
超文本传输协议是一组规则,它用于传输WWW(万维网)上的文件,音频,视频,图形图像,文本和其他多媒体文件.
http是一个应用程序级协议.通信通常通过TCP/IP插座进行,但也可以使用任何可靠的运输.
HTTP连接的标准(默认)端口为80,但也可以使用其他端口.
第一个版本的http是http/0.9,它于1991年介绍.
最新版本的HTTP是HTTP/3,它于2019年9月发布.它是其处理器HTTP/2的替代方案.
此最新版本已在UDP(用户数据报协议)而不是基础传输协议的TCP(传输控制协议)的帮助下已经在Web上使用.
HTTP用于在各种主机和客户端之间进行通信.它支持网络配置的混合.
HTTP是一种协议,用于将超文本从客户端转移到服务器端,但HTTP没有任何安全性.
每当用户打开他们的Web浏览器时,这意味着用户间接使用HTTP.
关于http
的三个重要事项
无连接: http无连接.当HTTP客户端打开浏览器时,浏览器启动HTTP请求.在提出请求后,客户端断开与服务器的连接并等待响应.当响应已准备就绪时,服务器再次重新建立连接并将响应传送到客户端,之后客户端断开连接.因此,客户和服务器都在当前请求和响应期间彼此了解.
媒体独立: http是媒体无关.只要两台计算机可以读取它,HTTP可以提供任何类型的数据.
无状态: HTTP无状态.客户端和服务器只在当前请求期间彼此了解.如果连接已关闭,并且两台计算机希望再次连接,则需要重新连接信息,并将连接作为第一个连接.
http需要
什么是https
HTTPS代表超文本传输协议安全. HTTPS具有安全的传输.
它是由Netscape开发的.
HTTPS用于加密或解密网络服务器返回的用户HTTP页面或HTTP页面请求.
HTTPS首先在HTTP/1.1中使用,并在RFC 2616中定义.
在HTTPS中,传输信息的标准端口为443.
使用HTTPS,我们要从一个用户转移到另一个用户的敏感信息可以安全地完成.
https协议使用由SSL(安全套接字层)或TLS加密的连接上的HTTP(传输层安全性).
HTTPS保护来自中间人(MITM)攻击和窃听的传输数据.
它是网上传导金融交易的默认协议.
先决条件
在学习HTTP之前,您必须具有Web概念,Web浏览器,Web服务器,客户端和服务器体系结构的软件的基本知识.
观众
我们的HTTP教程旨在帮助初学者和专业人士.
问题
我们向您保证,在学习HTTP教程时不会发现任何困难.但是,如果您发现任何类型的错误,那么您可以在评论部分发布它.
本文地址:https://itbaoku.cn/tutorial/cn_http_tutorial-index.html
相关问答
我已经写了一个迷你最小主义者HTTP服务器原型(受Boost ASIO示例的启发),而目前,我还没有在服务器响应中放入任何HTTP标头,只有HTML字符串内容.令人惊讶的是,它可以正常工作. 在这个问题中评论指出它们可能不是从服务器端真正重要的. 我尚未尝试响应二进制映像文件或gzip at this时,我认为必须拥有HTTP标头. 但对于仅文本响应(HTML,CSS和XML输出),在我的服务器响应中包括HTTP标头是否可以永远不会?可能有哪些风险/错误? 解决方案 至少,您必须为标题提供状态线和日期. 作为写许多协议解析器的人,我在我的数字隐喻膝盖上求你,请哦,请哦,请不要完全忽略规格,因为您喜欢的浏览器让您允许您摆脱它. 只要其产生的数据是正确的,创建一个最小功能的程序就可以了.这不应该是一个重大负担,因为您要做的就是在响应开始时添加三行.这些行之一是空白!请花几分钟写两条光荣的代码,将您的响应数据与规格一致. 您真正应该提供的标题是: 状态行(必需) 日期标题(必需) 内容类型(强烈推荐) 内容长度(强烈推荐),除非您使用编码块 如果您要返回http/1.1状态行,并且不提供有效的内容长度或使用块编码,则将Connection: close添加到标题 将标头与身体分开的空白线(必需) 您可以选择不带有响应的内容
)
这个加密说 http/2均定义为HTTP URI(即无加密)和HTTPS URI(在TLS上,需要TLS 1.2或更新).[25] > 但是在Google上进行测试,我得到了不同的结果: curl --http2 -I http://www.google.co.uk HTTP/1.1 200 OK curl --http2 -I https://www.google.co.uk HTTP/2 200 其他域也是如此.有任何解释吗? 解决方案 http/2可以通过未加密的频道(称为H2C)协商,但是它更复杂,因为客户端如何知道服务器是否会理解相对较新的HTTP/2协议?另外,代理服务器在未加密时通常会在处理此类新协议时遇到问题,但是在发送加密时将其处理正常(因为在这种情况下他们看不到其使用新协议). 对于加密的连接,HTTP/2(加密时称为H2)在发送第一个HTTP请求之前,使用ALPN扩展名(或已更换的较旧的NPN扩展名)作为HTTPS协商进行协商. 对于没有HTTPS协商的未加密连接,有两个选择: 假设服务器会说http/2,然后立即开始谈论http/2.这有点假定,但是从理论上讲,如果您失败的话,您会回到HTTP/1.在许多方面,它类似于关于使HTTPS默认并归还HTTP的讨论 - 它需要临界质量才能使这一值得. 将初始请
)
到目前为止,我的PHP应用程序在任何地方都假设HTTP 1.1.因此,我定义了所有标题,例如: header("HTTP/1.1 500 Internal Server Error"); 但是现在我的服务器也支持HTTP 2,我想使用正确的HTTP状态代码更新所有标题. 如何获得HTTP请求的HTTP协议版本? (我的网络服务器是nginx,但我想如果我使用nginx或apache是无关紧要的.) 解决方案 服务器协议应通过SERVER_PROTOCOL从服务器环境中获得,通常在您的应用程序内通过$_SERVER['SERVER_PROTOCOL']暴露. 来自phpinfo() Apache 2.4: SERVER_PROTOCOL => HTTP/1.1 其他解决方案 更改/etc/nginx/factcgi_params: #fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SERVER_PROTOCOL HTTP/2.0; 标题应为: - header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
)
我有一个连接到 HTTP 服务器的 HTTP 客户端 - HTTP 1.1,并且 TCP 连接保持不变.HTTP 客户端在一段时间内发送请求并接收来自服务器的响应. 在这个持久的 TCP 连接中,HTTP 服务器可以通过现有的 TCP 连接向 HTTP 客户端发送一个 HTTP 请求吗?(我们需要这个 - 假设页面有一个动态变化的信息(示例: 有人击中球门/有人击中六球/有人拿了三柱门/有人 VVVIP 被杀/等等). 现有标准是否允许 HTTP 服务器向其连接的客户端发送 HTTP 请求? 注意:我不是在查看页面刷新/其他 Web 或 AJAX 等应用程序协议... 解决方案 您要求服务器推送,不,HTTP/1.1 不支持. 请求标头不同于响应标头,因此 推送机制定义在提议的 HTTP/2 规范通过将请求和响应的标头组合在一起来工作. 您应该查看 AJAX/Comet,因为它基本上实现了您所描述的内容: 客户端应用程序定义一个方法来接收任何类型的游戏动作,然后服务器指定每次推送发生的动作.
)
如何通过HTTP/1还是HTTP/2区分资源? Be Guys在他们身边实施了它.我在开发工具网络选项卡中可以看到的内容,并并行加载了许多图像(80个项目).但是,当我查看XHR选项卡时,它们似乎是由较小的部分加载的.就像等待前6位,而不是去另一个.似乎在迁移到http/2之前是相同的.我看不到任何标题指示使用了哪种版本的协议 解决方案 您可以使用"协议"列中的"开发人员工具"中的"网络"选项卡在Chrome中查看.如果不存在,请右键单击其中一个标题(例如"状态"),然后选择"协议". 在Firefox中,在相同的"开发人员"/"网络"面板中,当您选择其中一个查询时,除了URL和状态代码外,它还显示版本: 最后,这两个浏览器中的每一个都有方便的状态指示器扩展: firefox: chrome: .
)
我有一个网络服务器,它在响应中发出 ETag 标头,并检查来自客户端的 If-None-Match 标头(如果存在).在这种情况下,客户端不是 Web 浏览器,而是 go 内置 net/http http.Client 类型的扩展. 这是我的代码 package util import "net/http" import "net/url" type HttpClient struct { http.Client etags map[url.URL]string } func (hc *HttpClient) Do(req *http.Request) (*http.Response, error) { const ETAG_SERVER_HEADER = "ETag" const ETAG_CLIENT_HEADER = "If-None-Match" //Do not attempt to use ETags on non-GET requests if req.Method != "GET" { return hc.Client.Do(req) } //Check for an existing etag etag, ok := hc.etags[*req.URL]
)