HTTP协议从入门到大牛,初识HTTP协议(学习笔记)
HTTP数据传输协议
当访问一个网页时,浏览器会向服务器发起一条HTTP请求,接着服务器会去寻找相应的资源,如果请求成功,就会把这个对象,对象类型,对象长度以及其他的信息放在HTTP响应中,发送给客户端。
因为资源种类太多,所以WEB服务器在返回响应时会为HTTP对象附加一条MIME类型(数据类型),当浏览器接收到数据时,会去查看这个MIME类型,然后会根据这个类型去渲染它(前提这个浏览器支持这种类型,否则浏览器会通过其他方式,这个没有一个固定的形式)。
MIME类型由两部分组成:
主要类型 / 具体类型
Image/jpeg
如:
人 / 男或女
HTTP 协议入门:http://www.ruanyifeng.com/blog/2016/08/http.html
MIME type还可以在尾部使用分号,添加参数。
Content-Type: text/html; charset=utf-8
客户端请求的时候,可以使用Accept字段声明自己可以接受哪些数据格式。
Accept: */*
上面代码中,客户端声明自己可以接受任何格式的数据。
Content-Encoding 字段
由于发送的数据可以是任何格式,因此可以把数据压缩后再发送。Content-Encoding字段说明数据的压缩方法。
Content-Encoding: gzip
客户端在请求时,用Accept-Encoding字段说明自己可以接受哪些压缩方法。
Accept-Encoding: gzip, deflate
Referer
表示这个请求是从哪个URL过来的。
用途1:获取用户是从哪个网站跳转到你主页的。
用途2:推荐注册应该也是通过这个实现的。(我猜的)
Cache-Control
对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的。
由HTTP引发的性能问题
服务器只有处理完上一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。
为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。
统一资源标识符URI
资源标识符分为两种类型分别是:URL和URN,也就是说URL和URN都是URI的子集。
URL(统一资源定位符)
URL详细的说明了某个资源的位置以及如何去访问它。
URL是URI的一种,不仅标识了Web 资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置。
URL包括3部分:
1.访问资源所使用的协议类型 如: http:// 或 https://
2.服务器地址
3.服务器上具体的文件路径
URN(统一资源名)
用来标识一个实体名字,它并不关心这个资源的具体位置。
URN是URI的一种,用特定命名空间的名字标识资源。使用URN可以在不知道其网络位置及访问方式的情况下讨论资源。
百度云离线下载就是使用的URN:以及这个http://www.xuexila.com/fangfa/1115853.html
URN可以用来实现磁力链接 http://www.tuicool.com/articles/Z36nauv
URL,URN,URI它们之间的区别:http://web.jobbole.com/83452/
HTTP请求方法
方法是用来告诉服务器做什么事情的,状态码则用来告诉客户端,发生了什么事情。
常见HTTP方法
GET:从服务器获取资源
POST:把发送数据到服务器
PUT:将客户端数据存储到服务器中
DELETE:从服务器中删除数据
HEAD:将资源发送到HTTP首部
状态码
每条HTTP响应报文返回时都会携带一个状态码,这个状态码由3位数字组成,他告诉客户端请求是否成功,或是否需要采取其他动作,另外它还会附带一条解释性的短语用来描述这个响应结果。
100 - 199 信息提示
200 - 299 成功
300 - 399 重定向
400 - 499 客户端错误
500 - 599 服务器错误
报文
从客户端发往服务器端的HTTP报文称为请求报文,从服务器端发往客户端的报文称为响应报文。
HTTP报文包括以下3部分
起始行:
在请求报文中说明要干什么,在响应报文中说明出现了什么情况。
首部字段:
首部字段可以包含0个或多个,每个字段包含一个名字以及相应的值它们用 :来分割,每个字段为一行。
主体:
请求主体包括了要发送给服务器的数据,响应主体装载了要返回给客户端的数据,主体可以是普通的文本也可以是二进制数据,另外请求主体是可选的。
传输协议TCP/IP
TCP提供了:无差错的数据传输,数据按发送的顺序到达,可以任意时刻把数据发送出去。
在HTTP客户端向服务器发送报文之前,需要用网际协议地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
IP地址和端口号通过URL上获取,如果URL上使用的是主机名形式,那么浏览器会通过DNS来将对应的域名解析成IP地址,如果URL上没有提供端口号,那么默认为80端,数据库默认端口为3306。
步骤如下:
1.浏览器从URL中解析出服务器的主机名
2.将主机名转换成IP地址
3.将URL中的端口号解析出来,没有的话默认80
4.建立TCP连接
5.浏览器向服务器发送一条HTTP请求
6.服务器响应客户端报文
7.关闭连接,浏览器解析响应内容。
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
Cookie和Session它们都是为了解决HTTP无状态的问题而所做的努力。
HTTP报文详解:http://www.iteye.com/topic/1124408
HTTP协议:http://www.cnblogs.com/xiguain/category/600996.html
HTTP协议从入门到大牛,初识HTTP协议(学习笔记)的更多相关文章
- 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记
系统信息:CentOS 64位. 一张图了解命令提示符和命令行 一些实用小命令 mkdir(make directory,创建目录).ls(list,列出当前目录下的内容).rm(remove,删除文 ...
- Shell脚本编程入门(一) 分类: 学习笔记 linux ubuntu 2015-07-09 21:06 29人阅读 评论(0) 收藏
最近在学shell,记录一下. if语句的使用: 1.判断两个参数大小 #!/bin/sh #a test about if statement a=10 b=20 if [ $a -eq $b ]; ...
- shell入门之函数应用 分类: 学习笔记 linux ubuntu 2015-07-10 21:48 77人阅读 评论(0) 收藏
最近在学习shell编程,文中若有错误的地方还望各位批评指正. 先来看一个简单的求和函数 #!/bin/bash #a test about function f_sum 7 8 function f ...
- shell入门之流程控制语句 分类: 学习笔记 linux ubuntu 2015-07-10 16:38 89人阅读 评论(0) 收藏
1.case 脚本: #!/bin/bash #a test about case case $1 in "lenve") echo "input lenve" ...
- shell入门之变量测试 分类: 学习笔记 linux ubuntu 2015-07-10 15:49 31人阅读 评论(0) 收藏
格式:test 测试条件 字符串测试: 注意空格: test str1 == str2 测试字符串是否相等 test str1 != str2 测试字符串是否不相等 test str1 测试字符串是否 ...
- Awk 从入门到放弃(1)–学习笔记
参考:朱双印博客 1. 将test文件中的内容打印出来:vmuser@vmuser-virtual-machine:~/panzidong/awk$ echo ddd > testvmuser@ ...
- cocos2d-x-3.1 win32程序-初识源代码(coco2d-x 学习笔记二)
本人吊丝一枚.没钱买mac电脑,仅仅能使用Visual Studio2013来开发cocos2d-x项目.当然也能够用eclipse来开发,可是开发与配置步骤要复杂的多,而且非常多功能没有其好.也是官 ...
- 初识Restful(学习笔记)
什么是Restful? REST -- Resource Representational State Transfer(表现层状态转移) 本质上是一种优雅的URL表达方式,描述资源的状态和状态的转移 ...
- ES6标准入门(第三版)学习笔记(1)
ES6声明变量的六种方法 ES5只有两种 var,function命令 ES6新增了let,const,class,import命令 验证var与let用法上的不同 var a = []; for ( ...
随机推荐
- mysql 函数(二)
1.space(N) 输出空格 SELECT SPACE(5); -> ' ' 2.replace(str,from_str,to_str) 讲str中的from_str 替换成to_s ...
- Eclipse配置tomcat后,启动tomcat,访问tomcat报404错误
当你在Eclipse中新建一个工程,配置好tomcat,然后测试tomcat是否配置成功的时候,报404错误异常. 解决方法: 1,把工程文件删除,重新建立一个新的工程, 2,新建一个工程. 3,Ne ...
- AndroidStudio学习笔记-第一个安卓程序
要带一个本科生做一部分跟安卓有点关系的项目,于是趁着机会学习一下编写安卓程序. 第一篇材料来自谷歌官方,传送门:https://developer.android.com/training/basic ...
- 手机浏览器,微信中播放amr录音
由于微信公众号开发中,临时素材只有三天的有效期,但是客户要求所有录音永久保存,永久素材数量又有限制,故只能把录音保存到服务器上.但是存到服务器上有一个问题,手机微信中无法直接播放amr录音.无意中发现 ...
- HTTP03--DNS知识
一.域名解析过程 1. 浏览器检查自身缓存,缓存时间为几分钟到小时不等,通过设置TTL属性确定. 2. 若1未找到,则查OS缓存,如windows下的host文件,linux的/etc/hosts文件 ...
- ddms(基于 Express 的表单管理系统)源码学习
ddms是基于express的一个表单管理系统,今天抽时间看了下它的代码,其实算不上源码学习,只是对它其中一些小的开发技巧做一些记录,希望以后在项目开发中能够实践下. 数据层封装 模块只对外暴露mod ...
- Java虚拟机7:内存分配原则
前言 对象的内存分配,往大的方向上讲,就是在堆上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存相关的参数 ...
- javascript中this指针探讨
javascript是一门类java语言有很多跟java相类似的特点,但也仅是类似而已,真正使用中还是有很大的差别.this指针常常让很多初学者抓狂,本人也曾为此困惑不解,查找过很多资料,今天在这里总 ...
- EF 外键问题
在做一个评论功能的时候,发现用户的id不对,打开数据库一看,莫名其妙的新增了几个用户.明显是将外键中的用户新增到用户表中了. 评论表: public class CourseComment : Bas ...
- java提高篇(三)-----java的四舍五入
Java小事非小事!!!!!!!!!!!! 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了.在讲解之间我们先看如下一个经典的案例: public stat ...