了解HTTP协议

HTTP (超文本传输协议,HyperText Transfer Protocol),是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信基础。

通常,由 HTTP 客户端(例如:浏览器)发起一个 GET 请求,创建一个到服务器指定端口(默认是 80 端口)的 TCP 连接。HTTP 服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

请求方法

HTTP/1.1 协议中共定义了八种方法,以不同的方式操作指定的资源

  • GET

    • 从服务器取出资源(一项或多项)。
  • POST
    • 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有
  • PUT
    • 在服务器更新资源(客户端提供改变后的完整资源)。
  • DELETE
    • 从服务器删除资源。
  • PATCH
    • 在服务器更新资源(客户端提供改变的属性)。
  • HEAD
    • 请求获取由Request-URI所标识的资源的响应消息报头
  • OPTIONS
    • 请求查询服务器的性能,或者查询与资源相关的选项和需求
  • TRACE
    • 请求服务器回送收到的请求信息,主要用于测试或诊断
  • CONNECT
    • HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)

HTTP 请求

请求报文格式

发出的请求信息包括以下四个部分

  1. 请求行
  2. 请求头
  3. 空行
  4. 其它消息体
# 请求格式
1 动词 路径 协议/版本 GET /Search HTTP/1.1
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上传的数据
## GET请求的报文格式
GET /pay?test=aaaa HTTP/1.1
Host: localhost:8088
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept: */*
Referer: http://localhost:8088/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7 ## POST 请求的报文格式
POST /pay?test=aaaa HTTP/1.1
Host: localhost:8088
Connection: keep-alive
Content-Length: 0
Origin: http://localhost:8088
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept: */*
Referer: http://localhost:8088/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

注意

  1. 请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)
  2. 第三部分永远都是一个回车\n
  3. 动词有 GET POST PUT PATCH DELETE HEAD OPTIONS
  4. 这里的路径包括「查询参数」,但不包括「锚点」
  5. 如果你没有写路径,那么路径默认为 /
  6. 第 2 部分中的 Content-Type 标注了第 4 部分的格式
  7. HTTP/1.1协议中,所有的请求头(第 2 部分),除Host外,都是可选的

如何用 Chrome 浏览器中查看 HTTP 请求

  1. 按下F12或右键检查元素进入 开发者工具
  2. 进入 Network 面板
  3. 地址栏输入网址
  4. Network 点击,查看 Request Headers,默认工具已经帮你解析好了,点击「view source」可以查看原始的请求格式
  5. 如果有请求的第四部分,那么在 FormData 或 Request Payload 里面可以看到

HTTP 响应

在接收和解释请求消息后,服务器返回一个HTTP响应消息.

响应报文格式

HTTP响应也是由四个部分组成,分别是:

  1. 状态行
  2. 消息报头
  3. 空行
  4. 响应正文
1 协议/版本号 状态码 状态解释   HTTP/1.1 200 OK
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 响应的内容
## GET 请求的响应报文
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2443
Content-Type: text/html <!DOCTYPE html>
<html> <head> 后面太长,省略了…… ## POST请求的响应报文
HTTP/1.1 200 OK
Date: Tue, 11 Jun 2019 07:22:56 GMT
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Transfer-Encoding: chunked xxxxName.call(undefined, {"success": true, "remain": 35})

状态码解释

  • 1xx消息——请求已被服务器接收,继续处理
  • 2xx成功——请求已成功被服务器接收、理解、并接受
  • 3xx重定向——需要后续操作才能完成这一请求
  • 4xx请求错误——请求含有词法错误或者无法被执行
  • 5xx服务器错误——服务器在处理某个正确请求时发生错误
200 请求成功
201 服务器创建了新的资源
202 已接受,服务器已接受请求,但尚未处理
204 服务器成功处理了请求,但是没有返回任何东西 301 永久移动), 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
302 临时移动) ,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
304 资源未修改, 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
400 错误请求,服务器不理解请求的语法
401 没有权限,请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 禁止访问,服务器拒绝请求
404 资源未找到
405 HTTP请求方法被禁用
408 请求超时
412 请求实体过大
500 服务器内部错误
502 错误网关
503 服务不可用
504 网关超时

如何用 Chrome 查看 HTTP 响应

和查看请求格式类似

你需要了解的HTTP协议的更多相关文章

  1. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  2. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  3. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  10. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

随机推荐

  1. Android二维码功能实现

    最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码.而内嵌二维码扫描功能的软件也越来越多,QQ.微信.UC浏览器等等应用都可以对着二维码扫一扫,感觉我们自己的应用里不加上二维码扫描功 ...

  2. python 强制类型转换 以及 try expect

    强制类型转换: 字符串 -->  整型: 字符串 第一个  是 +  或者 -  ,会直接去掉 符号 ,返回 数字 如: a = '+123456' s = int(a) print(s) s ...

  3. 在efcore 中创建类 通过实现IEntityTypeConfiguration<T>接口 实现实体类的伙伴类 实现FluentApi

    1 创建实体类: public partial class NewsCategory : IAggregationRoot { public NewsCategory() { } public Gui ...

  4. GDI+与WPF中的颜色简析

    原文:GDI+与WPF中的颜色简析 --------------------------------------------------------------------------------引用 ...

  5. NLP(paper + code)

    0. 开源的库 genism keras wrapper of theano/TensorFlow 1. CNN for NLP Convolutional Neural Networks for S ...

  6. Android到您的计算机使用命令行屏幕捕获和出口

    声明:本博客为原创博客,未经同意.不得转载! 原文链接为http://blog.csdn.net/bettarwang/article/details/27819525 大多数人最经常使用的截屏方法可 ...

  7. python 教程 第一章、 简介

    第一章. 简介 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...

  8. 目标检测的图像特征提取(一)HOG特点

    1.HOG特点: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检測的特征描写叙述子.它通过计算和统计图像局部区 ...

  9. the solution about &quot;messy code&quot; in elicpse

    I use the Elicpse IDE to develope the ansdroid app.Sometime encounter the messy code in the Elicpse ...

  10. wpf采用Xps实现文档显示、套打功能

    原文:wpf采用Xps实现文档显示.套打功能 近期的一个项目需对数据进行套打,用户要求现场不允许安装office.页面预览显示必须要与文档完全一致,xps文档来对数据进行处理.Wpf的Document ...