HTTP协议详细讲解(完整版)

article/2025/9/12 14:46:31

HTTP协议

1. HTTP协议的定义

  • HTTP协议(Hypertext Transfer Protocol,超文本传输协议),是一个客户端请求和回应的标准协议,这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。用户输入地址和端口号之后就可以从服务器上取得所需要的网页信息。
  • 通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。

2. HTTP协议在浏览器中的书写格式

  • 在B/S体系架构中,客户端都统一成了浏览器,要请求服务器端资源需要通过浏览器进行,此时由浏览器将我们给出的请求解析为满足HTTP协议的格式并发出。则我们发出的请求格式需要按照浏览器规定的格式来书写,在浏览器中书写格式如下:

http协议格式.PNG

  • 当浏览器获取到信息以后,按照特定格式解析并发送即可。接收到服务器端给出的响应时,也按照HTTP协议进行解析获取到各个数据,最后按照特定格式展示给用户。

3. HTTP协议的主要特点

1.)支持客户/服务器模式。

2.)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3.)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4.)HTTP1.1支持持续连接。通过这种连接,就有可能在建立一个TCP连接后,发送请求并得到回应,然后发送更多的请求并得到更多的回应。通过把建立和释放TCP连接的开销分摊到多个请求上,则对于每个请求而言,由于TCP而造成的相对开销被大大地降低了。而且,还可以发送流水线请求,也就是说在发送请求1之后的回应到来之前就可以发送请求2,也可以认为,一次连接发送多个请求,由客户机确认是否关闭连接,而服务器会认为这些请求分别来自不同的客户端。

5.)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

4. HTTP之URL

  • http(超文本传输协议)是一个基于请求与响应模式的、应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
  • HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:
http://host[":"port][abs_path]
  • http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成

5. HTTP请求

  • HTTP请求方式有两种:get和post

  • http请求由三部分组成,分别是:请求行、请求头、请求正文

  • 通过chrome浏览器,F12→Network查看

  • 格式

    • 请求首行(请求行)
    • 请求头信息(请求头)1
    • 请求头信息2
    • 请求空行
    • 请求体
  • 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF其中Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 刷新,多少秒跳转:content:秒;url=资源路径 -->
<meta http-equiv="refresh" content="3;url=http://www.taobao.com">
</head>
<!-- 
请求报文:GET请求(没有请求体)GET /http/index.html?uname=qzp&upwd=123 HTTP/1.1     // 请求行Host: localhost:8080                                 // 请求头  User-Agent(标志发送请求的设备信息)  Referer(请求从哪里来)Connection: keep-alivePragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36Sec-Fetch-User: ?1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3Sec-Fetch-Site: same-originSec-Fetch-Mode: navigateReferer: http://localhost:8080/http/index.htmlAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9post请求POST http://localhost:8080/http/index.html HTTP/1.1Host: localhost:8080location: http://www.baidu.com                   // 请求到指定页面Connection: keep-aliveContent-Length: 18Pragma: no-cacheCache-Control: no-cacheOrigin: http://localhost:8080Upgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36Sec-Fetch-User: ?1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3Sec-Fetch-Site: same-originSec-Fetch-Mode: navigateReferer: http://localhost:8080/http/index.htmlAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9//请求空行uname=lch&upwd=777					//请求体响应报文:HTTP/1.1 200 OK                     //响应行Server: Apache-Coyote/1.1			//响应头Accept-Ranges: bytesETag: W/"1095-1576114602154"Last-Modified: Thu, 12 Dec 2019 01:36:42 GMTContent-Type: text/htmlContent-Length: 1095Date: Thu, 12 Dec 2019 01:44:34 GMT//响应空行<!DOCTYPE html>						//响应体<html><head><meta charset="UTF-8"><title>Insert title here</title></head>GET /http/index.html?uname=qzp&upwd=123 HTTP/1.1     // 请求行Host: localhost:8080                                 // 请求头  User-Agent(标志发送请求的设备信息)  Referer(请求从哪里来)Connection: keep-alivePragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36Sec-Fetch-User: ?1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3Sec-Fetch-Site: same-originSec-Fetch-Mode: navigateReferer: http://localhost:8080/http/index.htmlAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9<body><form action="#" method="get">用户名<input type="text" name="uname"  />密码:<input type="text" name="upwd"/><input type="submit" value="登录" /></form></body></html>-->
<body><form action="#" method="post">用户名<input type="text" name="uname"  />密码:<input type="text" name="upwd"/><input type="submit" value="登录" /></form>
</body>
</html>

6. HTTP响应

  • 在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
  • 格式
    • 状态行
    • 响应头1
    • 响应头2
    • 响应空行
    • 响应体

7.消息头

  • HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。
  • 请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成
  • 每一个报头域都是由名字+“:”+空格+值组成,消息报头域的名字是大小写无关的。

i.请求头

  • 请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
  • Referer:该请求头指明请求从哪里来
  • 如果是地址栏中输入地址访问的都没有该请求头地址栏输入地址,通过请求可以看到,此时多了一个Referer的请求头,并且后面的值为该请求从哪里发出。百度竞价,只能从百度来的才有效果,否则不算;通常用来做统计工作、防盗链

ii.响应头

  • 响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
  • Location:Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域,常用在更换域名的时候。response.sendRedirect(“http://www.pxcoder.com”);
  • Refresh:自动跳转(单位是秒),可以在页面通过meta标签实现,也可在后台实现。
<metahttp-equiv="refresh"content="3;url=http://www.pxcoder.com">

http://chatgpt.dhexx.cn/article/sp2BvEER.shtml

相关文章

JavaWeb——HTTP详解

文章目录 什么是HTTPHTTP发展阶段HTTP请求1.请求行请求方式 2.消息头 HTTP响应1.响应体2.响应状态码常见状态码HTTP状态码分类HTTP状态码列表: 什么是HTTP 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#…

HTTP协议(详解)

HTTP协议&#xff08;详解&#xff09; HTTP协议&#xff1a;全称为Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;。HTTP协议是用于从&#xff08;WWW&#xff1a;World Wide Web&#xff0c;简称万维网&#xff09;服务器传输超文本到本地浏览器的传输…

HTTP协议的详细介绍

目录 一、何为HTTP协议 1.HTTP协议详细信息 2.HTTPS协议&#xff1a; 3.HTTP协议的特点 二、HTTP协议 请求方式 HTTP1. 0定义了三种请求方法&#xff1a; 1.GET 2.POST 3.HEAD HTTP1. 1 新增了五种请求方法&#xff1a; 1.OPTIONS 2.PUT 3.DELETE 4.TRACE 5.CONN…

看完这篇HTTP,跟面试官扯皮就没问题了

我是一名程序员&#xff0c;我的主要编程语言是 Java&#xff0c;我更是一名 Web 开发人员&#xff0c;所以我必须要了解 HTTP&#xff0c;所以本篇文章就来带你从 HTTP 入门到进阶&#xff0c;看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前&#xff0c;我们的电…

Python挑战游戏( PythonChallenge)闯关之路Level- 5

时隔两个月&#xff0c; 又重新回来写博客了 今天重新来做这个挑战题目 首先入口地址&#xff1a;http://www.pythonchallenge.com/pc/def/peak.html 打开来看&#xff0c; 没错&#xff0c;你没有看错&#xff0c;只有一副画 然后画的下面 有一句话 "pronounce it&quo…

pythonchallenge第0关

pythonchallenge第0关 点击打开链接 仔细观察第0关的图片&#xff1a;数字以英语提示&#xff08;Hint:try to change the URL address 尝试改变 统一资源定位符的地址&#xff09; 这就很简单了。 >>> 2 ** 38 274877906944L >>> 也即&#xff1a;http…

Python挑战游戏( PythonChallenge)闯关之路Level- 6

来来来&#xff0c;难得今天有点时间&#xff0c;闯关继续 照旧&#xff0c;先进入闯关入口&#xff0c;看一看这一关是怎么回事&#xff1a;http://www.pythonchallenge.com/pc/def/channel.html 单纯的从网页页面上来看&#xff0c; 一个有拉锁的图片&#xff0c; 下面一个写…

Python菜鸟快乐游戏编程_pygame

曾经我也沉迷游戏&#xff0c;连续玩十几个小时竞技游戏可以不吃饭。游戏只是别人写好程序&#xff0c;与其沉迷于他人设计好程序&#xff0c;为何不自己设计游戏&#xff0c;至少学会编程后&#xff0c;我们的月收入上万不是问题。于是便有了录制这部pygame菜鸟游戏编程教程动…

【pythonchallenge】【问题1】

网页标题&#xff1a;What about making trans?问题网址&#xff1a;http://www.pythonchallenge.com/pc/def/map.html问题描述&#xff1a;问题给了个图片&#xff0c;是map的对应关系&#xff0c; everybody thinks twice before solving this. g fmnc wms bgblr rpylqjyrc…

Python挑战游戏( PythonChallenge)闯关之路Level- 1

闯关过程 关卡入口地址&#xff1a; http://www.pythonchallenge.com/pc/def/map.html 打开页面是这样的&#xff1a; 在图中的你内容&#xff0c;可以看到 K->MO->QE->G 直观上感受是&#xff0c;字符串对应解析 也就是说&#xff0c;26个英文字符依次和图片下面的…

chatgpt赋能Python-pythonchallenge

Python Challenge: 挑战你的Python技能 如果你正在寻找一种提高Python编程技能的有趣方法&#xff0c;那么Python Challenge是一个不错的选择。Python Challenge是一个在线的puzzle游戏&#xff0c;每个挑战都需要使用Python编写程序来解决。这些挑战是由一个名叫Nadav Samet的…

Python Challenge 第2关

http://www.pythonchallenge.com/pc/def/ocr.html recognize the characters. maybe they are in the book, but MAYBE they are in the page source. 第2关&#xff1a;从现在开始&#xff0c;要从页面中寻找答案了。其实是在注释中。从页面源码中可以发现其有一段注释&#x…

pythonchallenge(0-4)

pythonchallenge 0&#xff1a;网址&#xff1a;http://www.pythonchallenge.com/pc/def/0.html 网页提示&#xff1a;try to change the URL addres。网站的图片提示如下&#xff1a; 图片的意思是网址为2的38次方 print(2**38)得到下一关的网址&#xff1a;http://www.pyt…

Python Challenge

Level 0 [1] Hint: try to change the URL address. 第零关主要让人熟悉游戏规则和形式。首先观察标签栏主题显示的是warming up&#xff0c;表明这关的主题是热身。页面图片下标注一行小提示尝试改变url的地址。在没有别的提示下&#xff0c;明显是改成图片内的内容&#xff0…

pythonchallenge(5-9)

pythonchallenge 5&#xff1a;网址&#xff1a;http://www.pythonchallenge.com/pc/def/peak.html 查看页面源代码有提示.peak hell sounds familiar.考察的是标准库pickle的。pickle模块用来实现python对象的序列化,反序列化。构建payload: import urllib.request as urt i…

Python Challenge 题解 [0-4]

Challenge 0 转到 Python Challenge 题目0 分析 从图片中可看出,该题的答案应为2的38次方 完整程序 2**38Challenge 2 转到 Python Challenge 题目 everybody thinks twice before solving this. g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dm…

pythonchallenge闯关——第一弹

说在前面 pythonchallenge是一个很古老的很优秀的一款python学习路径&#xff0c;我也是知乎搜到后&#xff0c;这里安利给大家&#xff0c;网址是&#xff1a; pythonchallenge 界面是介样子的 &#xff1a; P.S. 本人也是python小白&#xff0c;在这里记录自己的学习路径&…

PythonChallenge闯关详解

前言 PythonChallenge是国外的一位工程师设计的一套编程闯关游戏&#xff0c;网址&#xff1a;PythonChallenge&#xff0c;每一关都可以用一段Python程序解决问题得到下一关的入口&#xff0c;本博文作为一个学习笔记&#xff0c;通过边学边记的方式分享我的闯关经验。 0 图片…

scanf返回值被忽略问题

解决Visual Studio中scanf返回值被忽略问题 最近在使用Visual Studio编写c语言时遇到了scanf返回值被忽略问题 总结了如下几种解决方法&#xff1a; 方法一&#xff08;不建议&#xff09; scanf修改成 scanf_s 可以说scanf_s是vs编译器特有的&#xff0c;它认为scanf不安全&…

scanf库函数的返回值

目录 一背景&#xff1a; 二 scanf返回值规则 1.在格式字符串为用%d的情况下 (1)输入5 6此时scanf能正确读入的数据为两个&#xff0c;返回值为2 scanf正确读入概念补充 (2)如果输入5 t此时能正确读入的数据为1个&#xff0c;返回值为1。 (3)如果输入1 2.5 (4)输入t 5&a…