当前位置: 首页 > 编程日记 > 正文

程序员都该懂点 HTTP

作者:developerHaoz
Github 地址:developerHaoz
说明:本文主要是对 HTTP 基础知识进行总结和归纳,毕竟做 IT 的,网络这一块还是很重要的

本文的主要内容

  • HTTP 是什么
  • URL 详解
  • HTTP 之请求篇
  • HTTP 之响应篇

一、HTTP是什么

1、概述

HTTP 全称是 HyperText Transfer Protocal ,即:超文本传输协议,从 1990 年开始就在 WWW 上广泛应用,是现今在 WWW 上应用最多的协议,HTTP 是应用层协议,当你上网浏览网页的时候,浏览器和 web 服务器之间就会通过 HTTP 在 Internet 上进行数据的发送和接收。HTTP 是一个基于请求/响应模式的、无状态的协议。即我们通常所说的 Request/Response

2、特点

  • 支持客户端/服务器模式
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快
  • 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记
  • 无连接:无连接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接,采用这种方式可以节省传输时间
  • 无状态:HTTP 协议是无状态协议。无状态是指协议对于事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能会导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就比较快

二、URL详解

1、简介

URL(Uniform Resource Locator)是统一资源定位符的简称,有时候也被俗称为网页地址(网址),如同是网络上的门牌,是因特网上标准的资源的地址

2、基本组成

通用的格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

名称功能
scheme访问服务器以获取资源时要使用哪种协议,比如,http,https 和 FTP 等
hostHTTP 服务器的 IP 地址或域名
port#HTTP 服务器的默认端口是 80,这种情况下端口号可以省略,如果使用了别的端口,必须指明,例如www.cnblogs.com:8080
path访问资源的路径
query-string发给 http 服务器的数据
anchor

举个例子:
www.mywebsite.com/sj/test/tes…
其中

名称对应的字段
Schemahttp
hostwww.mywebsite.com
path/js/test/test.aspx
Query-stringname=sviergn&x=true
anchorstuff

再来张比较直观的图

URL 组成

三、HTTP 之请求篇

HTTP 的请求报文分为三个部分:请求行请求头请求体

请求报文

1、请求行

请求行(Request line)分为三个部分:请求方法请求地址协议版本

请求方法

HTTP/1.1 协议中共定义了八种方法(也叫“动作”)来以不同的方式操作指定的资源

方法名功能
GET向指定的资源发出“显示”请求,使用 GET 方法应该只用在读取数据上,而不应该用于产生“副作用”的操作中
POST指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求文本中。这个请求可能会创建新的资源或者修改现有资源,或两者皆有。
PUT向指定资源位置上传其最新内容
DELETE请求服务器删除 Request-URI 所标识的资源
OPTIONS使服务器传回该资源所支持的所有HTTP请求方法。用*来代替资源名称,向 Web 服务器发送 OPTIONS 请求,可以测试服务器功能是否正常运作
HEAD与 GET 方法一样,都是向服务器发出指定资源的请求,只不过服务器将不传回资源的本文部分,它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中关于该资源的信息(原信息或称元数据)
TRACE显示服务器收到的请求,主要用于测试或诊断
CONNECTHTTP/1.1 中预留给能够将连接改为通道方式的代理服务器。通常用于 SSL 加密服务器的链接(经由非加密的 HTTP 代理服务器)

其中,最常见的是 GET 和 POST 方法,如果是 RESful 接口的话一般会用到 PUT、DELETE、GET、POST(分别对应增删查改),这里附上一篇有关 REST 的文章 什么是 REST

2、请求头

请求头可用于传递一些附加信息,格式为:键: 值,注意冒号后面有一个空格

请求头

请求和响应常见通用的 Header

名称作用
Content-Type请求体/响应体的类型,如:text/plain、application/json
Accept说明接收的类型,可以多个值,用,(英文逗号)分开
Content-length请求体/响应体的长度,单位字节
Content-Encoding请求体/响应体的编码格式,如 gzip、deflate
Accept-Encoding告知对方我方接受的 Content-Encoding
ETag给当前资源的标识,和Last-ModifiedIf-None-MatchIf-Modified-Since配合,用于缓存控制
Cache-Control取值一般为no-cachemax-age=xx,xx为整数,表示资源缓存有效期(秒)

常见的请求 Header

名称作用
Authorization用于设置身份认证信息
User-Agent用户标识,如:OS 和浏览器的类型和版本
If-Modified-Since值为上一次服务器返回的Last-Modified值,用于确定某个资源是否被更改过,没有更改过就从缓存中读取
If-None-Match值为上一次服务器返回的 ETag 值,一般会和If-Modified-Since
Cookie已有的Cookie
Referer标识请求引用自哪个地址,比如你从页面 A 跳转到页面 B 时,值为页面 A 的地址
Host请求的主机和端口号

请求体

请求体(又叫请求正文)是 post 请求方式中的请求参数,以 key = value 形式进行存储,多个请求参数之间用&连接,如果请求当中请求体,那么在请求头当中的 Content-Length 属性记录的就是该请求体的长度

包含请求体的请求消息

根据应用场景的不同,HTTP 请求的请求体有三种不同的形式

第一种:

移动开发者常见的,请求体是任意类型的,服务器不会解析请求体,请求体的处理需要自己解析,如 POST JSON 的时候就是这类

HTTP请求,形式一

第二种:

第二种和第三种都有固定的格式,是服务器端开发人员最先了解的两种。这里的格式要求就是 URL 中 Query String 的格式要求:多个键值对之间用&连接,键与值之间用=连接,且只能用 ASCII 字符,非 ASCII 字符需使用UrlEncode编码

HTTP 请求,形式二

第三种:

第三种请求体被分成多个部分,文件上传 时会被使用,这种格式最先是被用于邮件传输中,每个字段/文件都被 boundary(Content-Type中指定的)分成单独的段,每段以--加 boundary 开头,然后是该段的描述头,描述头之后空一行接内容,请求结束的标识为 boundary 后面加--

HTTP 请求,形式三

区分是否被当成文件的关键是 Content-Disposition 是否包含 filename,因为文件有不同的类型,所以还要使用 Content-Type 指示文件的类型,如果不知道是什么类型取值可以为 application/octet-stream 表示文件是一个二进制的文件,如果不是文件则 Content-Type 可以省略

四、HTTP 之响应篇

HTTP 响应的格式上除状态行(第一行)与请求报文的请求行不一样之外,其他的就格式而言是一样的,但排除状态行和请求行的区别,从 Header 上还是可以区分出 HTTP 请求和 HTTP 响应的区别的,怎么区别就要看前面的 Header 啦

HTTP 响应报文

1、响应状态行

状态码

状态码(就是上图中的响应码),如果想查看各种状态码具体的含义,可以看一下这篇文章HTTP状态码对照表,当然这么多状态码要想全部都记住的话,还是比较困难的。

在平时我们只要记住这些就差不多了

状态码对应的信息
1XX提示信息—表示请求已接收,继续处理
2XX用于表示请求已被成功接收、理解、接收
3XX用于表示资源(网页等)被永久转移到其它 URL,也就是所谓的重定向
4XX客户端错误—请求有语法错误或者请求无法实现
5XX服务器端错误—服务器未能实现合法的请求

2、响应头

响应头同样可用于传递一些附加信息

响应头

常见的响应 Header

名称作用
Date服务器的日期
Last-Modified该资源最后被修改的时间
Transfer-Encoding取值一般为 chunked,出现在 Content-Length 不能确定的情况下,表示服务器不知道响应板体的数据大小,一般同时出现Content-Encoding响应头
Set-Cookie设置 Cookie
Location重定向到另一个 URL,如输入浏览器就输入 baidu.com 回车,会自动跳转到www.baidu.com 就是通过这个响应头控制的
Server后台服务器

3、响应体

响应体也就是网页的正文内容,一般在响应头中会用 Content-Length 来明确响应体的长度,便于浏览器接收,对于大数据量的正文信息,也会使用 chunked 的编码方式。


猜你喜欢

  • Android 一款十分简洁、优雅的日记 APP
  • Android 能让你少走弯路的干货整理
  • Android 撸起袖子,自己封装 DialogFragment
  • 手把手教你从零开始做一个好看的 APP

相关文章:

谁的青春不迷茫,其实我们都一样

如果你为人生画一条浅浅吃苦底线,就别妄想跨越深邃的幸福极限。在熠熠生辉前,总要捱过一段孤独不安的日子。唯有担得起厚重的经历,才能禁得起岁月推敲。记住:一定要努力,但别着急。加油! 很庆幸你能以这样好…

关于Iframe在IE6下不显示的bug

IE都出到IE8了,用IE6的人渐渐少了..但还是存在的.例如QAMM们在用. 所以,IE6下存在的问题也必须解决.这两天,我就遇到一个了: html<table> <tr> <td id"tdTest" runat"server"> <iframe id"ifrTest" h…

腾讯优图吴永坚:迈向深度学习,我们面临模型训练与推荐的双重考验

整理 | 琥珀出品 | AI 科技大本营对腾讯优图的发展历程&#xff0c;吴永坚表示&#xff0c;优图是非常幸运的&#xff0c;幸运的同时也知道优图选对了方向&#xff0c;只要坚持&#xff0c;还是会有收获的。12 月 15 日&#xff0c;以"新趋势、新技术、新应用"为主题…

JS子窗口调用父窗口中的函数

很简单只需要一句话就可以了&#xff1a; window.opener.changeColor(); 这里的changeColor()就是父窗口中JS的一个函数 本文转自sucre03 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/sucre/377011&#xff0c;如需转载请自行联系原作者

父亲节遇上端午节,你难道不回家吗?

创业者是孤独的 他们选择了更加艰险的人生。 同时&#xff0c;他们又是幸运的 因为他们背后有一位伟大的父亲。 决定创业时 他说&#xff1a;“大胆去闯吧&#xff0c;有爸爸在” 创业失败时 他说&#xff1a;“累了就回家&#xff0c;有爸爸在” 简单朴实的话语包含的是无私广…

蜘蛛爬虫网络高像素图片抓取工具[搜索引擎]

ZSpider—— 是一款Photo crawler工具。主要功能&#xff1a;免费抓取网络高像素图片&#xff0c;并下载到本地。使用说明&#xff1a;1. 软件环境&#xff1a;Windows XP, 20003, Vista, 2008, Windows 7.NET Framework 3.52. 双击Spider.exe&#xff0c;选择菜单&#xff0c;…

技术流 | 手把手教你用Python设计一个命令行界面

作者 | Yannick Wolff 译者 | 刘旭坤 整理 | Jane出品 | Python大本营对 Python 程序来说&#xff0c;完备的命令行界面可以提升团队的工作效率&#xff0c;减少调用时可能碰到的困扰。今天&#xff0c;我们就来教大家如何设计功能完整的 Python 命令行界面。对 …

送给那些还在迷茫的人

在现在这个高节奏的高效率的时代&#xff0c;两级分化特别厉害。有钱的会越来越有钱&#xff0c;没钱的要么安于现状&#xff0c;要么就越来越穷。  这种思维的产生根源就是不懂得把握机会&#xff0c;其实机会这个东西很奇妙&#xff0c;有时候我们自己也能发现有个机会就摆…

cisco路由器与QOS技术

1 前言随着因特网的普及&#xff0c;网络和人们生活的关系愈加密切&#xff0c;多样化的业务&#xff08;数据、语音、视频等&#xff09;应运而生。通常&#xff0c;这些业务对于通信条件的要求各不相同&#xff1a;数据业务对传递的可靠性要求非常高&#xff0c;误码率是最重…

shell介绍,命令历史,命令补全和别名 ,通配符, 输入输出重定向

2019独角兽企业重金招聘Python工程师标准>>> shell介绍 shell是一个命令解释器&#xff0c;提供用户和机器之间的交互&#xff1b; 支持特定语法&#xff0c;比如逻辑判断、循环&#xff1b; 每个用户都可以有自己特定的shell&#xff1b; CentOS7默认shell为bash (…

2018年Python开源项目Top100!只在这里!

整理 | Jane出品 | Python大本营2018 年的最后一天&#xff0c;营长为大家新鲜出炉了一份 2018 年 Python 开源项目 Top100 清单&#xff01;这些项目都是营长每月通过收集 Mybridge 的数据整理而来的&#xff0c;是不是很棒&#xff01;&#xff08;我要在留言区看到你们夸我~…

亲君圆梦,创业一起来

你想像中的创业&#xff0c;是不是办公地点找好了吗&#xff1f;需要注册公司一步一步来呢做哪个行业好呢有没有什么赚钱的项目呢没有你想的那么困难只需要一部手机发个链接点一下 玩一年 创业不花一分钱 校园创业 只需动动手指想要带你一起赚钱一起飞吗&#xff1f;我在厦门亲…

半途而废的香山之旅

今天终于下定决心去香山了&#xff01;大清早&#xff0c;就和同学小燕两个人买好了路上吃的东西。顶着北京早晨凉爽但有点阻的风骑车自行车向香山的方向进发了!这是我第一次去香山&#xff0c;路线也只能是摸索了&#xff01;我本来是准备从北四环西路一直往西骑&#xff0c;然…

POwershell 更改文件权限

今天需要给某个网络共享的大文件重新配置一个权限。这个文件夹下面有很多乱七八糟的小文件&#xff0c;很多创建人甚至已经离开公司了。如果一个个地目录手动修改所有者权限&#xff0c;再打开继承关系&#xff0c;这样比较麻烦&#xff0c;这个时候自然是用脚本比较方便了。 1…

“清华帮”AI造富

作者 | 马程&#xff1b;编辑 | 罗丽娟来源 | 全天候科技【导语】如今的AI创业者中&#xff0c;有一大批人出自精英汇聚的 “姚班”和清华的各个院系。他们们凭借技术傍身迅速打造出一批AI独角兽&#xff0c;但在发展过程中&#xff0c;他们又不得不面对资本的压力&#xff0c;…

什么时候是创业最佳时机?7个最佳的励志创业时机GET了吗

1、年轻时人们常说“出名要趁早”&#xff0c;创业也是同样的道理&#xff0c;创业越早&#xff0c;成功的几率就越大。年轻是一种巨大的财富&#xff0c;是无知和天真的完美结合&#xff0c;吸取经验可以作为愚蠢决定的借口。有人说&#xff0c;和职业篮球运动员一样&#xff…

连接ORACLE实例

public class OracleConn {public static Connection getConn() {Connection conn null;try {Class.forName("oracle:jdbc.driver.OracleDriver");String url "jdbc:oracle:thin:localhost:1521:数据库SID";String user "数据库用户名";String…

用Inno Setup来解决.NetFramework安装问题

前段时间朋友接了一个项目&#xff0c;具体是开发一个安装在局域网内的软件&#xff0c;这个软件会定时连接局域网内的服务器来更新本地客户端的一些信息&#xff0c;因为在局域网内存在着多种不同的Windows版本&#xff0c;从WindowsXP、Windows2003及Windows2008到Windows7等…

我想,有间花房

你带我走进你的花房&#xff0c;我无法逃脱花的清香&#xff0c;我不知不觉忘记了方向&#xff0c;你说我世上最坚强&#xff0c;我说你世上最善良&#xff0c;你不知不觉和花儿一样也许每一位 爱花的姑娘&#xff0c;都想有一间属于自己 的花 房 &#xff0c;在悠闲的午后&…

JS重写提示框(confirm)

<script language"javascript"> /** * 功能&#xff1a;显示提示窗口 * 作者&#xff1a;申楠 qq&#xff1a;38371354 email&#xff1a;amushen1yahoo.com.cn http;//amushen.cnblogs.com * 日期&#xff1a;2005-10-26 * 版本&#xff1a;1.1 * 备注&#…

实现通用人工智能还要多久?Hinton与AlphaGo之父这样回答

作者 | Klye Wiggers 译者 | 刘旭坤 责编 | 琥珀 出品 | AI科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09; 人工智能&#xff08;AI&#xff09;在即将过去的 2018 年进展神速&#xff0c;取得了很多令人瞩目的成就&#xff0c;比如预测用户感兴趣的音乐…

SQL Server 2008备份大全实战(七)

这一篇博文探讨下SQL Server 2008 备份的实际操作&#xff0c;事实上SQL Server 2008并不关心数据是备份到物理磁盘上还是磁带上&#xff0c;在SQL Server 2008数据库备份中&#xff0c;预定义的目标位置叫做设备。这里设备是对硬盘&#xff0c;磁带机等备份存储的通称。通俗些…

一个中心、三大原则,阿里这样做智能对话开发平台

作者 | 阿里巴巴高级算法专家 李永彬&#xff08;水德&#xff09;整理 | 一一出品 | AI科技大本营在阿里巴巴的X峰会上&#xff0c;阿里巴巴-智能服务事业部高级算法专家李永彬&#xff08;水德&#xff09;分享了小蜜智能开发平台的构建&#xff0c;他围绕平台来源、设计理念…

大学生目前普遍存在的问题,看你中招了没?

大学几多歌 上课时清醒没有发呆的多&#xff0c;发呆没有睡觉的多&#xff0c;睡觉没有玩手机的多。下课时自习没有吃零食多&#xff0c;吃零食没有看连续剧多&#xff0c;看连续剧没有游戏多。吃饭时吃早餐的没有吃午餐/晚餐的多&#xff0c;吃午餐/晚餐的没有点外卖的多。听讲…

javascript用感

最近两天一直与javascript打交道&#xff0c;现在想总结下所有值处 以下类型都是自己概括别名 1.创建型 例子: var objdocument.createElement("div");//例如创建个DIV var div1document.createElement("div"); div1.id"ddv"; div1.style.w…

Vulkan Tutorial 12 Fixed functions

Vertex input VkPipelineVertexInputStateCreateInfo结构体描述了顶点数据的格式&#xff0c;该结构体数据传递到vertex shader中。它以两种方式进行描述: Bindings:根据数据的间隙&#xff0c;确定数据是每个顶点或者是每个instance(instancing) Attribute 描述:描述将要进行…

年后跳槽BAT必看:10种数据结构、算法和编程课助你面试通关

作者 | javinpaul译者 | 大鱼编辑 | 一一出品 | AI 科技大本营进入 BAT 这样的巨头企业工作&#xff0c;无疑是很多程序员的梦想。但事实上&#xff0c;能通过这些公司高难度编程面试的只是一小撮人&#xff0c;大多数人因为理论知识和项目实践的匮乏导致在面试后很快被淘汰&am…

戚薇在冰箱放香水,是贫穷限制了想象力!

前有李诞冰箱里放面膜&#xff0c;今有戚薇冰箱里放香水&#xff0c;《拜托了冰箱》真是为观众们打开了新世界的大门。在昨晚播出的节目中&#xff0c;戚薇充分展现了她作为“美妆博主”的实力&#xff0c;冰箱里摆满的香水不仅让冰箱家族看得目瞪口呆&#xff0c;网友们也是激…

使用apache的activemq集合JMS处理异步消息

为什么80%的码农都做不了架构师&#xff1f;>>> 1&#xff1a;先去apache下载 http://activemq.apache.org/ &#xff0c;大约有25M&#xff0c;要有点耐心 直接打开就可以使用&#xff1b;当然它也提供了安装为windows service的方法 2&#xff1a;配置activemq 在…

中国大学生创业报告发布

由中国人民大学牵头&#xff0c;北京师范大学、上海交通大学等30余家高校、企业和社会组织联合跟踪调查的《2017年中国大学生创业报告近日发布。这份覆盖全国52所高校的报告表明&#xff0c;大学生创业意愿持续高涨&#xff0c;大学生创业层次也在不断提升&#xff0c;但大学生…