前言

1. http 简介

1.1 概念

HTTP协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写。

用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。

1.2 原理

原理

  • HTTP是一个基于 TCP/IP通信协议 来传递数据(HTML 文件, 图片文件, 查询结果等)。
  • 是基于 客户端-服务器 模型运作的。
  • 是一个应用层协议

通信过程

  • HTTP 客户端(如浏览器)通过 URL 向 HTTP 服务端(如web服务器)发送请求。
  • HTTP 服务端 接收到请求后,向客户端发送响应信息。

web服务器

  • Apache服务器。
  • IIS服务器(Internet Information Services)。
  • etc

1.3 特点

HTTP协议的特点

  • 简单:客户端向服务器请求服务时,只需要传送请求方法资源路径即可获得资源。
  • 快捷:由于HTTP协议简单,所以HTTP服务器程序规模小,通信快。
  • 灵活:HTTP允许传输任意类型的数据对象,传输的类型由Content-Type加以标记。
  • 无连接:服务器每处理客户端的一个请求,响应并获得客户端的应答后,断开连接。(断开TCP连接)。
    • 注意:HTTP1.1 后便有了持久连接的方法。即是任意一端只要没有提出断开连接,则保持TCP连接
  • 无状态:HTTP协议对于事务处理没有记忆能力,即无法根据之前的状态进行本次的请求处理。如果后续处理需要前面的信息,它必须重传数据。
    • 解决:引入Cookie技术,让服务器知道用户上一次的操作,并且记录存储在客户端之中。

2. URL 简介

2.1 概念

URLUniform Resource Locator 的缩写。统一资源定位器。

URL 是一个网页地址:

  • 可以由字母组成,如 baidu.com
  • 也可以是物联网协议(IP)地址:180.76.76.76

2.2 URL 通用格式

一个URL的组成有多个不同的组件,一个URL的通用格式如下:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

说明

组件 名称 描述
scheme 方案 指定访问服务器获取资源时使用哪种协议,有HTTP、HTTPS、FTP、SMTP等协议。
user 用户 某些访问资源时候需要指定用户名,才有权限获取资源。
password 密码 用户名后面可能需要密码进行验证,用户名与密码直接使用“:”冒号分隔连接。
host 主机 资源宿主服务器的主机名或者IP地址(点分十进制)。
port 端口 资源宿主服务器正在监听的端口号。
path 路径 服务器本地资源的路径。
params 参数 某些方案会使用这个组件来输入参数,可以拥有多个参数,使用“;”符号 与路径分隔开。
query 查询 某些方案会使用这个组件传递参数以激活应用程序,查询组件的内容没有通 用的格式,用 ? 字符与其他组件分隔开
frag 片段 这个字段是在客户端内部使用,不会发送到服务器,通过“#”字符与其他组件分隔开 。

注意

  • 以上组件不是全部都必须填上的,根据方案填写需要的组件即可。
  • 端口port:端口号,可以不用自己填写,比如HTTP默认使用80端口,HTTPS默认使用443 端口。端口不是一个URL必须的部分。

2.3 网页地址 实例说明

网页地址https://www.cnblogs.com/lizhuming/p/13834535.html

  • https:方案scheme。安全超文本传输协议。
  • www.cnblogs.com:主机host。博客园的域名。
  • lizhuming/p/13834535.html:路径path。博客园服务器上的路径。
    • 13834535.html:资源文件。html格式。
  • 端口省略,即是默认使用https的默认端口 443。

在浏览器中按 F12 进入浏览器控制台,可以看到很多 URL。

3. HTTP 消息结构

3.1 客户端请求消息

客户端请求消息由四部分组成:

如图:



头部信息参考:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

//请求报文
<method> <request-URL> <version>
<headers> <entity-body>

3.2 服务器响应消息

服务器响应消息也是由四部分组成:

  • 状态行。
  • 消息报头。
  • 空行。
  • 响应正文。

如图:



//响应报文
<version> <status> <reason-phrase>
<headers> <entity-body>

响应状态码说明

范围 已定义范围 描述
100 : 199 100 : 101 信息提示
200 : 299 200 : 206 成功
300 : 399 300 : 305 重定向
400 : 499 400 : 415 客户端错误
500 : 599 500 : 505 服务器错误

tips具体的状态码到参考链接了解

3.3 实例

打开浏览器,F12 进入后台,点击 network 查看。

4. HTTP 请求方法

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

方法 描述
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

5. HTTP 响应头信息

应答头 描述
Allow 服务器支持哪些请求方法。
Content-Encoding 文档的编码(Encode)方法。
Content-Length 内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
Content-Type 表示后面的文档属于什么MIME类型。
Date 当前的GMT时间。
Expires 文档有效期截止时间。过期不缓存。
Last-Modified 文档的最后改动时间。
Location 表示客户应当到哪里去提取文档。
Refresh 表示浏览器应该在多少时间之后刷新文档。单位 秒。
Server 服务器名字。
Set-Cookie 设置和页面关联的Cookie。
WWW-Authenticate 客户应该在Authorization头中提供什么类型的授权信息。

tips使用应答头参数时,建议到参考链接了解其作用

参考

【网络编程】HTTP简介&URL的更多相关文章

  1. java基础篇---网络编程(IP与URL)

    一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一 ...

  2. Java网络编程-URI和URL

    前提 前面的一篇文章<Java中的Internet查询>分析完了如何通过IP地址或者主机名确定主机在因特网中的地址.任意给定主机上可能会有任意多个资源,这些资源需要有标识符方便主机之间访问 ...

  3. unix网络编程之简介

    通常客户一次只与一个服务器通信, 上图为:一个服务器同时处理多个客户的请求. 上图为:客户与服务器使用TCP协议在同一个以太网中通信. 路由器是广域网的架构设备.今天,最大的广域网是因特网. 上图为: ...

  4. python入门(九):网络编程和多线程

    一.网络编程 Socket简介 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. ...

  5. UNIX网络编程---简介

    UNIX网络编程---简介 一.           概述 a)       在编写与计算机通信的程序时,首先要确定的就是和计算机通信的协议,从高层次来确定通信由哪个程序发起以及响应在合适产生.大多数 ...

  6. Java 网络编程(三) 创建和使用URL访问网络上的资源

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951877.html 创建和使用URL访问网络上的资源 URL(Uniform Reso ...

  7. 【unix网络编程第三版】阅读笔记(二):套接字编程简介

    unp第二章主要将了TCP和UDP的简介,这些在<TCP/IP详解>和<计算机网络>等书中有很多细致的讲解,可以参考本人的这篇博客[计算机网络 第五版]阅读笔记之五:运输层,这 ...

  8. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  9. javase的网络编程(InetAddress,UDP,TCP,URL,Socket,DatagramSocket)

    通过一段时间对java网络编程相关内容的学习,写下这篇随笔,对这一部分的知识进行梳理和总结. 网络编程 一.网络编程三要素: IP地址:网络会给每个联网的主机分配一个数字的编码地址,该地址就是IP地址 ...

  10. 基于URL的高层次Java网络编程

    一致资源定位器URL URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址.通过URL我们可以访问Internet上的各种网络资源, ...

随机推荐

  1. 所有的 Unix Like 系统都会内建 vi 文书编辑器。vim 是vi的升级版本,它不仅兼容vi的所有指令 ,而且还有一些新的特性在里面。

    所有的 Unix Like 系统都会内建 vi 文书编辑器.vim 是vi的升级版本,它不仅兼容vi的所有指令 ,而且还有一些新的特性在里面. https://blog.csdn.net/carolz ...

  2. Linux_源码安装包管理理论概述

    一.源码包基本概述 1️⃣:源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言 2️⃣:Linux上的C语言编译器叫做gcc,利用 ...

  3. STM32F7系列时钟相关问题:HSE模式配置(旁路模式、非旁路模式

    从时钟源的角度,分为两类外部时钟(E)和内部时钟(I).从时钟速率的角度,分为两类高速时钟(HS)和低速时钟(LS).而把它们组合起来就有四种时钟:HSE.HIS.LSE.LSI.至于为什么会有这么复 ...

  4. Assignment Problem的若干思考

      最近受到南京一个同学的push,又开始了博客园写作之旅.欢迎大家联系我做代码实现工作,QQ:1198552514.权当赚点生活费~ 我的研究也经常用的Assignment problem,而且很多 ...

  5. Spring 是什么?

    概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好.易于测试.可重用的代码. Spring 框架是一个开源的 Ja ...

  6. 使用Typora编写Markdown你真的会了吗

    目录 Typora 介绍 使用 常用快捷键 概述 标题 一级标题 二级标题 方式(推荐) 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落 粗体斜体删除线 下划线 注释 分割线 脚注 ...

  7. week-03

    1.简述HTTP交互原理 1.浏览器分析输入访问的地址 域名(IP)+$uri 2.读取浏览器缓存 3.请求DNS服务器,解析域名,返回IP 4.建立TCP连接,三次握手 5.发送请求 6.接收返回请 ...

  8. 解决使用go get 下载模块下载超时的问题

    解决使用go get 下载模块下载超时的问题   解决使用go get 下载模块下载超时的问题 使用go env可以看到,默认的GOPROXY的值是https://proxy.golang.org, ...

  9. python做反被爬保护的方法

    python做反被爬保护的方法 网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护.于是,很 ...

  10. day05对象和类

    day06作业: 第一题:分析以下需求,并用代码实现 手机类Phone 属性: 品牌brand 价格price 行为: 打电话call() 发短信sendMessage() 玩游戏playGame() ...