前言

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. mysql如何设置一个字段,里面是自增的序号(1,2,3,..........)。

    [遇到问题] [可忽略] 想把以前写的留言板搬到我的网站上去,所以要在Mysql上创建一个一mu一样的数据库,表单,字段..................... userid这个字段忘记了如何添加, ...

  2. JQuery 动态加载 HTML 元素时绑定点击事件无效问题

    问题描述 假设项目中有一个列表页面,如下: 当点击列表一行数据可以显示详情页面,而详情页面的数据是根据当前行的数据作为参数,通过 ajax 请求到后台返回的数据,再根据返回的结果动态生成 html 页 ...

  3. pre -regulator 前端稳压器

    regulator

  4. maven工具使用json-lib时,JSONArray.fromObject()不能执行的解决方案

    前端代码我就不展示了 ,下面说明下我遇到问题的情况,如果不想看可以直接划到黄色字体部分直接找解决方法哦~~(相关jar包我会放在云中,想要的自己下载哦,链接在视频最下面!!) 我的pom文件,如下,导 ...

  5. ubuntu16.04服务自启动(弹控制台)

    一.设置root桌面用户登录 1.vim  /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 在最后一行添加greeter-show-manual-lo ...

  6. Guava-retry,java重试组件

    使用场景 在日常开发中,我们经常会遇到需要调用外部服务和接口的场景.外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失败重 ...

  7. 高频访问SQLite数据库

    SQLite 是一款开源的 SQL 数据库引擎,由于其自包含.无服务.零配置和友好的使用许可(完全免费)等特点,在桌面和移动平台被广泛使用. 在应用开发过程中,如果想保存点数据,自然而然地就会想到 S ...

  8. Go基础结构与类型02---使用iota定义常量组

    package main import "fmt" /*const ( USA = 0 China = 1 Russia = 2 Britain = 3 France = 4 )* ...

  9. Java 程序 关于Properties 类使用Store方法时不能会覆盖以前Properties 文件的内容

    F:\\Demo.properties 文件内容: #\u65B0\u589E\u4FE1\u606F#Wed Sep 14 11:16:24 CST 2016province=广东tt=近蛋city ...

  10. 中国摄像头CMOS需求潜力旺盛

    中国摄像头CMOS需求潜力旺盛 CMOS是Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)的缩写.它是指制造大规模集成电路芯片用的一种技术或用这种 ...