网络上存在很多资源,也持续不断地生成新的资源。为了新建、获取和操作这些资源,引来了两个问题:如何定位资源,如何对他们进行操作。第一个问题引申出了 URI / URL 即 uniform resource identifier / locator,第二个问题则引申出了 HTTP 超文本传输协议。(刚接触 HTTP 不足一礼拜,所以,从这里往下,极可能存在一些错误和理解偏差,单纯个人记录,勿引用)

HTTP 是基于 TCP 传输层协议的一种应用层协议,是 connection oriented 然而无状态(stateless)的一种协议。归根结底,其目的,《A Beginner's Guide to HTTP and REST》将其概括为「The HTTP client and HTTP server exchange information about resources identified by URLs.」

对于资源的增删查改,分别对应于 PUT DELETE GET POST 四种基本的 HTTP 操作,其中最为常用的,则是 GET 和 POST,而这两种操作的本质区别,则在于是否 idempotent 即多次重复操作不会引发多次实际的资源变更(具体可参考《HTTP POST GET 本质区别详解》、《GET vs POST: Don't Mis-Use It Now》、《HTML 表单》,第二篇文章里提到了 google 爬虫开始处理表单的问题,更进一步表明不可在本该使用 POST 的地方使用 GET,否则会引起麻烦),细节层面的区别则包括诸如 form content type 之类的问题。

下面给两个例子,都是通过 GET 直接获取指定 URL 所标定的资源,如:
# http://www.baidu.com/img/bdlogo.gif  - 读取百度的 logo 图片。
# https://www.google.com/search?newwindow=1&q=stackoverflow  - 在 Google 里获取 stackoverflow 相关的索引条目。

由于 HTTP 是无状态的一种协议,所以面对诸如「记住登陆状态」、「记住上次访问这个网页时设定的背景颜色」的需求,就需要在 client-side 设计一种机制,能够存储某些状态。于是催生了 cookie 这种东东。

cookie 记录了用户的一些隐私,需要得到保护;浏览器引入了 domain 的概念,规范和限制前端 Javascript 对 cookie 的获取和操作权限(仅有生成该 cookie 的 HOST domain 能够读取并操作该 cookie)。
然而,某些场景里,如单点登录(single sign-on),希望能够跨域访问 cookie,所以催生了一系列实用手段如《新浪微博如何实现 SSO 分析》,以及 P3P (the Platform for Privacy Preferences) 约定用于保护用户隐私的协议(参考搜狐武汉研发中心企业邮箱团队成员 qyb 的单点登录文章、香港某 CDN 团队成员的博客),还有 stackoverflow 一则已经锁定的 community wiki 帖子《How do I send a cross-domain POST request via JavaScript?》(未细读 #mark#)。

P.S.

其他东东备份(这几天看 HTTP 顺带看了些 web 相关的其他东西,颇有刘姥姥进大观园的惊奇感…… 囧):

## 《HTTP Made Really Easy - A Practical Guide to Writing Clients and Servers》,极好的文章
## 《HTTP keep-alive 模式》即传输层使用长连接模式,避免反复建立和断开连接所增加的开销。使用 Content-Length 或者 Transfer-Encoding: chunkded(有点类似于 Intel extended HEX 格式)来确定单个 HTTP 响应的长度。
## 《HTTP 协议详解》,其实不够详解,但是图文并茂(大量 Fiddler 抓包截图),很不错。

## XSS (Cross site scripting) 跨域脚本攻击科普文:http://www.houbysoft.com/v/en/papers/xss/
## 两则 HTTP cookie and XSS wikipedia 链接,信息量很大,未细看。#mark#
## session cookies vs. persistent cookies - 如果没有设定 expiration date 则属于 session cookie(这个站点都是和 cookie 相关的信息)。

## 《REST : PUT or POST》,依然是 idempotent 的问题。
## 《Learn REST: A Tutorial》系列文章FAQ(填坑专用)。未读完,没细看。#mark#

## 如何通过 Python urllib2 or requests 库编写搜索引擎爬虫 && 如何记住 cookie 留待以后使用,有道云笔记链接

## HTTP proxy 相关的笔记链接,其中提到了 HAProxy 以及其作者提出的 proxy protocol 和 stackoverflow 问答里提到的 HTTP 1.1 RFC 2616 和 SNMP applications RFC 3413(Command Generators, Command Responders, Notification Originators, Notification Receivers, and Proxy Forwarders)。似乎每个主题展开都是极其庞大…… #mark#

HTTP 初步探究的更多相关文章

  1. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

  2. Asp.NetCore初步探究

      1,  新建一个空的AspNetCore项目,默认Program下的代码如下: public static void Main(string[] args) { BuildWebHost(args ...

  3. iOS中的预编译指令的初步探究

    目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...

  4. 自定义ViewGroup初步探究

    由于项目需要,实现类似于地图控件,能够让一张图标自由缩放并且在其上固定位置,标记一些地点,所以在这里,我考虑了一下,决定使用自定义ViewGroup来实现.

  5. 「2014-3-11」HTTP 初步探究

    网络上存在很多资源,也持续不断地生成新的资源.为了新建.获取和操作这些资源,引来了两个问题:如何定位资源,如何对他们进行操作.第一个问题引申出了 URI / URL 即 uniform resourc ...

  6. xvfb 初步探究

    有时候我们不关注程序是否有界面(比如自动化测试),只要程序在运行就可以了 很感谢 xvfb 这个工具给我们提供了相关的功能 比如在没有 X server 的机器上运行 gedit, 可以用下面的命令 ...

  7. Lucene 搜索的初步探究

    搜索应用程序和 Lucene 之间的关系 一般的搜索引擎都会采用这样的 Lucene 采用的是一种称为反向索引(inverted index)的机制.反向索引就是说我们维护了一个词 / 短语表,对于这 ...

  8. 初步探究Android App API接口测试--实战

    一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...

  9. redis-4.0.11主从配置初步探究

    redis-4.0.11相较于以前版本,新增了几个安全措施,稍稍研究了6379.conf配置文件,在这里记录一下. 实验环境: centos7.4 redis:redis-4.0.11 1. redi ...

随机推荐

  1. 如何利用webpack4.0搭建一个vue项目

    作为一个初学者,记录自己踩过的坑是个好的习惯.我本身比较懒,这里刚好有时间把自己的搭建过程记录一下这里是参考文章   https://www.jianshu.com/p/1fc5b5151abf文章里 ...

  2. Java Web解决跨域请求

    要知道跨域请求就要先了解同源策略,那么什么是同源?什么是不同源?简单来说就是,如果两个资源,包括HTML页面.JavaScript脚本.css样式,对应的协议.域名和端口完全相同,那么这两个资源就是同 ...

  3. CV迅速发展

  4. Ubuntu---添加输入法

    摘要:Ubuntu 在刚刚安装好之后,默认是不支持直接输入中文的,所以我们需要安装支持中文的输入法.网络上面一般推荐使用的输入法是 Fcitx(小企鹅输入法),我们今天就来安装和配置它. step1: ...

  5. ucore-lab1-练习6report

    练习6--完善中断初始化和处理 1.  中断向量表中一个表项占多少个字节?其中哪几位代表中断处理代码的入口? 答:系统将所有的中断事件统一进行编号(0-255),这个编号称为中断向量.中断向量表的一个 ...

  6. centos7下Etcd3集群搭建

    一.环境介绍 etcd主要功能是分布式的存储键值,优点不多说了,分布是集群,自动选举等等,自行百度,主要说下配置方法,折腾了几天,终于优点眉目了,记录下操作方法,本文参考了如下链接 https://w ...

  7. mybatis中foreach使用

    mybatis中的<foreach collection="list" item="item" index="index" open= ...

  8. vue-computed计算属性用法

    siytem函数可以当做变量在html中展现,列:{{siytem}}  v-for(item in siytem)遍历也可以. 这个函数是从获取到的数据中,得到值后再次提取里面的数据,通过下标 me ...

  9. JavaSE基础知识(5)—面向对象(5.4面向对象三大特征:封装、继承、多态)

    面向对象编程具有三大特征: 封装 继承 多态 一.封装 1.好处 狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性! ①隐藏一个类中不需要对外提供的实现细节 ②使用者只能通过实现 ...

  10. 使用react-handsontable

    新建一个项目 create-react-app myProject cd myProject npm install handsontable 或者 npm install handsontable- ...