GoWeb HTTP协议

HTTP协议简介

HTTP超文本传输协议(HTTP-Hypertext transfer protocol),是一个属于应用层的面向对象的协议,由于器简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断的完善和扩展。它是一种详细规定了浏览器和万维服务器之间相互通信的规则,通过因特网传送万维网文档的数据传送协议

客户端与服务端通信时传输的内容称为报文

HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。
客户端发送给服务器的称为 请求报文
服务器发送给客户端的称为 响应报文

HTTP协议的发展历程

超文本传输协议的前身是世外桃源(Xanadu)项目,超文本的概念是泰德纳尔森(Ted Nelson)在1960年代提出的。他一直致力于超文本协议和该项目的研究,但从未公开发表过资料。
1989年,蒂姆伯纳斯李(Tim Berners Lee)在CERN(欧洲原子核研究委员会 = European Organization for Nuclear Research)担任软件咨询师的时候,开发了一套程序,奠定了万维网(WWW = World Wide Web)的基础
1990年12月,超文本在CERN首次上线。
1991年夏天,继 Telnet等协议之后,超文本转移协议成为互联网诸多协议的一分子

当时,Telnet协议解决了一台计算机和另外一台计算机之间一对一的控制型通信的要求。
邮件协议解决了一个发件人向少量人员发送信息的通信要求。
文件传输协议解决一台计算机从另外一台计算机批量获取文件的通信要求,但是它不具备一边获取文件一边显示文件或对文件进行某种处理的功能。
新闻传输协议解决了一对多新闻广播的通信要求。
而超文本要解决的通信要求是: 在一台计算机上获取并显示存放在多台计算机里的文本、数据、图片和其它类型的文件;它包含两大部分: 超文本转移协议和超文本标记语言(HTML).
HTTP、HTML以及浏览器的诞生给互联网的普及带来飞跃

HTTP协议的会话方式

  • 浏览器与服务器之间的通信过程要经历四步

在这里插入图片描述

  • 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接
  • 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对

HTTP1.0和HTTP1.1区别

在HTTP1.0版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接
但在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率

在这里插入图片描述

HTTP1.1是目前使用最为广泛的一个版本,而最新的一个版本是HTTP2.0, 又称HTTP/2 在开放互联网上HTTP2.0将只用于 https://网址. HTTPS,即 SSL(Secure Socket Layer, 安全套接字层)之上的HTTP,实际上就是在 SSL/TLS连接的上层进行HTTP通信

备注: SSL最初由 Netscape 公司开发,之后由 IETF(Internet Engineering Task Force, 互联网工程任务组)接手并将其改名为 TLS (Transport Layer Security, 传输层安全协议)

报文

报文格式

在这里插入图片描述

请求报文

  1. 报文格式
  • 请求行
  • 请求头
  • 空行
  • 请求主体
  1. GET请求
  • GET请求没有请求主体,POST请求才有请求主体
  • GET /Hello/index.jsp HTTP/1.1: GET请求,请求服务器路径为/Hello/index.jsp, 协议为 1.1
  • Host:localhost 请求的主机名为 localhost
  • User-Agent: Mozilla/4.0 (compatible; MSIE 8.0…) 与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器的版本信息,这都是通过获取User-Agent头信息而来的
  • Accept: */* 告诉服务器,当前客户端可以接收的文档类型, */* 表示什么都可以接收
  • Accept-Language: zh-CN 当前客户端支持的语言,可以在浏览器的工具 -> 选项中找到语言相关信息
  • Accept-Encoding: gzip, deflate 支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送
  • Connection: keep-alive 客户端支持的链接方式,保持一段时间连接,默认为3000ms
  • Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98 因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送过去
  1. POST请求
    POST请求要求将form标签的method的属性设置为post
  • Referer: http://localhost:8080/hello/index.jsp 请求来自哪个页面,例如你在百度上点击链接到了这里,那么 Referer: http://www.baidu.com 如果你是在浏览器的地址栏中直接输入的地址, 那么就没有Referer这个请求头了
  • Content-Type: application/x-www-form-urlencoded 表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以 "%"为前缀,后面跟随两位的16进制,例如 “编码” 这两个字使用 UTF-8的url编码为 “%E7%BC%96%E7%A0%81”
  • Content-Length:13 请求体的长度, 这里是 13字节
  • keyword=hello 请求体内容! hello是在表单中输入的数据,keyword是表单字段的名字

web服务器

package main

import (
	"fmt"
	"net/http"
)

//创建处理器函数
func handler(w http.ResponseWriter, r *http.Request)  {
	fmt.Fprintln(w, "测试http协议!")
}
func main() {
	//调用处理器处理请求
	http.HandleFunc("/http", handler)
	//路由
	http.ListenAndServe(":8080", nil)
}

测试页面

<html>
    <head>
        <meta charset="UTF-8" />
    </head>
    <body>
        <form action="http://localhost:8080/http" method="POST">
            用户名: <input type="text" name="username" /><br/>
            密码: <input type="password" name="password" /><br/>
            <input type="submit" />
        </form>
    </body>
</html>

响应报文

  1. 报文格式
  • 响应行
  • 响应头
  • 空行
  • 响应主体

响应报文解析

  • HTTP/1.1 200 OK 响应协议为HTTP1.1,状态码为200,表示请求成功
  • Server: Apache-Coyote/1.1 服务器的版本信息
  • Content-Type: text/html;charset=UTF-8 响应体使用的编码为UTF-8
  • Content-Length:274 响应体为274字节
  • Date: Tue, 07 Apr 2015 10:08:26 GMT 响应的时间,可能会由8小时的时区差

响应状态码

  1. 状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response HTTP/1.1协议中定义了5类状态码,状态码由三位数字组成,第一个数字定义了响应的类别
  • 1XX 表示信息 - 表示请求已被成功接收,继续处理
  • 2XX 成功 - 表示请求已被成功接收,理解,接受
  • 3XX 重定向 - 要完成请求必须进行更进一步的处理
  • 4XX 客户端错误 - 请求有语法错误或请求无法实现
  • 5XX 服务器端错误 - 服务器未能实现合法的请求
  1. 响应码对浏览器来说很重要,它告诉浏览器响应的结果,常见的状态码有:
  • 200 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中
  • 404 请求的资源没有找到,说明客户端错误的请求了不存在的资源
  • 500 请求资源找到了,但服务器内部出现了错误
  • 302 重定向,当响应码为302,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头 Location, 它指定了新请求的URL地址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxingge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值